V4L: hdpvr, fix lock imbalances
PATCH 1/2 V4L: hdpvr, fix lock imbalances
Hrm, nobody picked these up, twice. Maybe this time :)? --
There are many lock imbalances in this driver. Fix all found.
--- drivers/media/video/hdpvr/hdpvr-core.c | 12 ++++++------ drivers/media/video/hdpvr/hdpvr-video.c | 6 ++++-- 2 files changed, 10 insertions(+), 8 deletions(-)
drivers/media/video/hdpvr/hdpvr-core.c +6 -6
@@ -126,7 +126,7 @@ static int device_authorization(struct hdpvr_device *dev)char *print_buf =kzalloc (5 *buf_size+1 ,GFP_KERNEL );if (!print_buf) {v4l2_err (&dev->v4l2_dev,"Out of memory\n" ); - goto error; +return retval; }#endif
@@ -140,7 +140,7 @@ static int device_authorization(struct hdpvr_device *dev)if (ret !=46 ) {v4l2_err (&dev->v4l2_dev,"unexpected answer of status request, len %d\n" , ret); - goto error; + goto unlock; }#ifdef HDPVR_DEBUG else {
@@ -163,7 +163,7 @@ static int device_authorization(struct hdpvr_device *dev)v4l2_err (&dev->v4l2_dev,"unknown firmware version 0x%x\n" , dev->usbc_buf[1 ]); ret = -EINVAL ; - goto error; + goto unlock; } response = dev->usbc_buf+38 ;
@@ -188,10 +188,10 @@ static int device_authorization(struct hdpvr_device *dev) 10000);v4l2_dbg (MSG_INFO , hdpvr_debug, &dev->v4l2_dev,"magic request returned %d\n" , ret); -mutex_unlock (&dev->usbc_mutex); retval = ret !=8 ; -error: +unlock: +mutex_unlock (&dev->usbc_mutex);return retval; }
@@ -350,6 +350,7 @@ static int hdpvr_probe(struct usb_interface *interface,mutex_lock (&dev->io_mutex);if (hdpvr_alloc_buffers (dev,NUM_BUFFERS )) { +mutex_unlock (&dev->io_mutex);v4l2_err (&dev->v4l2_dev,"allocating transfer buffers failed\n" ); goto error;
@@ -381,7 +382,6 @@ static int hdpvr_probe(struct usb_interface *interface, error:if (dev) { -mutex_unlock (&dev->io_mutex);/* this frees allocated memory */ hdpvr_delete (dev); }
drivers/media/video/hdpvr/hdpvr-video.c +4 -2
@@ -375,6 +375,7 @@ static int hdpvr_open(struct file *file)* in resumption */ mutex_lock (&dev->io_mutex); dev->open_count++; +mutex_unlock (&dev->io_mutex); fh->dev = dev;
@@ -383,7 +384,6 @@ static int hdpvr_open(struct file *file) retval =0 ; err: -mutex_unlock (&dev->io_mutex);return retval; }
@@ -519,8 +519,10 @@ static unsigned int hdpvr_poll(struct file *filp, poll_table *wait)mutex_lock (&dev->io_mutex); -if (video_is_unregistered (dev->video_dev)) +if (video_is_unregistered (dev->video_dev)) { +mutex_unlock (&dev->io_mutex);return -EIO ; + }if (dev->status ==STATUS_IDLE ) {if (hdpvr_start_streaming (dev)) {
Signature · 1 line
1.6.3.3
PATCH 2/2 V4L: saa7134, fix lock imbalance
There is one superfluos (imbalanced) unlock in a poll function. Remove it.
--- drivers/media/video/saa7134/saa7134-video.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)
drivers/media/video/saa7134/saa7134-video.c +0 -1
@@ -1444,7 +1444,6 @@ video_poll(struct file *file, struct poll_table_struct *wait) fh->cap.ops->buf_queue (&fh->cap,fh->cap.read_buf); fh->cap.read_off =0 ; } -mutex_unlock (&fh->cap.vb_lock); buf = fh->cap.read_buf; }
Signature · 1 line
1.6.3.3
Hello Jiri,
Quoted 2 lines · On Thu, 30 Jul 2009 23:49:48 +0200 Jiri Slaby <[email protected]> wrote:
Hrm, nobody picked these up, twice. Maybe this time :)? --
Thanks for this email. Both patches are applied to devel tree.
Cheers,
Douglas
Quoted 101 lines
There are many lock imbalances in this driver. Fix all found.
Signed-off-by Jiri Slaby <[email protected]>--- drivers/media/video/hdpvr/hdpvr-core.c | 12 ++++++------ drivers/media/video/hdpvr/hdpvr-video.c | 6 ++++-- 2 files changed, 10 insertions(+), 8 deletions(-)(quoted diff) +0
-0
b/drivers/media/video/hdpvr/hdpvr-core.cindex 188bd5a..1c9bc94 100644drivers/media/video/hdpvr/hdpvr-core.c +2
-2@@ -126,7 +126,7 @@ static int device_authorization(struct hdpvr_device *dev) char *print_buf = kzalloc(5*buf_size+1,GFP_KERNEL );if (!print_buf) {v4l2_err (&dev->v4l2_dev,"Out of memory\n" ); - goto error; +return retval; }#endif @@ -140,7 +140,7 @@ static int device_authorization(struct hdpvr_device *dev) if (ret != 46) {v4l2_err (&dev->v4l2_dev, "unexpected answer of status request, len %d\n", ret); - goto error; + goto unlock; }#ifdef HDPVR_DEBUG drivers/media/video/hdpvr/hdpvr-core.c +0
-0else {@@ -163,7 +163,7 @@ static int device_authorization(struct
hdpvr_device*dev)v4l2_err(&dev->v4l2_dev, "unknown firmware version 0x%x\n", dev->usbc_buf[1]);drivers/media/video/hdpvr/hdpvr-core.c +4
-4ret = -EINVAL ; - goto error; + goto unlock; } response = dev->usbc_buf+38 ;@@ -188,10 +188,10 @@ static int device_authorization(struct hdpvr_device *dev) 10000);v4l2_dbg (MSG_INFO , hdpvr_debug, &dev->v4l2_dev,"magic request returned %d\n" , ret); -mutex_unlock (&dev->usbc_mutex); retval = ret !=8 ; -error: +unlock: +mutex_unlock (&dev->usbc_mutex);return retval; }@@ -350,6 +350,7 @@ static int hdpvr_probe(struct usb_interface *interface,mutex_lock (&dev->io_mutex);if (hdpvr_alloc_buffers (dev,NUM_BUFFERS )) { +mutex_unlock (&dev->io_mutex);v4l2_err (&dev->v4l2_dev,"allocating transfer buffers failed\n" ); goto error;@@ -381,7 +382,6 @@ static int hdpvr_probe(struct usb_interface *interface, error:if (dev) { -mutex_unlock (&dev->io_mutex);/* this frees allocated memory */ hdpvr_delete (dev); }(quoted diff) +0
-0
b/drivers/media/video/hdpvr/hdpvr-video.cindex ccd47f5..5937de2 100644 ---a/drivers/media/video/hdpvr/hdpvr-video.c+++b/drivers/media/video/hdpvr/hdpvr-video.cdrivers/media/video/hdpvr/hdpvr-video.c +4
-2@@ -375,6 +375,7 @@ static int hdpvr_open(struct file *file)* in resumption */ mutex_lock (&dev->io_mutex); dev->open_count++; +mutex_unlock (&dev->io_mutex); fh->dev = dev;@@ -383,7 +384,6 @@ static int hdpvr_open(struct file *file) retval =0 ; err: -mutex_unlock (&dev->io_mutex);return retval; }@@ -519,8 +519,10 @@ static unsigned int hdpvr_poll(struct file *filp, poll_table *wait)mutex_lock (&dev->io_mutex); -if (video_is_unregistered (dev->video_dev)) +if (video_is_unregistered (dev->video_dev)) { +mutex_unlock (&dev->io_mutex);return -EIO ; + }if (dev->status ==STATUS_IDLE ) {if (hdpvr_start_streaming (dev)) {