Skip to content

Commit

Permalink
usb-serial: don't release unregistered minors
Browse files Browse the repository at this point in the history
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: Alan Stern <stern@rowland.harvard.edu>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Alan Stern authored and Greg Kroah-Hartman committed Aug 14, 2008
1 parent e67d70f commit 0282b7f
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 5 deletions.
7 changes: 3 additions & 4 deletions drivers/usb/serial/usb-serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,6 @@ static void return_serial(struct usb_serial *serial)

dbg("%s", __func__);

if (serial == NULL)
return;

for (i = 0; i < serial->num_ports; ++i)
serial_table[serial->minor + i] = NULL;
}
Expand All @@ -142,7 +139,8 @@ static void destroy_serial(struct kref *kref)
serial->type->shutdown(serial);

/* 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)
serial->port[i]->port.count = 0;
Expand Down Expand Up @@ -575,6 +573,7 @@ static struct usb_serial *create_serial(struct usb_device *dev,
serial->interface = interface;
kref_init(&serial->kref);
mutex_init(&serial->disc_mutex);
serial->minor = SERIAL_TTY_NO_MINOR;

return serial;
}
Expand Down
3 changes: 2 additions & 1 deletion include/linux/usb/serial.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
#include <linux/mutex.h>

#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 */
#define MAX_NUM_PORTS 8
Expand Down

0 comments on commit 0282b7f

Please sign in to comment.