| From foo@baz Tue Apr 9 12:12:43 2002 |
| Date: Thu, 26 Apr 2007 00:12:01 -0700 |
| To: Greg KH <greg@kroah.com> |
| From: Greg Kroah-Hartman <gregkh@suse.de> |
| Subject: 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> |
| |
| --- |
| drivers/usb/serial/sierra.c | 11 +++++++++++ |
| 1 file changed, 11 insertions(+) |
| |
| --- a/drivers/usb/serial/sierra.c |
| +++ b/drivers/usb/serial/sierra.c |
| @@ -577,7 +577,12 @@ static void sierra_shutdown(struct usb_s |
| /* Stop reading/writing urbs */ |
| for (i = 0; i < serial->num_ports; ++i) { |
| port = serial->port[i]; |
| + if (!port) |
| + continue; |
| portdata = usb_get_serial_port_data(port); |
| + if (!portdata) |
| + continue; |
| + |
| for (j = 0; j < N_IN_URB; j++) |
| usb_unlink_urb(portdata->in_urbs[j]); |
| for (j = 0; j < N_OUT_URB; j++) |
| @@ -587,7 +592,11 @@ static void sierra_shutdown(struct usb_s |
| /* Now free them */ |
| for (i = 0; i < serial->num_ports; ++i) { |
| port = serial->port[i]; |
| + if (!port) |
| + continue; |
| portdata = usb_get_serial_port_data(port); |
| + if (!portdata) |
| + continue; |
| |
| for (j = 0; j < N_IN_URB; j++) { |
| if (portdata->in_urbs[j]) { |
| @@ -606,6 +615,8 @@ static void sierra_shutdown(struct usb_s |
| /* Now free per port private data */ |
| for (i = 0; i < serial->num_ports; i++) { |
| port = serial->port[i]; |
| + if (!port) |
| + continue; |
| kfree(usb_get_serial_port_data(port)); |
| } |
| } |