usb: cdc-acm: Add acm handle validity check
Seshendra Gadagottu [Sat, 3 Mar 2012 04:03:14 +0000 (09:03 +0530)]
Added check for acm handle validity before doing any action
in acm_suspend, acm_resume and acm_reset_resume functions.

Bug 939237

Change-Id: Idc5d7db6bd405056a90b85009825ccbd03547757
Signed-off-by: Seshendra Gadagottu<sgadagottu@nvidia.com>
Reviewed-on: http://git-master/r/83413
(cherry picked from commit 1dd9736cd2df12c0315a44c95010cb64eee04050)
Reviewed-on: http://git-master/r/87504
Reviewed-by: Steve Lin <stlin@nvidia.com>

drivers/usb/class/cdc-acm.c

index e133159..7a37bf9 100644 (file)
@@ -1282,6 +1282,11 @@ static void stop_data_traffic(struct acm *acm)
 {
        int i;
 
+       if (!acm) {
+               pr_err("%s: !acm\n", __func__);
+               return;
+       }
+
        dev_dbg(&acm->control->dev, "%s\n", __func__);
 
        usb_kill_urb(acm->ctrlurb);
@@ -1347,6 +1352,11 @@ static int acm_suspend(struct usb_interface *intf, pm_message_t message)
        struct acm *acm = usb_get_intfdata(intf);
        int cnt;
 
+       if (!acm) {
+               pr_err("%s: !acm\n", __func__);
+               return -ENODEV;
+       }
+
        if (message.event & PM_EVENT_AUTO) {
                int b;
 
@@ -1389,6 +1399,11 @@ static int acm_resume(struct usb_interface *intf)
        struct acm_wb *wb;
 #endif
 
+       if (!acm) {
+               pr_err("%s: !acm\n", __func__);
+               return -ENODEV;
+       }
+
        spin_lock_irq(&acm->read_lock);
        acm->susp_count -= 1;
        cnt = acm->susp_count;
@@ -1445,6 +1460,11 @@ static int acm_reset_resume(struct usb_interface *intf)
        struct acm *acm = usb_get_intfdata(intf);
        struct tty_struct *tty;
 
+       if (!acm) {
+               pr_err("%s: !acm\n", __func__);
+               return -ENODEV;
+       }
+
        mutex_lock(&acm->mutex);
        if (acm->port.count) {
                tty = tty_port_tty_get(&acm->port);