mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-22 17:01:14 +00:00
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: Dave Stevenson <dave.stevenson@raspberrypi.org> Signed-off-by: Stefan Wahren <wahrenst@gmx.net> Acked-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Acked-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
eb3539767a
commit
1029e7a71e
1 changed files with 16 additions and 0 deletions
|
@ -236,6 +236,22 @@ static int queue_setup(struct vb2_queue *vq,
|
|||
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;
|
||||
if (size == 0) {
|
||||
v4l2_err(&dev->v4l2_dev,
|
||||
|
|
Loading…
Reference in a new issue