diff mbox series

cmd: make 'booti -h' not crash the board

Message ID 20240618145213.3284922-1-caleb.connolly@linaro.org
State New
Headers show
Series cmd: make 'booti -h' not crash the board | expand

Commit Message

Caleb Connolly June 18, 2024, 2:51 p.m. UTC
Check the result of hextoul() when parsing the first argument to booti,
and add specific handling for "-h" to print usage rather than causing a
null pointer exception.

Fixes: 5db28905c952 ("cmd: Split 'bootz' and 'booti' out from 'bootm'")
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
---
 cmd/booti.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

Comments

Heinrich Schuchardt June 18, 2024, 5:02 p.m. UTC | #1
Am 18. Juni 2024 16:51:56 MESZ schrieb Caleb Connolly <caleb.connolly@linaro.org>:
>Check the result of hextoul() when parsing the first argument to booti,
>and add specific handling for "-h" to print usage rather than causing a
>null pointer exception.
>
>Fixes: 5db28905c952 ("cmd: Split 'bootz' and 'booti' out from 'bootm'")
>Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
>---
> cmd/booti.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
>diff --git a/cmd/booti.c b/cmd/booti.c
>index 62b19e834366..c4029a84e7a7 100644
>--- a/cmd/booti.c
>+++ b/cmd/booti.c
>@@ -31,8 +31,9 @@ static int booti_start(struct bootm_info *bmi)
> 	ulong dest_end;
> 	unsigned long comp_len;
> 	unsigned long decomp_len;
> 	int ctype;
>+	char *endp;
> 
> 	ret = bootm_run_states(bmi, BOOTM_STATE_START);
> 
> 	/* Setup Linux kernel Image entry point */
>@@ -40,9 +41,14 @@ static int booti_start(struct bootm_info *bmi)
> 		ld = image_load_addr;
> 		debug("*  kernel: default image load address = 0x%08lx\n",
> 				image_load_addr);
> 	} else {
>-		ld = hextoul(bmi->addr_img, NULL);
>+		ld = hextoul(bmi->addr_img, &endp);
>+		if (*endp != '\0') {
>+			printf("## Invalid kernel image address: %s\n",
>+			       bmi->addr_img);
>+			return CMD_RET_USAGE;
>+		}
> 		debug("*  kernel: cmdline image address = 0x%08lx\n", ld);
> 	}
> 
> 	temp = map_sysmem(ld, 0);
>@@ -108,8 +114,11 @@ int do_booti(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
> 
> 	/* Consume 'booti' */
> 	argc--; argv++;
> 
>+	if (argc && strcmp(argv[0], "-h") == 0)
>+		return CMD_RET_USAGE;

We have the help command which works on all commands. Please, avoid duplicating this functionality.

Best regards

Heinrich


>+
> 	bootm_init(&bmi);
> 	if (argc)
> 		bmi.addr_img = argv[0];
> 	if (argc > 1)
diff mbox series

Patch

diff --git a/cmd/booti.c b/cmd/booti.c
index 62b19e834366..c4029a84e7a7 100644
--- a/cmd/booti.c
+++ b/cmd/booti.c
@@ -31,8 +31,9 @@  static int booti_start(struct bootm_info *bmi)
 	ulong dest_end;
 	unsigned long comp_len;
 	unsigned long decomp_len;
 	int ctype;
+	char *endp;
 
 	ret = bootm_run_states(bmi, BOOTM_STATE_START);
 
 	/* Setup Linux kernel Image entry point */
@@ -40,9 +41,14 @@  static int booti_start(struct bootm_info *bmi)
 		ld = image_load_addr;
 		debug("*  kernel: default image load address = 0x%08lx\n",
 				image_load_addr);
 	} else {
-		ld = hextoul(bmi->addr_img, NULL);
+		ld = hextoul(bmi->addr_img, &endp);
+		if (*endp != '\0') {
+			printf("## Invalid kernel image address: %s\n",
+			       bmi->addr_img);
+			return CMD_RET_USAGE;
+		}
 		debug("*  kernel: cmdline image address = 0x%08lx\n", ld);
 	}
 
 	temp = map_sysmem(ld, 0);
@@ -108,8 +114,11 @@  int do_booti(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 
 	/* Consume 'booti' */
 	argc--; argv++;
 
+	if (argc && strcmp(argv[0], "-h") == 0)
+		return CMD_RET_USAGE;
+
 	bootm_init(&bmi);
 	if (argc)
 		bmi.addr_img = argv[0];
 	if (argc > 1)