From: Johan Hovold <johan@kernel.org> Date: 2021-02-26 10:12:07
Claiming the sibling control interface is a bit more involved and
specifically requires adding support to USB-serial core for managing
either interface being unbound first, something which could otherwise
lead to a NULL-pointer dereference.
Similarly, additional infrastructure is also needed to handle suspend
properly.
Since the driver currently isn't actually using the control interface,
we can defer this for now by simply not claiming the control interface.
Fixes: c2d405aa86b4 ("USB: serial: add MaxLinear/Exar USB to Serial driver")
Reported-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Cc: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/usb/serial/xr_serial.c | 25 -------------------------
1 file changed, 25 deletions(-)
@@ -545,37 +545,13 @@ static void xr_close(struct usb_serial_port *port)staticintxr_probe(structusb_serial*serial,conststructusb_device_id*id){-structusb_driver*driver=serial->type->usb_driver;-structusb_interface*control_interface;-intret;-/* Don't bind to control interface */if(serial->interface->cur_altsetting->desc.bInterfaceNumber==0)return-ENODEV;-/* But claim the control interface during data interface probe */-control_interface=usb_ifnum_to_if(serial->dev,0);-if(!control_interface)-return-ENODEV;--ret=usb_driver_claim_interface(driver,control_interface,NULL);-if(ret){-dev_err(&serial->interface->dev,"Failed to claim control interface\n");-returnret;-}-return0;}-staticvoidxr_disconnect(structusb_serial*serial)-{-structusb_driver*driver=serial->type->usb_driver;-structusb_interface*control_interface;--control_interface=usb_ifnum_to_if(serial->dev,0);-usb_driver_release_interface(driver,control_interface);-}-staticconststructusb_device_idid_table[]={{USB_DEVICE(0x04e2,0x1410)},/* XR21V141X */{}
On Fri, Feb 26, 2021 at 11:08:26AM +0100, Johan Hovold wrote:
Claiming the sibling control interface is a bit more involved and
specifically requires adding support to USB-serial core for managing
either interface being unbound first, something which could otherwise
lead to a NULL-pointer dereference.
Similarly, additional infrastructure is also needed to handle suspend
properly.
Since the driver currently isn't actually using the control interface,
we can defer this for now by simply not claiming the control interface.
Fixes: c2d405aa86b4 ("USB: serial: add MaxLinear/Exar USB to Serial driver")
Reported-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Cc: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
Em Fri, 26 Feb 2021 11:08:26 +0100
Johan Hovold [off-list ref] escreveu:
Claiming the sibling control interface is a bit more involved and
specifically requires adding support to USB-serial core for managing
either interface being unbound first, something which could otherwise
lead to a NULL-pointer dereference.
Similarly, additional infrastructure is also needed to handle suspend
properly.
Since the driver currently isn't actually using the control interface,
we can defer this for now by simply not claiming the control interface.
Fixes: c2d405aa86b4 ("USB: serial: add MaxLinear/Exar USB to Serial driver")
Reported-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Cc: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
That solved the issue with XR21V1410:
[ 8176.265862] usbcore: registered new interface driver xr_serial
[ 8176.265885] usbserial: USB Serial support registered for xr_serial
[ 8176.265921] xr_serial 2-1:1.1: xr_serial converter detected
[ 8176.266041] usb 2-1: xr_serial converter now attached to ttyUSB0
[ 8176.268023] printk: console [ttyUSB0] enabled
[ 8186.512841] usb 2-1: USB disconnect, device number 5
[ 8186.513131] printk: console [ttyUSB0] disabled
[ 8186.513340] xr_serial ttyUSB0: xr_serial converter now disconnected from ttyUSB0
[ 8186.513376] xr_serial 2-1:1.1: device disconnected
Tested-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Regards,
Mauro
@@ -545,37 +545,13 @@ static void xr_close(struct usb_serial_port *port)staticintxr_probe(structusb_serial*serial,conststructusb_device_id*id){-structusb_driver*driver=serial->type->usb_driver;-structusb_interface*control_interface;-intret;-/* Don't bind to control interface */if(serial->interface->cur_altsetting->desc.bInterfaceNumber==0)return-ENODEV;-/* But claim the control interface during data interface probe */-control_interface=usb_ifnum_to_if(serial->dev,0);-if(!control_interface)-return-ENODEV;--ret=usb_driver_claim_interface(driver,control_interface,NULL);-if(ret){-dev_err(&serial->interface->dev,"Failed to claim control interface\n");-returnret;-}-return0;}-staticvoidxr_disconnect(structusb_serial*serial)-{-structusb_driver*driver=serial->type->usb_driver;-structusb_interface*control_interface;--control_interface=usb_ifnum_to_if(serial->dev,0);-usb_driver_release_interface(driver,control_interface);-}-staticconststructusb_device_idid_table[]={{USB_DEVICE(0x04e2,0x1410)},/* XR21V141X */{}
On Fri, Feb 26, 2021 at 11:08:26AM +0100, Johan Hovold wrote:
Claiming the sibling control interface is a bit more involved and
specifically requires adding support to USB-serial core for managing
either interface being unbound first, something which could otherwise
lead to a NULL-pointer dereference.
Similarly, additional infrastructure is also needed to handle suspend
properly.
Since the driver currently isn't actually using the control interface,
we can defer this for now by simply not claiming the control interface.
Fixes: c2d405aa86b4 ("USB: serial: add MaxLinear/Exar USB to Serial driver")
Reported-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Cc: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
@@ -545,37 +545,13 @@ static void xr_close(struct usb_serial_port *port)staticintxr_probe(structusb_serial*serial,conststructusb_device_id*id){-structusb_driver*driver=serial->type->usb_driver;-structusb_interface*control_interface;-intret;-/* Don't bind to control interface */if(serial->interface->cur_altsetting->desc.bInterfaceNumber==0)return-ENODEV;-/* But claim the control interface during data interface probe */-control_interface=usb_ifnum_to_if(serial->dev,0);-if(!control_interface)-return-ENODEV;--ret=usb_driver_claim_interface(driver,control_interface,NULL);-if(ret){-dev_err(&serial->interface->dev,"Failed to claim control interface\n");-returnret;-}-return0;}-staticvoidxr_disconnect(structusb_serial*serial)-{-structusb_driver*driver=serial->type->usb_driver;-structusb_interface*control_interface;--control_interface=usb_ifnum_to_if(serial->dev,0);-usb_driver_release_interface(driver,control_interface);-}-staticconststructusb_device_idid_table[]={{USB_DEVICE(0x04e2,0x1410)},/* XR21V141X */{}
From: Johan Hovold <johan@kernel.org> Date: 2021-03-01 09:19:34
On Fri, Feb 26, 2021 at 11:54:47AM +0100, Mauro Carvalho Chehab wrote:
Em Fri, 26 Feb 2021 11:08:26 +0100
Johan Hovold [off-list ref] escreveu:
quoted
Claiming the sibling control interface is a bit more involved and
specifically requires adding support to USB-serial core for managing
either interface being unbound first, something which could otherwise
lead to a NULL-pointer dereference.
Similarly, additional infrastructure is also needed to handle suspend
properly.
Since the driver currently isn't actually using the control interface,
we can defer this for now by simply not claiming the control interface.
Fixes: c2d405aa86b4 ("USB: serial: add MaxLinear/Exar USB to Serial driver")
Reported-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Cc: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
That solved the issue with XR21V1410:
[ 8176.265862] usbcore: registered new interface driver xr_serial
[ 8176.265885] usbserial: USB Serial support registered for xr_serial
[ 8176.265921] xr_serial 2-1:1.1: xr_serial converter detected
[ 8176.266041] usb 2-1: xr_serial converter now attached to ttyUSB0
[ 8176.268023] printk: console [ttyUSB0] enabled
[ 8186.512841] usb 2-1: USB disconnect, device number 5
[ 8186.513131] printk: console [ttyUSB0] disabled
[ 8186.513340] xr_serial ttyUSB0: xr_serial converter now disconnected from ttyUSB0
[ 8186.513376] xr_serial 2-1:1.1: device disconnected
Tested-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Thanks for testing, and thanks to Greg and Manivannan for the review.
Now applied.
Johan