[PATCH RFC] fdt.c: fdt chosen cmd had off-by-one issue

George Chan via B4 Relay devnull+gchan9527.gmail.com at kernel.org
Mon Apr 7 08:43:44 CEST 2025


From: George Chan <gchan9527 at gmail.com>

The kernel searching bootconfig will be off-by-1 and never match
thus always not found in this case.

Signed-off-by: George Chan <gchan9527 at gmail.com>
---
The searching will shift-by-1 and never match the bootconfig thus
always not found bootconfig this case.

Kernel:
            data = (char *)initrd_end - BOOTCONFIG_MAGIC_LEN;
            for (i = 0; i < 4; i++) {
                    if (!memcmp(data, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN))
                            goto found;
                    data--;
            }
u-boot:
            initrd_end = initrd_start + hextoul(argv[3], NULL) - 1;

That would be off-by-one apprently and matching fail for bootconfig.
Both u-boot and kernel worth a fix.

An out-of-tree patch for kernel to relax the searching is available
but not ready for submit.
https://github.com/99degree/linux/commit/9d9ea454fe857a9f550d7e60957253e176e8e123
---
 cmd/fdt.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmd/fdt.c b/cmd/fdt.c
index d16b141ce32..13ffe929f8b 100644
--- a/cmd/fdt.c
+++ b/cmd/fdt.c
@@ -705,7 +705,7 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 
 		if (argc == 4) {
 			initrd_start = hextoul(argv[2], NULL);
-			initrd_end = initrd_start + hextoul(argv[3], NULL) - 1;
+			initrd_end = initrd_start + hextoul(argv[3], NULL);
 		}
 
 		fdt_chosen(working_fdt);

---
base-commit: 848f7ffc64aa7c4cc2229095812625c12343c8c1
change-id: 20250407-fdt-chosen-c87045f2e1e9

Best regards,
-- 
George Chan <gchan9527 at gmail.com>




More information about the U-Boot mailing list