cmd: fdt: Handle 64bit pointers in fdt get addr
authorMarek Vasut <marek.vasut+renesas@mailbox.org>
Thu, 2 Mar 2023 03:08:21 +0000 (04:08 +0100)
committerSimon Glass <sjg@chromium.org>
Wed, 8 Mar 2023 19:40:57 +0000 (11:40 -0800)
The command assumed 32bit pointers so far, with 64bit pointer the
command would overwrite a piece of stack. Fix it by extending the
array size to cater for 64bit pointer, and use snprintf() to avoid
writing past the end of the array ever again.

Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
cmd/fdt.c

index 279dad9..bc19303 100644 (file)
--- a/cmd/fdt.c
+++ b/cmd/fdt.c
@@ -466,9 +466,9 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
                                                return ret;
                                } else if (subcmd[0] == 'a') {
                                        /* Get address */
-                                       char buf[11];
+                                       char buf[19];
 
-                                       sprintf(buf, "0x%p", nodep);
+                                       snprintf(buf, sizeof(buf), "0x%p", nodep);
                                        env_set(var, buf);
                                } else if (subcmd[0] == 's') {
                                        /* Get size */