Re: [PATCH v4] USB: ehci_brcm_hub_control: improve port index sanitizing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Nov 13, 2021 at 12:57:14PM +0800, Haimin Zhang wrote:
> Due to (wIndex & 0xff) - 1 can get an integer greater than 0xf, this
> can cause array index to be out of bounds since the size of array
> port_status is 0xf. This change prevents a possible out-of-bounds
> pointer computation by forcing the use of a valid port number.

I would write 15 instead of 0xf.  The size of the array is 15; see the 
definition of HCS_N_PORTS_MAX.  (Yes, I realize the 0xf is equal to 15, 
but why force people to go out of their way to translate a hex number 
into decimal?)

> 
> Reported-by: TCS Robot <tcs_robot@xxxxxxxxxxx>
> Signed-off-by: Haimin Zhang <tcs.kernel@xxxxxxxxx>
> ---

You did not include the version change information here.

>  drivers/usb/host/ehci-brcm.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/host/ehci-brcm.c b/drivers/usb/host/ehci-brcm.c
> index d3626bfa966b..2e92918a14dd 100644
> --- a/drivers/usb/host/ehci-brcm.c
> +++ b/drivers/usb/host/ehci-brcm.c
> @@ -62,8 +62,12 @@ static int ehci_brcm_hub_control(
>  	u32 __iomem	*status_reg;
>  	unsigned long flags;
>  	int retval, irq_disabled = 0;
> +	u32 temp;
>  
> -	status_reg = &ehci->regs->port_status[(wIndex & 0xff) - 1];
> +	temp = (wIndex & 0xff) - 1;
> +	if (temp >= HCS_N_PORTS_MAX)
> +		temp = 0;

There ought to be a comment explaining why you are doing this (namely, 
to avoid an "index out of bounds" warning).  The reason isn't 
automatically obvious.

Alan Stern

> +	status_reg = &ehci->regs->port_status[temp];
>  
>  	/*
>  	 * RESUME is cleared when GetPortStatus() is called 20ms after start
> -- 
> 2.30.1 (Apple Git-130)
> 



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux