On Sun, Jul 02, 2023 at 12:39:20AM +0800, Zhang Shurong wrote: > If wIndex is 0 (and it often is), these calculations underflow and > UBSAN complains, here resolve this by not decrementing the index when > it is equal to 0. > > Similar commit 85e3990bea49 ("USB: EHCI: avoid undefined pointer > arithmetic and placate UBSAN") > > The changes in this version: > - fix some compile error > > Signed-off-by: Zhang Shurong <zhang_shurong@xxxxxxxxxxx> > --- > drivers/usb/host/r8a66597-hcd.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c > index 9f4bf8c5f8a5..6c597c668364 100644 > --- a/drivers/usb/host/r8a66597-hcd.c > +++ b/drivers/usb/host/r8a66597-hcd.c > @@ -2141,10 +2141,12 @@ static int r8a66597_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, > { > struct r8a66597 *r8a66597 = hcd_to_r8a66597(hcd); > int ret; > - int port = (wIndex & 0x00FF) - 1; > - struct r8a66597_root_hub *rh = &r8a66597->root_hub[port]; > unsigned long flags; > + struct r8a66597_root_hub *rh; > + u32 port = wIndex & 0xFF; > > + port -= (port > 0); I have no idea about this hardware, but it seems strange to me that calling r8a66597_hub_control with wIndex = 1 should have the same effect as with wIndex = 0. Is you changed backed by knowledge about the hardware, or is that just the most obvious way to get rid of the UB warning? Having said that, I think port -= (port > 0); is hard to read compared to: if (port > 0) port--; Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ |
Attachment:
signature.asc
Description: PGP signature