usb: udc: lpc32xx: fix bad bit shift operation
Subsystems (2)
PATCH 1/1 usb: udc: lpc32xx: fix bad bit shift operation
It seems that the right variable to use in this case is *i*, instead of *n*, otherwise there is an undefined behavior when right shifiting by more than 31 bits when multiplying n by 8; notice that *n* can take values equal or greater than 4 (4, 8, 16, ...).
Also, notice that under the current conditions (bl = 3), we are skiping the handling of bytes 3, 7, 31... So, fix this by updating this logic and limit *bl* up to 4 instead of up to 3.
This fix is based on function udc_stuff_fifo().
Addresses-Coverity-ID: 1454834 ("Bad bit shift operation")
Fixes 24a28e428351 ("USB: gadget driver for LPC32xx")
Signed-off-by Gustavo A. R. Silva <[email protected]>
--- drivers/usb/gadget/udc/lpc32xx_udc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/usb/gadget/udc/lpc32xx_udc.c +3 -3
@@ -1177,11 +1177,11 @@ static void udc_pop_fifo(struct lpc32xx_udc *udc, u8 *data, u32 bytes) tmp =readl (USBD_RXDATA (udc->udp_baseaddr)); bl = bytes - n; -if (bl >3 ) - bl =3 ; +if (bl >4 ) + bl =4 ;for (i =0 ; i < bl; i++) - data[n + i] = (u8) ((tmp >> (n *8 )) &0xFF ); + data[n + i] = (u8) ((tmp >> (i *8 )) &0xFF ); }break ;
Signature · 7 lines
2.23.0 _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel