USB: cdc-acm: fix potential null-pointer dereference on disconnect
authorJohan Hovold <jhovold@gmail.com>
Tue, 22 Mar 2011 10:12:11 +0000 (11:12 +0100)
committerWilly Tarreau <w@1wt.eu>
Sat, 30 Apr 2011 14:53:23 +0000 (16:53 +0200)
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

index a250caecab9153d20e7f1eaea2a8c2ea3fe3efe5..ee80c5dc8566460aa78ff4fecf421fb3a64cac7c 100644 (file)
@@ -285,6 +285,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) {
 
@@ -319,7 +321,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)
                err ("%s - usb_submit_urb failed with result %d",