summaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/dvb-core
diff options
context:
space:
mode:
authorSimon Arlott2009-05-12 22:39:28 +0200
committerMauro Carvalho Chehab2009-06-16 23:21:10 +0200
commiteda9f7523b6760bdfc3b9c5001214467b5ecd618 (patch)
treebedaac0621dfdabfdf9d5bd0c4f0a37590d5e4de /drivers/media/dvb/dvb-core
parentV4L/DVB (11840): change kmalloc to vmalloc for sglist allocation in videobuf_... (diff)
downloadkernel-qcow2-linux-eda9f7523b6760bdfc3b9c5001214467b5ecd618.tar.gz
kernel-qcow2-linux-eda9f7523b6760bdfc3b9c5001214467b5ecd618.tar.xz
kernel-qcow2-linux-eda9f7523b6760bdfc3b9c5001214467b5ecd618.zip
V4L/DVB (11841): core: fix potential mutex_unlock without mutex_lock in dvb_dvr_read
dvb_dvr_read may unlock the dmxdev mutex and return -ENODEV, except this function is a file op and will never be called with the mutex held. There's existing mutex_lock and mutex_unlock around the actual read but it's commented out. These should probably be uncommented but the read blocks and this could block another non-blocking reader on the mutex instead. This change comments out the extra mutex_unlock. [akpm@linux-foundation.org: cleanups, simplification] Signed-off-by: Simon Arlott <simon@fire.lp0.eu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/dvb/dvb-core')
-rw-r--r--drivers/media/dvb/dvb-core/dmxdev.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/drivers/media/dvb/dvb-core/dmxdev.c b/drivers/media/dvb/dvb-core/dmxdev.c
index c35fbb8d8f4a..6d6121eb5d59 100644
--- a/drivers/media/dvb/dvb-core/dmxdev.c
+++ b/drivers/media/dvb/dvb-core/dmxdev.c
@@ -244,19 +244,13 @@ static ssize_t dvb_dvr_read(struct file *file, char __user *buf, size_t count,
{
struct dvb_device *dvbdev = file->private_data;
struct dmxdev *dmxdev = dvbdev->priv;
- int ret;
- if (dmxdev->exit) {
- mutex_unlock(&dmxdev->mutex);
+ if (dmxdev->exit)
return -ENODEV;
- }
- //mutex_lock(&dmxdev->mutex);
- ret = dvb_dmxdev_buffer_read(&dmxdev->dvr_buffer,
- file->f_flags & O_NONBLOCK,
- buf, count, ppos);
- //mutex_unlock(&dmxdev->mutex);
- return ret;
+ return dvb_dmxdev_buffer_read(&dmxdev->dvr_buffer,
+ file->f_flags & O_NONBLOCK,
+ buf, count, ppos);
}
static int dvb_dvr_set_buffer_size(struct dmxdev *dmxdev,