[media] VIDIOC_ENUM_FREQ_BANDS fix
authorHans Verkuil <hverkuil@xs4all.nl>
Wed, 1 Aug 2012 18:52:46 +0000 (15:52 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 12 Aug 2012 02:21:01 +0000 (23:21 -0300)
When VIDIOC_ENUM_FREQ_BANDS is called for a driver that doesn't supply an
enum_freq_bands op, then it will fall back to reporting a single freq band
based on information from g_tuner or g_modulator.

Due to a bug this is an infinite list since the index field wasn't tested.

This patch fixes this and returns -EINVAL if index != 0.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/v4l2-ioctl.c

index c3b7b5f..54f4ac6 100644 (file)
@@ -1853,6 +1853,8 @@ static int v4l_enum_freq_bands(const struct v4l2_ioctl_ops *ops,
                        .type = type,
                };
 
+               if (p->index)
+                       return -EINVAL;
                err = ops->vidioc_g_tuner(file, fh, &t);
                if (err)
                        return err;
@@ -1870,6 +1872,8 @@ static int v4l_enum_freq_bands(const struct v4l2_ioctl_ops *ops,
 
                if (type != V4L2_TUNER_RADIO)
                        return -EINVAL;
+               if (p->index)
+                       return -EINVAL;
                err = ops->vidioc_g_modulator(file, fh, &m);
                if (err)
                        return err;