Message ID | 20220620084628.20894-2-johan@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Input: usbtouchscreen - suppress empty array warnings | expand |
Hi Johan, On Mon, Jun 20, 2022 at 10:46:27AM +0200, Johan Hovold wrote: > When compile-testing the USB touchscreen driver without enabling any of > the device type options the usbtouch_dev_info array ends up being empty, > something which triggers compiler warning with -Warray-bounds > (gcc-11.3.0). > > drivers/input/touchscreen/usbtouchscreen.c: In function 'usbtouch_probe': > drivers/input/touchscreen/usbtouchscreen.c:1668:16:warning: array subscript <unknown> is outside array bounds of 'struct usbtouch_device_info[0]' [-Warray-bounds] > 1668 | type = &usbtouch_dev_info[id->driver_info]; > > Suppress the warnings by making sure that the array is always non-empty. Does it still warn if you add a check for type, something like if (type >= ARRAY_SIZE(usbtouch_device_info)) return -ENODEV; ? Thanks.
On Wed, Jun 22, 2022 at 04:22:08PM -0700, Dmitry Torokhov wrote: > Hi Johan, > > On Mon, Jun 20, 2022 at 10:46:27AM +0200, Johan Hovold wrote: > > When compile-testing the USB touchscreen driver without enabling any of > > the device type options the usbtouch_dev_info array ends up being empty, > > something which triggers compiler warning with -Warray-bounds > > (gcc-11.3.0). > > > > drivers/input/touchscreen/usbtouchscreen.c: In function 'usbtouch_probe': > > drivers/input/touchscreen/usbtouchscreen.c:1668:16:warning: array subscript <unknown> is outside array bounds of 'struct usbtouch_device_info[0]' [-Warray-bounds] > > 1668 | type = &usbtouch_dev_info[id->driver_info]; > > > > Suppress the warnings by making sure that the array is always non-empty. > > Does it still warn if you add a check for type, something like > > if (type >= ARRAY_SIZE(usbtouch_device_info)) > return -ENODEV; > > ? It seems if (id->driver_info >= ARRAY_SIZE(usbtouch_dev_info)) return -ENODEV; indeed does the trick. I'll send a v2. Johan
diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c index 43c521f50c85..6683554f0e92 100644 --- a/drivers/input/touchscreen/usbtouchscreen.c +++ b/drivers/input/touchscreen/usbtouchscreen.c @@ -128,6 +128,7 @@ enum { DEVTYPE_NEXIO, DEVTYPE_ELO, DEVTYPE_ETOUCH, + DEVTYPE_COUNT }; #define USB_DEVICE_HID_CLASS(vend, prod) \ @@ -1379,6 +1380,7 @@ static struct usbtouch_device_info usbtouch_dev_info[] = { .read_data = etouch_read_data, }, #endif + [DEVTYPE_COUNT] = { } /* Make sure array is non-empty */ };
When compile-testing the USB touchscreen driver without enabling any of the device type options the usbtouch_dev_info array ends up being empty, something which triggers compiler warning with -Warray-bounds (gcc-11.3.0). drivers/input/touchscreen/usbtouchscreen.c: In function 'usbtouch_probe': drivers/input/touchscreen/usbtouchscreen.c:1668:16:warning: array subscript <unknown> is outside array bounds of 'struct usbtouch_device_info[0]' [-Warray-bounds] 1668 | type = &usbtouch_dev_info[id->driver_info]; Suppress the warnings by making sure that the array is always non-empty. Signed-off-by: Johan Hovold <johan@kernel.org> --- drivers/input/touchscreen/usbtouchscreen.c | 2 ++ 1 file changed, 2 insertions(+)