From 6699291f89aa3e22490c9c93620350f92015b699 Mon Sep 17 00:00:00 2001 From: Alexey Khoroshilov Date: Tue, 30 Aug 2011 00:17:56 +0400 Subject: [PATCH] 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 --- drivers/staging/lirc/lirc_imon.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 -- 2.20.1