diff mbox series

[v2] cmd: fastboot: Validate user input

Message ID 20180629185940.9369-1-semen.protsenko@linaro.org
State Accepted
Commit aa51579f9aecdc509c91d6a9fc9498c2495cf218
Headers show
Series [v2] cmd: fastboot: Validate user input | expand

Commit Message

Sam Protsenko June 29, 2018, 6:59 p.m. UTC
In case when user provides '-' as USB controller index, like this:

    => fastboot -

data abort occurs in strcmp() function in do_fastboot(), here:

    if (!strcmp(argv[1], "udp"))

(tested on BeagleBone Black).

That's because argv[1] is NULL when user types in the '-', and null
pointer dereference occurs in strcmp() (which is ok according to C
standard specification). So we must validate user input to prevent such
behavior.

While at it, check also the result of strtoul() function and handle
error cases properly.

Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
---
Changes for v2:
  - replace argv check with argc check
  - add mentioning of testing platform in commit message

 cmd/fastboot.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

Comments

Simon Glass June 30, 2018, 4:20 a.m. UTC | #1
On 29 June 2018 at 11:59, Sam Protsenko <semen.protsenko@linaro.org> wrote:
> In case when user provides '-' as USB controller index, like this:
>
>     => fastboot -
>
> data abort occurs in strcmp() function in do_fastboot(), here:
>
>     if (!strcmp(argv[1], "udp"))
>
> (tested on BeagleBone Black).
>
> That's because argv[1] is NULL when user types in the '-', and null
> pointer dereference occurs in strcmp() (which is ok according to C
> standard specification). So we must validate user input to prevent such
> behavior.
>
> While at it, check also the result of strtoul() function and handle
> error cases properly.
>
> Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
> ---
> Changes for v2:
>   - replace argv check with argc check
>   - add mentioning of testing platform in commit message
>
>  cmd/fastboot.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)

Reviewed-by: Simon Glass <sjg@chromium.org>
Sam Protsenko July 12, 2018, 7:48 p.m. UTC | #2
Hi Tom,

If there is no objections here, can we apply this patch?

Thanks.

On Sat, Jun 30, 2018 at 7:20 AM, Simon Glass <sjg@chromium.org> wrote:
> On 29 June 2018 at 11:59, Sam Protsenko <semen.protsenko@linaro.org> wrote:
>> In case when user provides '-' as USB controller index, like this:
>>
>>     => fastboot -
>>
>> data abort occurs in strcmp() function in do_fastboot(), here:
>>
>>     if (!strcmp(argv[1], "udp"))
>>
>> (tested on BeagleBone Black).
>>
>> That's because argv[1] is NULL when user types in the '-', and null
>> pointer dereference occurs in strcmp() (which is ok according to C
>> standard specification). So we must validate user input to prevent such
>> behavior.
>>
>> While at it, check also the result of strtoul() function and handle
>> error cases properly.
>>
>> Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
>> ---
>> Changes for v2:
>>   - replace argv check with argc check
>>   - add mentioning of testing platform in commit message
>>
>>  cmd/fastboot.c | 13 ++++++++++++-
>>  1 file changed, 12 insertions(+), 1 deletion(-)
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
Sam Protsenko July 24, 2018, 4:39 p.m. UTC | #3
On Sat, Jun 30, 2018 at 7:20 AM, Simon Glass <sjg@chromium.org> wrote:
> On 29 June 2018 at 11:59, Sam Protsenko <semen.protsenko@linaro.org> wrote:
>> In case when user provides '-' as USB controller index, like this:
>>
>>     => fastboot -
>>
>> data abort occurs in strcmp() function in do_fastboot(), here:
>>
>>     if (!strcmp(argv[1], "udp"))
>>
>> (tested on BeagleBone Black).
>>
>> That's because argv[1] is NULL when user types in the '-', and null
>> pointer dereference occurs in strcmp() (which is ok according to C
>> standard specification). So we must validate user input to prevent such
>> behavior.
>>
>> While at it, check also the result of strtoul() function and handle
>> error cases properly.
>>
>> Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
>> ---
>> Changes for v2:
>>   - replace argv check with argc check
>>   - add mentioning of testing platform in commit message
>>
>>  cmd/fastboot.c | 13 ++++++++++++-
>>  1 file changed, 12 insertions(+), 1 deletion(-)
>
> Reviewed-by: Simon Glass <sjg@chromium.org>

Hi Lukasz,

Can you please review and merge?

Thanks!
Lukasz Majewski July 24, 2018, 9:22 p.m. UTC | #4
Hi Sam,

> On Sat, Jun 30, 2018 at 7:20 AM, Simon Glass <sjg@chromium.org> wrote:

> > On 29 June 2018 at 11:59, Sam Protsenko

> > <semen.protsenko@linaro.org> wrote:  

> >> In case when user provides '-' as USB controller index, like this:

> >>  

> >>     => fastboot -  

> >>

> >> data abort occurs in strcmp() function in do_fastboot(), here:

