From dc55cf3a182e54dd12a0720d8a09ca9dedaac3bc Mon Sep 17 00:00:00 2001 From: Patrik Jakobsson Date: Sun, 3 Jan 2016 15:41:22 +0100 Subject: [PATCH] facetimehd: Fail when too small buffers are requested Signed-off-by: Patrik Jakobsson --- fthd_v4l2.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/fthd_v4l2.c b/fthd_v4l2.c index 3d4c229..1d62a9e 100644 --- a/fthd_v4l2.c +++ b/fthd_v4l2.c @@ -46,6 +46,7 @@ static int fthd_buffer_queue_setup(struct vb2_queue *vq, unsigned int sizes[], void *alloc_ctxs[]) { struct fthd_private *dev_priv = vb2_get_drv_priv(vq); + struct v4l2_pix_format *cur_fmt = &dev_priv->fmt.fmt; int i, total_size = 0; *nplanes = dev_priv->fmt.planes; @@ -53,8 +54,13 @@ static int fthd_buffer_queue_setup(struct vb2_queue *vq, if (!*nplanes) return -EINVAL; - for(i = 0; i < *nplanes; i++) { - sizes[i] = dev_priv->fmt.fmt.sizeimage; + /* FIXME: We assume single plane format here but not below */ + if (fmt && fmt->fmt.pix.sizeimage < + (cur_fmt->bytesperline * cur_fmt->height)) + return -EINVAL; + + for (i = 0; i < *nplanes; i++) { + sizes[i] = cur_fmt->sizeimage; alloc_ctxs[i] = dev_priv->alloc_ctx; total_size += sizes[i]; } @@ -65,6 +71,7 @@ static int fthd_buffer_queue_setup(struct vb2_queue *vq, if (*nbuffers <= 1) return -ENOMEM; pr_debug("using %d buffers\n", *nbuffers); + return 0; }