diff options
author | Hans Verkuil <hverkuil@xs4all.nl> | 2015-03-13 12:25:53 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2015-04-02 17:30:00 -0400 |
commit | 2c9fc463d60b9d09111fde5903e1f3e8e891a674 (patch) | |
tree | 42911ee1a63ba1e2c31d15ac48ff481dd16b45e6 /drivers/media/v4l2-core/v4l2-dev.c | |
parent | 8a55ddd94c3a763f701f003fd56e39f7c317063d (diff) |
[media] v4l2-dev: disable selection ioctls for non-video devices
The selection/cropping ioctls are only valid for video nodes, not for vbi.
Found by v4l2-compliance when run on a VBI device node.
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/v4l2-core/v4l2-dev.c')
-rw-r--r-- | drivers/media/v4l2-core/v4l2-dev.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c index e2b8b3ed6ef3..71a1b93b0790 100644 --- a/drivers/media/v4l2-core/v4l2-dev.c +++ b/drivers/media/v4l2-core/v4l2-dev.c | |||
@@ -611,6 +611,14 @@ static void determine_valid_ioctls(struct video_device *vdev) | |||
611 | SET_VALID_IOCTL(ops, VIDIOC_TRY_DECODER_CMD, vidioc_try_decoder_cmd); | 611 | SET_VALID_IOCTL(ops, VIDIOC_TRY_DECODER_CMD, vidioc_try_decoder_cmd); |
612 | SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMESIZES, vidioc_enum_framesizes); | 612 | SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMESIZES, vidioc_enum_framesizes); |
613 | SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMEINTERVALS, vidioc_enum_frameintervals); | 613 | SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMEINTERVALS, vidioc_enum_frameintervals); |
614 | if (ops->vidioc_g_crop || ops->vidioc_g_selection) | ||
615 | set_bit(_IOC_NR(VIDIOC_G_CROP), valid_ioctls); | ||
616 | if (ops->vidioc_s_crop || ops->vidioc_s_selection) | ||
617 | set_bit(_IOC_NR(VIDIOC_S_CROP), valid_ioctls); | ||
618 | SET_VALID_IOCTL(ops, VIDIOC_G_SELECTION, vidioc_g_selection); | ||
619 | SET_VALID_IOCTL(ops, VIDIOC_S_SELECTION, vidioc_s_selection); | ||
620 | if (ops->vidioc_cropcap || ops->vidioc_g_selection) | ||
621 | set_bit(_IOC_NR(VIDIOC_CROPCAP), valid_ioctls); | ||
614 | } else if (is_vbi) { | 622 | } else if (is_vbi) { |
615 | /* vbi specific ioctls */ | 623 | /* vbi specific ioctls */ |
616 | if ((is_rx && (ops->vidioc_g_fmt_vbi_cap || | 624 | if ((is_rx && (ops->vidioc_g_fmt_vbi_cap || |
@@ -679,14 +687,6 @@ static void determine_valid_ioctls(struct video_device *vdev) | |||
679 | SET_VALID_IOCTL(ops, VIDIOC_G_AUDOUT, vidioc_g_audout); | 687 | SET_VALID_IOCTL(ops, VIDIOC_G_AUDOUT, vidioc_g_audout); |
680 | SET_VALID_IOCTL(ops, VIDIOC_S_AUDOUT, vidioc_s_audout); | 688 | SET_VALID_IOCTL(ops, VIDIOC_S_AUDOUT, vidioc_s_audout); |
681 | } | 689 | } |
682 | if (ops->vidioc_g_crop || ops->vidioc_g_selection) | ||
683 | set_bit(_IOC_NR(VIDIOC_G_CROP), valid_ioctls); | ||
684 | if (ops->vidioc_s_crop || ops->vidioc_s_selection) | ||
685 | set_bit(_IOC_NR(VIDIOC_S_CROP), valid_ioctls); | ||
686 | SET_VALID_IOCTL(ops, VIDIOC_G_SELECTION, vidioc_g_selection); | ||
687 | SET_VALID_IOCTL(ops, VIDIOC_S_SELECTION, vidioc_s_selection); | ||
688 | if (ops->vidioc_cropcap || ops->vidioc_g_selection) | ||
689 | set_bit(_IOC_NR(VIDIOC_CROPCAP), valid_ioctls); | ||
690 | if (ops->vidioc_g_parm || (vdev->vfl_type == VFL_TYPE_GRABBER && | 690 | if (ops->vidioc_g_parm || (vdev->vfl_type == VFL_TYPE_GRABBER && |
691 | ops->vidioc_g_std)) | 691 | ops->vidioc_g_std)) |
692 | set_bit(_IOC_NR(VIDIOC_G_PARM), valid_ioctls); | 692 | set_bit(_IOC_NR(VIDIOC_G_PARM), valid_ioctls); |