> >>

> >>     if (!strcmp(argv[1], "udp"))

> >>

> >> (tested on BeagleBone Black).

> >>

> >> That's because argv[1] is NULL when user types in the '-', and null

> >> pointer dereference occurs in strcmp() (which is ok according to C

> >> standard specification). So we must validate user input to prevent

> >> such behavior.

> >>

> >> While at it, check also the result of strtoul() function and handle

> >> error cases properly.

> >>

> >> Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>

> >> ---

> >> Changes for v2:

> >>   - replace argv check with argc check

> >>   - add mentioning of testing platform in commit message

> >>

> >>  cmd/fastboot.c | 13 ++++++++++++-

> >>  1 file changed, 12 insertions(+), 1 deletion(-)  

> >

> > Reviewed-by: Simon Glass <sjg@chromium.org>  

> 

> Hi Lukasz,

> 

> Can you please review and merge?


I've noticed that I was not CC'ed, so I've missed the patch from the
mailing list.
You may consider using patman for sending patches (which adds
recipients automatically).


The patch itself seems OK - thanks.

Reviewed-by: Lukasz Majewski <lukma@denx.de>


I've added it to u-boot-dfu tree. Lets wait for Travis-CI output.

> 

> Thanks!





Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
Sam Protsenko Aug. 13, 2018, 12:57 p.m. UTC | #5
Hi Lukasz,

On Wed, Jul 25, 2018 at 12:22 AM, Lukasz Majewski <lukma@denx.de> wrote:
>
> Hi Sam,
>
> > On Sat, Jun 30, 2018 at 7:20 AM, Simon Glass <sjg@chromium.org> wrote:
> > > On 29 June 2018 at 11:59, Sam Protsenko
> > > <semen.protsenko@linaro.org> wrote:
> > >> In case when user provides '-' as USB controller index, like this:
> > >>
> > >>     => fastboot -
> > >>
> > >> data abort occurs in strcmp() function in do_fastboot(), here:
> > >>
> > >>     if (!strcmp(argv[1], "udp"))
> > >>
> > >> (tested on BeagleBone Black).
> > >>
> > >> That's because argv[1] is NULL when user types in the '-', and null
> > >> pointer dereference occurs in strcmp() (which is ok according to C
> > >> standard specification). So we must validate user input to prevent
> > >> such behavior.
> > >>
> > >> While at it, check also the result of strtoul() function and handle
> > >> error cases properly.
> > >>
> > >> Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
> > >> ---
> > >> Changes for v2:
> > >>   - replace argv check with argc check
> > >>   - add mentioning of testing platform in commit message
> > >>
> > >>  cmd/fastboot.c | 13 ++++++++++++-
> > >>  1 file changed, 12 insertions(+), 1 deletion(-)
> > >
> > > Reviewed-by: Simon Glass <sjg@chromium.org>
> >
> > Hi Lukasz,
> >
> > Can you please review and merge?
>
> I've noticed that I was not CC'ed, so I've missed the patch from the
> mailing list.
> You may consider using patman for sending patches (which adds
> recipients automatically).
>
>
> The patch itself seems OK - thanks.
>
> Reviewed-by: Lukasz Majewski <lukma@denx.de>
>
> I've added it to u-boot-dfu tree. Lets wait for Travis-CI output.
>

u-boot-usb was merged into master recently, but this patch is still
missing in master. Can you please check that for me, I'm afraid it
could have been lost...

Thanks!

> >
> > Thanks!
>
>
>
>
> Best regards,
>
> Lukasz Majewski
>
> --
>
> DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
diff mbox series

Patch

diff --git a/cmd/fastboot.c b/cmd/fastboot.c
index e6ae0570d5..ae3a5f627f 100644
--- a/cmd/fastboot.c
+++ b/cmd/fastboot.c
@@ -38,13 +38,18 @@  static int do_fastboot_usb(int argc, char *const argv[],
 #if CONFIG_IS_ENABLED(USB_FUNCTION_FASTBOOT)
 	int controller_index;
 	char *usb_controller;
+	char *endp;
 	int ret;
 
 	if (argc < 2)
 		return CMD_RET_USAGE;
 
 	usb_controller = argv[1];
-	controller_index = simple_strtoul(usb_controller, NULL, 0);
+	controller_index = simple_strtoul(usb_controller, &endp, 0);
+	if (*endp != '\0') {
+		pr_err("Error: Wrong USB controller index format\n");
+		return CMD_RET_FAILURE;
+	}
 
 	ret = board_usb_init(controller_index, USB_INIT_DEVICE);
 	if (ret) {
@@ -120,6 +125,12 @@  NXTARG:
 		;
 	}
 
+	/* Handle case when USB controller param is just '-' */
+	if (argc == 1) {
+		pr_err("Error: Incorrect USB controller index\n");
+		return CMD_RET_USAGE;
+	}
+
 	fastboot_init((void *)buf_addr, buf_size);
 
 	if (!strcmp(argv[1], "udp"))