aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/serial/sierra.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2007-04-26 03:12:01 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2007-04-27 16:28:40 -0400
commitf094e4f358c2f9f0a46dc777f64ed7794f73d283 (patch)
tree6e811c05b224227a04a91558f923d7348ada219d /drivers/usb/serial/sierra.c
parent931384fb0ec99a7459b3052f5d4db15bcb5037ea (diff)
USB: sierra: add more checks on shutdown
This should help with any potential NULL pointer usages as reported by a few users. Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/serial/sierra.c')
-rw-r--r--drivers/usb/serial/sierra.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
index 4865aff892e8..644607de4c11 100644
--- a/drivers/usb/serial/sierra.c
+++ b/drivers/usb/serial/sierra.c
@@ -577,7 +577,12 @@ static void sierra_shutdown(struct usb_serial *serial)
577 /* Stop reading/writing urbs */ 577 /* Stop reading/writing urbs */
578 for (i = 0; i < serial->num_ports; ++i) { 578 for (i = 0; i < serial->num_ports; ++i) {
579 port = serial->port[i]; 579 port = serial->port[i];
580 if (!port)
581 continue;
580 portdata = usb_get_serial_port_data(port); 582 portdata = usb_get_serial_port_data(port);
583 if (!portdata)
584 continue;
585
581 for (j = 0; j < N_IN_URB; j++) 586 for (j = 0; j < N_IN_URB; j++)
582 usb_unlink_urb(portdata->in_urbs[j]); 587 usb_unlink_urb(portdata->in_urbs[j]);
583 for (j = 0; j < N_OUT_URB; j++) 588 for (j = 0; j < N_OUT_URB; j++)
@@ -587,7 +592,11 @@ static void sierra_shutdown(struct usb_serial *serial)
587 /* Now free them */ 592 /* Now free them */
588 for (i = 0; i < serial->num_ports; ++i) { 593 for (i = 0; i < serial->num_ports; ++i) {
589 port = serial->port[i]; 594 port = serial->port[i];
595 if (!port)
596 continue;
590 portdata = usb_get_serial_port_data(port); 597 portdata = usb_get_serial_port_data(port);
598 if (!portdata)
599 continue;
591 600
592 for (j = 0; j < N_IN_URB; j++) { 601 for (j = 0; j < N_IN_URB; j++) {
593 if (portdata->in_urbs[j]) { 602 if (portdata->in_urbs[j]) {
@@ -606,6 +615,8 @@ static void sierra_shutdown(struct usb_serial *serial)
606 /* Now free per port private data */ 615 /* Now free per port private data */
607 for (i = 0; i < serial->num_ports; i++) { 616 for (i = 0; i < serial->num_ports; i++) {
608 port = serial->port[i]; 617 port = serial->port[i];
618 if (!port)
619 continue;
609 kfree(usb_get_serial_port_data(port)); 620 kfree(usb_get_serial_port_data(port));
610 } 621 }
611} 622}