From: Alexey Khoroshilov Date: Mon, 29 Aug 2011 20:17:56 +0000 (+0400) Subject: staging: lirc: fix mismatch in mutex lock-unlock in imon_probe X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=6699291f89aa3e22490c9c93620350f92015b699;p=linux-beck.git staging: lirc: fix mismatch in mutex lock-unlock in imon_probe 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 Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/lirc/lirc_imon.c b/drivers/staging/lirc/lirc_imon.c index 4a9e563f40fa..f5308d5929c6 100644 --- a/drivers/staging/lirc/lirc_imon.c +++ b/drivers/staging/lirc/lirc_imon.c @@ -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