| From 7e7797e7f6f7bfab73fca02c65e40eaa5bb9000c Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <jhovold@gmail.com> |
| Date: Tue, 22 Mar 2011 11:12:11 +0100 |
| Subject: USB: cdc-acm: fix potential null-pointer dereference on disconnect |
| |
| From: Johan Hovold <jhovold@gmail.com> |
| |
| commit 7e7797e7f6f7bfab73fca02c65e40eaa5bb9000c upstream. |
| |
| Fix potential null-pointer exception on disconnect introduced by commit |
| 11ea859d64b69a747d6b060b9ed1520eab1161fe (USB: additional power savings |
| for cdc-acm devices that support remote wakeup). |
| |
| Only access acm->dev after making sure it is non-null in control urb |
| completion handler. |
| |
| Signed-off-by: Johan Hovold <jhovold@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/usb/class/cdc-acm.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/usb/class/cdc-acm.c |
| +++ b/drivers/usb/class/cdc-acm.c |
| @@ -297,6 +297,8 @@ static void acm_ctrl_irq(struct urb *urb |
| if (!ACM_READY(acm)) |
| goto exit; |
| |
| + usb_mark_last_busy(acm->dev); |
| + |
| data = (unsigned char *)(dr + 1); |
| switch (dr->bNotificationType) { |
| case USB_CDC_NOTIFY_NETWORK_CONNECTION: |
| @@ -336,7 +338,6 @@ static void acm_ctrl_irq(struct urb *urb |
| break; |
| } |
| exit: |
| - usb_mark_last_busy(acm->dev); |
| retval = usb_submit_urb(urb, GFP_ATOMIC); |
| if (retval) |
| dev_err(&urb->dev->dev, "%s - usb_submit_urb failed with " |