usb: ch9: Replace 1-element array with flexible array
authorKees Cook <keescook@chromium.org>
Wed, 14 Jun 2023 18:13:11 +0000 (11:13 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 15 Jun 2023 09:43:29 +0000 (11:43 +0200)
Since commit df8fc4e934c1 ("kbuild: Enable -fstrict-flex-arrays=3"),
UBSAN_BOUNDS no longer pretends 1-element arrays are unbounded. Walking
wData will trigger a warning, so make it a proper flexible array. Add a
union to keep the struct size identical for userspace in case anything
was depending on the old size.

Reported-by: kernel test robot <oliver.sang@intel.com>
Closes: https://lore.kernel.org/oe-lkp/202306102333.8f5a7443-oliver.sang@intel.com
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: kernel test robot <lkp@intel.com>
Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: "Jó Ágila Bitsch" <jgilab@gmail.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Message-ID: <20230614181307.gonna.256-kees@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
include/uapi/linux/usb/ch9.h

index b17e3a2..82ec6af 100644 (file)
@@ -376,7 +376,10 @@ struct usb_string_descriptor {
        __u8  bLength;
        __u8  bDescriptorType;
 
-       __le16 wData[1];                /* UTF-16LE encoded */
+       union {
+               __le16 legacy_padding;
+               __DECLARE_FLEX_ARRAY(__le16, wData);    /* UTF-16LE encoded */
+       };
 } __attribute__ ((packed));
 
 /* note that "string" zero is special, it holds language codes that