On Thu, Jan 16, 2020 at 05:18:29PM +0100, Greg Kroah-Hartman wrote:
On Thu, Jan 16, 2020 at 05:07:05PM +0100, Johan Hovold wrote:
USB-serial drivers must not be unbound from their ports before the corresponding USB driver is unbound from the parent interface so suppress the bind and unbind attributes.
Unbinding a serial driver while it's port is open is a sure way to trigger a crash as any driver state is released on unbind while port hangup is handled on the parent USB interface level. Drivers for multiport devices where ports share a resource such as an interrupt endpoint also generally cannot handle individual ports going away.
Cc: stable stable@vger.kernel.org Signed-off-by: Johan Hovold johan@kernel.org
drivers/usb/serial/usb-serial.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index 8f066bb55d7d..dc7a65b9ec98 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c @@ -1317,6 +1317,9 @@ static int usb_serial_register(struct usb_serial_driver *driver) return -EINVAL; }
- /* Prevent individual ports from being unbound. */
- driver->driver.suppress_bind_attrs = true;
We can still unbind the usb driver though, right? If so, this is fine with me.
Right, this is only about disabling individual ports, something which essentially no subdriver can handle while a port is open (e.g. port-data set to NULL while port is still open... boom).
Johan