staging: lirc: fix mismatch in mutex lock-unlock in imon_probe
authorAlexey Khoroshilov <khoroshilov@ispras.ru>
Mon, 29 Aug 2011 20:17:56 +0000 (00:17 +0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 6 Sep 2011 18:46:20 +0000 (11:46 -0700)
If kzalloc failed for allocation of context, goto alloc_status_switch
leads to unlock of unacquired driver_lock. The patch moves
mutex_lock(&driver_lock) before allocation of context.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/lirc/lirc_imon.c

index 4a9e563..f5308d5 100644 (file)
@@ -727,6 +727,9 @@ static int imon_probe(struct usb_interface *interface,
        int i;
        u16 vendor, product;
 
+       /* prevent races probing devices w/multiple interfaces */
+       mutex_lock(&driver_lock);
+
        context = kzalloc(sizeof(struct imon_context), GFP_KERNEL);
        if (!context) {
                err("%s: kzalloc failed for context", __func__);
@@ -753,9 +756,6 @@ static int imon_probe(struct usb_interface *interface,
        dev_dbg(dev, "%s: found iMON device (%04x:%04x, intf%d)\n",
                __func__, vendor, product, ifnum);
 
-       /* prevent races probing devices w/multiple interfaces */
-       mutex_lock(&driver_lock);
-
        /*
         * Scan the endpoint list and set:
         *      first input endpoint = IR endpoint