]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
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)
committerAK <andi@firstfloor.org>
Thu, 31 Mar 2011 18:58:47 +0000 (11:58 -0700)
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>
Signed-off-by: Andi Kleen <ak@linux.intel.com>
drivers/usb/class/cdc-acm.c

index 3db3eaa11c1a7ff89bdb9ec3053b720d03dff7bc..2c70e1e6aa9311ae2ea185054fdb885b92205100 100644 (file)
@@ -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 "