aboutsummaryrefslogtreecommitdiff
path: root/drivers/media/video/videodev.c
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2008-07-18 10:07:10 -0300
committerMauro Carvalho Chehab <mchehab@infradead.org>2008-07-20 07:29:27 -0300
commitfac3639d886ae577d74e2da16e6a448620d432c9 (patch)
tree2771f7bd1e2f7225b451dc5a272f30b5515e90e4 /drivers/media/video/videodev.c
parentf19ad390146e7745cbc529f3bef8469cf21f3a6b (diff)
V4L/DVB (8414): videodev/cx18: fix get_index bug and error-handling lock-ups
Fix a bug in get_index that was introduced earlier. Also fix two error handling lock-ups in videodev and cx18 that where found thanks to that bug. Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/videodev.c')
-rw-r--r--drivers/media/video/videodev.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/media/video/videodev.c b/drivers/media/video/videodev.c
index aca36dec674..6616e657055 100644
--- a/drivers/media/video/videodev.c
+++ b/drivers/media/video/videodev.c
@@ -2023,7 +2023,7 @@ EXPORT_SYMBOL(video_ioctl2);
static int get_index(struct video_device *vdev, int num)
{
u32 used = 0;
- const unsigned max_index = sizeof(used) * 8 - 1;
+ const int max_index = sizeof(used) * 8 - 1;
int i;
/* Currently a single v4l driver instance cannot create more than
@@ -2145,14 +2145,15 @@ int video_register_device_index(struct video_device *vfd, int type, int nr,
vfd->minor=i;
ret = get_index(vfd, index);
+ vfd->index = ret;
+
+ mutex_unlock(&videodev_lock);
+
if (ret < 0) {
printk(KERN_ERR "%s: get_index failed\n", __func__);
goto fail_minor;
}
- vfd->index = ret;
-
- mutex_unlock(&videodev_lock);
mutex_init(&vfd->lock);
/* sysfs class */