media: v4l2-ioctl.c: zero reserved fields for S/TRY_FMT
authorHans Verkuil <hverkuil-cisco@xs4all.nl>
Sun, 10 Nov 2019 06:27:04 +0000 (07:27 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Sun, 10 Nov 2019 06:27:04 +0000 (07:27 +0100)
v4l2_vbi_format, v4l2_sliced_vbi_format and v4l2_sdr_format
have a reserved array at the end that should be zeroed by drivers
as per the V4L2 spec. Older drivers often do not do this, so just
handle this in the core.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/v4l2-core/v4l2-ioctl.c

index 60453b21a85596860dbdd9fe51cbf62d191e43cd..4e700583659bac8ce871876166cdf44ebabf4e0e 100644 (file)
@@ -1617,12 +1617,12 @@ static int v4l_s_fmt(const struct v4l2_ioctl_ops *ops,
        case V4L2_BUF_TYPE_VBI_CAPTURE:
                if (unlikely(!ops->vidioc_s_fmt_vbi_cap))
                        break;
-               CLEAR_AFTER_FIELD(p, fmt.vbi);
+               CLEAR_AFTER_FIELD(p, fmt.vbi.flags);
                return ops->vidioc_s_fmt_vbi_cap(file, fh, arg);
        case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
                if (unlikely(!ops->vidioc_s_fmt_sliced_vbi_cap))
                        break;
-               CLEAR_AFTER_FIELD(p, fmt.sliced);
+               CLEAR_AFTER_FIELD(p, fmt.sliced.io_size);
                return ops->vidioc_s_fmt_sliced_vbi_cap(file, fh, arg);
        case V4L2_BUF_TYPE_VIDEO_OUTPUT:
                if (unlikely(!ops->vidioc_s_fmt_vid_out))
@@ -1648,22 +1648,22 @@ static int v4l_s_fmt(const struct v4l2_ioctl_ops *ops,
        case V4L2_BUF_TYPE_VBI_OUTPUT:
                if (unlikely(!ops->vidioc_s_fmt_vbi_out))
                        break;
-               CLEAR_AFTER_FIELD(p, fmt.vbi);
+               CLEAR_AFTER_FIELD(p, fmt.vbi.flags);
                return ops->vidioc_s_fmt_vbi_out(file, fh, arg);
        case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
                if (unlikely(!ops->vidioc_s_fmt_sliced_vbi_out))
                        break;
-               CLEAR_AFTER_FIELD(p, fmt.sliced);
+               CLEAR_AFTER_FIELD(p, fmt.sliced.io_size);
                return ops->vidioc_s_fmt_sliced_vbi_out(file, fh, arg);
        case V4L2_BUF_TYPE_SDR_CAPTURE:
                if (unlikely(!ops->vidioc_s_fmt_sdr_cap))
                        break;
-               CLEAR_AFTER_FIELD(p, fmt.sdr);
+               CLEAR_AFTER_FIELD(p, fmt.sdr.buffersize);
                return ops->vidioc_s_fmt_sdr_cap(file, fh, arg);
        case V4L2_BUF_TYPE_SDR_OUTPUT:
                if (unlikely(!ops->vidioc_s_fmt_sdr_out))
                        break;
-               CLEAR_AFTER_FIELD(p, fmt.sdr);
+               CLEAR_AFTER_FIELD(p, fmt.sdr.buffersize);
                return ops->vidioc_s_fmt_sdr_out(file, fh, arg);
        case V4L2_BUF_TYPE_META_CAPTURE:
                if (unlikely(!ops->vidioc_s_fmt_meta_cap))
@@ -1719,12 +1719,12 @@ static int v4l_try_fmt(const struct v4l2_ioctl_ops *ops,
        case V4L2_BUF_TYPE_VBI_CAPTURE:
                if (unlikely(!ops->vidioc_try_fmt_vbi_cap))
                        break;
-               CLEAR_AFTER_FIELD(p, fmt.vbi);
+               CLEAR_AFTER_FIELD(p, fmt.vbi.flags);
                return ops->vidioc_try_fmt_vbi_cap(file, fh, arg);
        case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
                if (unlikely(!ops->vidioc_try_fmt_sliced_vbi_cap))
                        break;
-               CLEAR_AFTER_FIELD(p, fmt.sliced);
+               CLEAR_AFTER_FIELD(p, fmt.sliced.io_size);
                return ops->vidioc_try_fmt_sliced_vbi_cap(file, fh, arg);
        case V4L2_BUF_TYPE_VIDEO_OUTPUT:
                if (unlikely(!ops->vidioc_try_fmt_vid_out))
@@ -1750,22 +1750,22 @@ static int v4l_try_fmt(const struct v4l2_ioctl_ops *ops,
        case V4L2_BUF_TYPE_VBI_OUTPUT:
                if (unlikely(!ops->vidioc_try_fmt_vbi_out))
                        break;
-               CLEAR_AFTER_FIELD(p, fmt.vbi);
+               CLEAR_AFTER_FIELD(p, fmt.vbi.flags);
                return ops->vidioc_try_fmt_vbi_out(file, fh, arg);
        case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
                if (unlikely(!ops->vidioc_try_fmt_sliced_vbi_out))
                        break;
-               CLEAR_AFTER_FIELD(p, fmt.sliced);
+               CLEAR_AFTER_FIELD(p, fmt.sliced.io_size);
                return ops->vidioc_try_fmt_sliced_vbi_out(file, fh, arg);
        case V4L2_BUF_TYPE_SDR_CAPTURE:
                if (unlikely(!ops->vidioc_try_fmt_sdr_cap))
                        break;
-               CLEAR_AFTER_FIELD(p, fmt.sdr);
+               CLEAR_AFTER_FIELD(p, fmt.sdr.buffersize);
                return ops->vidioc_try_fmt_sdr_cap(file, fh, arg);
        case V4L2_BUF_TYPE_SDR_OUTPUT:
                if (unlikely(!ops->vidioc_try_fmt_sdr_out))
                        break;
-               CLEAR_AFTER_FIELD(p, fmt.sdr);
+               CLEAR_AFTER_FIELD(p, fmt.sdr.buffersize);
                return ops->vidioc_try_fmt_sdr_out(file, fh, arg);
        case V4L2_BUF_TYPE_META_CAPTURE:
                if (unlikely(!ops->vidioc_try_fmt_meta_cap))