Commit 1029e7a7 authored by Dave Stevenson's avatar Dave Stevenson Committed by Greg Kroah-Hartman

staging: bcm2835-camera: Add sanity checks for queue_setup/CREATE_BUFS

Fixes a v4l2-compliance failure when passed a buffer that is
too small.
queue_setup wasn't handling the case where *nplanes != 0, as
used from CREATE_BUFS and requiring the driver to sanity
check the provided buffer parameters. It was assuming that
it was always being used in the REQBUFS case where it provides
the buffer properties.
Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.org>
Signed-off-by: default avatarStefan Wahren <wahrenst@gmx.net>
Acked-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Acked-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent eb353976
...@@ -236,6 +236,22 @@ static int queue_setup(struct vb2_queue *vq, ...@@ -236,6 +236,22 @@ static int queue_setup(struct vb2_queue *vq,
return -EINVAL; return -EINVAL;
} }
/* Handle CREATE_BUFS situation - *nplanes != 0 */
if (*nplanes) {
if (*nplanes != 1 ||
sizes[0] < dev->capture.port->current_buffer.size) {
v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev,
"%s: dev:%p Invalid buffer request from CREATE_BUFS, size %u < %u, nplanes %u != 1\n",
__func__, dev, sizes[0],
dev->capture.port->current_buffer.size,
*nplanes);
return -EINVAL;
} else {
return 0;
}
}
/* Handle REQBUFS situation */
size = dev->capture.port->current_buffer.size; size = dev->capture.port->current_buffer.size;
if (size == 0) { if (size == 0) {
v4l2_err(&dev->v4l2_dev, v4l2_err(&dev->v4l2_dev,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment