staging/easycap: fix mismatch in easycap_poll() mutex lock-unlock
authorAlexey Khoroshilov <khoroshilov@ispras.ru>
Mon, 29 Aug 2011 17:46:57 +0000 (21:46 +0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 29 Aug 2011 18:20:11 +0000 (11:20 -0700)
In case if condition (kd != isdongle(peasycap)) becomes true,
easycap_poll() returns without releasing easycapdc60_dongle[kd].mutex_video.
The patch adds mutex_unlock() before that return.

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

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Acked-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/easycap/easycap_main.c

index bea281624c41a3889ac50954d12b9ff611a127b5..3ea51c37391468cf8d4ffabe2f98921d3abb64cc 100644 (file)
@@ -953,8 +953,10 @@ static unsigned int easycap_poll(struct file *file, poll_table *wait)
         *  peasycap, IN WHICH CASE A REPEAT CALL TO isdongle() WILL FAIL.
         *  IF NECESSARY, BAIL OUT.
         */
-               if (kd != isdongle(peasycap))
+               if (kd != isdongle(peasycap)) {
+                       mutex_unlock(&easycapdc60_dongle[kd].mutex_video);
                        return -ERESTARTSYS;
+               }
                if (!file) {
                        SAY("ERROR:  file is NULL\n");
                        mutex_unlock(&easycapdc60_dongle[kd].mutex_video);