Hi,

On 09/11/2018 03:46 PM, Johan Fjeldtvedt wrote:
> Warn and return error from the reqbufs ioctl when driver sets 0 number
> of planes or 0 as plane sizes, as these values don't make any sense.

typo: planes -> buffers

> Checking this here stops obviously wrong values from propagating
> further and causing various problems that are hard to trace back to
> either of these values being 0.
> 
> Signed-off-by: Johan Fjeldtvedt <johfj...@cisco.com>
> ---
>  drivers/media/common/videobuf2/videobuf2-core.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/media/common/videobuf2/videobuf2-core.c 
> b/drivers/media/common/videobuf2/videobuf2-core.c
> index f32ec7342ef0..5741e95e6af1 100644
> --- a/drivers/media/common/videobuf2/videobuf2-core.c
> +++ b/drivers/media/common/videobuf2/videobuf2-core.c
> @@ -662,6 +662,7 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory 
> memory,
>       unsigned int num_buffers, allocated_buffers, num_planes = 0;
>       unsigned plane_sizes[VB2_MAX_PLANES] = { };
>       int ret;
> +     int i;
>  
>       if (q->streaming) {
>               dprintk(1, "streaming active\n");
> @@ -718,6 +719,14 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum 
> vb2_memory memory,
>       if (ret)
>               return ret;
>  
> +     /* Check that driver has set sane values */
> +     if (WARN_ON(!num_buffers))
> +             return -EINVAL;
> +
> +     for (i = 0; i < num_buffers; i++)
> +             if (WARN_ON(!plane_sizes[i]))
> +                     return -EINVAL;
> +
>       /* Finally, allocate buffers and video memory */
>       allocated_buffers =
>               __vb2_queue_alloc(q, memory, num_buffers, num_planes, 
> plane_sizes);
> 

-- 
regards,
Stan

Reply via email to