Bug 216020

Summary: drivers/usb/ folder compilation with allyesconfig fails
Product: Drivers Reporter: Kushagra Verma (kushagra765)
Component: USBAssignee: Default virtual assignee for Drivers/USB (drivers_usb)
Status: NEW ---    
Severity: normal    
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 5.18 Subsystem:
Regression: No Bisected commit-id:

Description Kushagra Verma 2022-05-24 14:58:45 UTC
When compiling the drivers/usb/ folder with GCC version 12.1.0, the compilation fails with the following errors:

    drivers/usb/storage/ene_ub6250.c: In function ‘ms_lib_process_bootblock’:
drivers/usb/storage/ene_ub6250.c:1050:44: error: array subscript ‘struct ms_bootblock_idi[0]’ is partly outside array bounds of ‘unsigned char[512]’ [-Werror=array-bounds]
 1050 |                         if (le16_to_cpu(idi->wIDIgeneralConfiguration) != MS_IDI_GENERAL_CONF)
      |                                            ^~
 
    drivers/usb/storage/ene_ub6250.c: In function ‘ms_lib_process_bootblock’:
drivers/usb/storage/ene_ub6250.c:1053:70: error: array subscript ‘struct ms_bootblock_idi[0]’ is partly outside array bounds of ‘unsigned char[512]’ [-Werror=array-bounds]
 1053 |                info->MS_Lib.BytesPerSector = le16_to_cpu(idi->wIDIbytesPerSector);
      |                                                             ^~

After these errors, when make waits for unfinished jobs, the following errors come:

   In function ‘xhci_mvebu_mbus_config’,
    inlined from ‘xhci_mvebu_mbus_init_quirk’ at drivers/usb/host/xhci-mvebu.c:66:2:
drivers/usb/host/xhci-mvebu.c:37:28: error: array subscript 0 is outside array bounds of ‘const struct mbus_dram_window[0]’ [-Werror=array-bounds]
   37 |                 writel(((cs->size - 1) & 0xffff0000) | (cs->mbus_attr << 8) |
      |                          ~~^~~~~~
drivers/usb/host/xhci-mvebu.c:37:59: error: array subscript 0 is outside array bounds of ‘const struct mbus_dram_window[0]’ [-Werror=array-bounds]
   37 |                 writel(((cs->size - 1) & 0xffff0000) | (cs->mbus_attr << 8) |
      |                                                         ~~^~~~~~~~~~~
drivers/usb/host/xhci-mvebu.c:41:27: error: array subscript 0 is outside array bounds of ‘const struct mbus_dram_window[0]’ [-Werror=array-bounds]
   41 |                 writel((cs->base & 0xffff0000), base + USB3_WIN_BASE(win));
      |                         ~~^~~~~~
cc1: all warnings being treated as errors

These errors also come when compiling gregkh/usb.git (usb-next branch) with the GCC version and the configuration mentioned above.
Comment 1 Greg Kroah-Hartman 2022-05-24 15:07:47 UTC
On Tue, May 24, 2022 at 02:58:45PM +0000, bugzilla-daemon@kernel.org wrote:
> https://bugzilla.kernel.org/show_bug.cgi?id=216020
> 
>             Bug ID: 216020
>            Summary: drivers/usb/ folder compilation with allyesconfig
>                     fails
>            Product: Drivers
>            Version: 2.5
>     Kernel Version: 5.18
>           Hardware: All
>                 OS: Linux
>               Tree: Mainline
>             Status: NEW
>           Severity: normal
>           Priority: P1
>          Component: USB
>           Assignee: drivers_usb@kernel-bugs.kernel.org
>           Reporter: kushagra765@outlook.com
>         Regression: No
> 
> When compiling the drivers/usb/ folder with GCC version 12.1.0, the
> compilation
> fails with the following errors:

There are numerous errors when building the kernel with gcc 12.1 right
now.  It is being worked on, please see the development efforts on the
linux-kernel mailing list if you wish to help out.

Also, patches for this are always gladly accepted, no need to file a
bugzilla report for this.

thanks,

greg k-h
Comment 2 Kushagra Verma 2022-05-24 15:16:06 UTC
(In reply to Greg Kroah-Hartman from comment #1)
> On Tue, May 24, 2022 at 02:58:45PM +0000, bugzilla-daemon@kernel.org wrote:
> > https://bugzilla.kernel.org/show_bug.cgi?id=216020
> > 
> >             Bug ID: 216020
> >            Summary: drivers/usb/ folder compilation with allyesconfig
> >                     fails
> >            Product: Drivers
> >            Version: 2.5
> >     Kernel Version: 5.18
> >           Hardware: All
> >                 OS: Linux
> >               Tree: Mainline
> >             Status: NEW
> >           Severity: normal
> >           Priority: P1
> >          Component: USB
> >           Assignee: drivers_usb@kernel-bugs.kernel.org
> >           Reporter: kushagra765@outlook.com
> >         Regression: No
> > 
> > When compiling the drivers/usb/ folder with GCC version 12.1.0, the
> > compilation
> > fails with the following errors:
> 
> There are numerous errors when building the kernel with gcc 12.1 right
> now.  It is being worked on, please see the development efforts on the
> linux-kernel mailing list if you wish to help out.
> 
> Also, patches for this are always gladly accepted, no need to file a
> bugzilla report for this.

Ok.
> 
> thanks,
> 
> greg k-h

Thanks,

Kushagra
Comment 3 Alan Stern 2022-05-24 18:48:44 UTC
The warnings about ene_ub6250.c are accurate.  The driver uses (EntryOffset % 512) to index a 512-byte buffer and dereferences a 16-bit value at that location, without checking for proper alignment.  It then dereferences another 16-bit value located 10 bytes farther on, without checking for overflow.

Not having the specs for this type of device, I don't know how this is meant to work.  Perhaps EntryOffset % 512 is always supposed to be 0.  But perhaps not, so I don't want to make any hasty changes.