diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2007-04-26 03:12:01 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-04-27 16:28:40 -0400 |
commit | f094e4f358c2f9f0a46dc777f64ed7794f73d283 (patch) | |
tree | 6e811c05b224227a04a91558f923d7348ada219d /drivers/usb/serial/sierra.c | |
parent | 931384fb0ec99a7459b3052f5d4db15bcb5037ea (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.c | 11 |
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 | } |