staging: fix USB altsetting bugs
Subsystems (3)
cover staging: fix USB altsetting bugs
We had quite a few drivers using the first alternate setting instead of the current one when doing descriptor sanity checks. This is mostly an issue on kernels with panic_on_warn set due to a WARN() in usb_submit_urb(), but since we've started backporting such fixes (e.g. as reported by syzbot), I've marked these for stable as well.
Johan
Johan Hovold (2):
staging: rtl8188eu: fix interface sanity check
staging: rtl8712: fix interface sanity check
drivers/staging/rtl8188eu/os_dep/usb_intf.c | 2 +- drivers/staging/rtl8712/usb_intf.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
Signature · 1 line
2.24.0
PATCH 1/2 staging: rtl8188eu: fix interface sanity check
Make sure to use the current alternate setting when verifying the interface descriptors to avoid binding to an invalid interface.
Failing to do so could cause the driver to misbehave or trigger a WARN() in usb_submit_urb() that kernels with panic_on_warn set would choke on.
--- drivers/staging/rtl8188eu/os_dep/usb_intf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/staging/rtl8188eu/os_dep/usb_intf.c +1 -1
@@ -70,7 +70,7 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf) phost_conf = pusbd->actconfig; pconf_desc = &phost_conf->desc; - phost_iface = &usb_intf->altsetting[0 ]; + phost_iface = usb_intf->cur_altsetting; piface_desc = &phost_iface->desc; pdvobjpriv->NumInterfaces = pconf_desc->bNumInterfaces;
Signature · 1 line
2.24.0
PATCH 2/2 staging: rtl8712: fix interface sanity check
In reply to Johan HovoldMake sure to use the current alternate setting when verifying the interface descriptors to avoid binding to an invalid interface.
Failing to do so could cause the driver to misbehave or trigger a WARN() in usb_submit_urb() that kernels with panic_on_warn set would choke on.
--- drivers/staging/rtl8712/usb_intf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/staging/rtl8712/usb_intf.c +1 -1
@@ -247,7 +247,7 @@ static uint r8712_usb_dvobj_init(struct _adapter *padapter) pdvobjpriv->padapter = padapter; padapter->eeprom_address_size =6 ; - phost_iface = &pintf->altsetting[0 ]; + phost_iface = pintf->cur_altsetting; piface_desc = &phost_iface->desc; pdvobjpriv->nr_endpoint = piface_desc->bNumEndpoints;if (pusbd->speed ==USB_SPEED_HIGH ) {
Signature · 1 line
2.24.0