Messages in this thread Patch in this message | | | From | Ricardo Ribalda <> | Subject | [PATCH v4 1/8] media: ipu3-cio2 Check num_planes and sizes in queue_setup | Date | Thu, 7 Oct 2021 00:26:18 +0200 |
| |
If num_planes is different than zero num_planes and sizes must be checked to support the format.
Fix the following v4l2-compliance error:
Buffer ioctls (Input 0): fail: v4l2-test-buffers.cpp(717): q.create_bufs(node, 1, &fmt) != EINVAL test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: FAIL
Reviewed-by: Bingbu Cao <bingbu.cao@intel.com> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org> --- drivers/media/pci/intel/ipu3/ipu3-cio2-main.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/media/pci/intel/ipu3/ipu3-cio2-main.c b/drivers/media/pci/intel/ipu3/ipu3-cio2-main.c index 98cb3bc834db..356ea966cf8d 100644 --- a/drivers/media/pci/intel/ipu3/ipu3-cio2-main.c +++ b/drivers/media/pci/intel/ipu3/ipu3-cio2-main.c @@ -797,13 +797,17 @@ static int cio2_vb2_queue_setup(struct vb2_queue *vq, struct cio2_queue *q = vb2q_to_cio2_queue(vq); unsigned int i; - *num_planes = q->format.num_planes; + if (*num_planes && *num_planes < q->format.num_planes) + return -EINVAL; - for (i = 0; i < *num_planes; ++i) { + for (i = 0; i < q->format.num_planes; ++i) { + if (*num_planes && sizes[i] < q->format.plane_fmt[i].sizeimage) + return -EINVAL; sizes[i] = q->format.plane_fmt[i].sizeimage; alloc_devs[i] = dev; } + *num_planes = q->format.num_planes; *num_buffers = clamp_val(*num_buffers, 1, CIO2_MAX_BUFFERS); /* Initialize buffer queue */ -- 2.33.0.800.g4c38ced690-goog
| |