提交 0282b7f2 编写于 作者: A Alan Stern 提交者: Greg Kroah-Hartman

usb-serial: don't release unregistered minors

This patch (as1121) fixes a bug in the USB serial core.  When a device
is unregistered, the core will give back its minors -- even if the
device hasn't been assigned any!

The patch reserves the highest minor value (255) to mean that no minor
was assigned.  It also removes some dead code and does a small style
fixup.
Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
Cc: stable <stable@kernel.org>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 e67d70f2
...@@ -122,9 +122,6 @@ static void return_serial(struct usb_serial *serial) ...@@ -122,9 +122,6 @@ static void return_serial(struct usb_serial *serial)
dbg("%s", __func__); dbg("%s", __func__);
if (serial == NULL)
return;
for (i = 0; i < serial->num_ports; ++i) for (i = 0; i < serial->num_ports; ++i)
serial_table[serial->minor + i] = NULL; serial_table[serial->minor + i] = NULL;
} }
...@@ -142,7 +139,8 @@ static void destroy_serial(struct kref *kref) ...@@ -142,7 +139,8 @@ static void destroy_serial(struct kref *kref)
serial->type->shutdown(serial); serial->type->shutdown(serial);
/* return the minor range that this device had */ /* return the minor range that this device had */
return_serial(serial); if (serial->minor != SERIAL_TTY_NO_MINOR)
return_serial(serial);
for (i = 0; i < serial->num_ports; ++i) for (i = 0; i < serial->num_ports; ++i)
serial->port[i]->port.count = 0; serial->port[i]->port.count = 0;
...@@ -575,6 +573,7 @@ static struct usb_serial *create_serial(struct usb_device *dev, ...@@ -575,6 +573,7 @@ static struct usb_serial *create_serial(struct usb_device *dev,
serial->interface = interface; serial->interface = 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;
return serial; return serial;
} }
......
...@@ -17,7 +17,8 @@ ...@@ -17,7 +17,8 @@
#include <linux/mutex.h> #include <linux/mutex.h>
#define SERIAL_TTY_MAJOR 188 /* Nice legal number now */ #define SERIAL_TTY_MAJOR 188 /* Nice legal number now */
#define SERIAL_TTY_MINORS 255 /* loads of devices :) */ #define SERIAL_TTY_MINORS 254 /* loads of devices :) */
#define SERIAL_TTY_NO_MINOR 255 /* No minor was assigned */
/* The maximum number of ports one device can grab at once */ /* The maximum number of ports one device can grab at once */
#define MAX_NUM_PORTS 8 #define MAX_NUM_PORTS 8
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册