提交 d7971051 编写于 作者: J Johan Hovold 提交者: Greg Kroah-Hartman

USB: serial: fix interface refcounting

Make sure the interface is not released before our serial device.

Note that drivers are still not allowed to access the interface in
any way that may interfere with another driver that may have gotten
bound to the same interface after disconnect returns.

Cc: stable <stable@vger.kernel.org>
Signed-off-by: NJohan Hovold <jhovold@gmail.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 5492bf3d
...@@ -151,6 +151,7 @@ static void destroy_serial(struct kref *kref) ...@@ -151,6 +151,7 @@ static void destroy_serial(struct kref *kref)
} }
} }
usb_put_intf(serial->interface);
usb_put_dev(serial->dev); usb_put_dev(serial->dev);
kfree(serial); kfree(serial);
} }
...@@ -620,7 +621,7 @@ static struct usb_serial *create_serial(struct usb_device *dev, ...@@ -620,7 +621,7 @@ static struct usb_serial *create_serial(struct usb_device *dev,
} }
serial->dev = usb_get_dev(dev); serial->dev = usb_get_dev(dev);
serial->type = driver; serial->type = driver;
serial->interface = interface; serial->interface = usb_get_intf(interface);
kref_init(&serial->kref); kref_init(&serial->kref);
mutex_init(&serial->disc_mutex); mutex_init(&serial->disc_mutex);
serial->minor = SERIAL_TTY_NO_MINOR; serial->minor = SERIAL_TTY_NO_MINOR;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册