OSDN Git Service

media: vb2: Enforce VB2_MAX_FRAME in vb2_core_reqbufs better
authorSakari Ailus <sakari.ailus@linux.intel.com>
Thu, 28 Dec 2017 14:18:20 +0000 (09:18 -0500)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Wed, 3 Jan 2018 09:56:38 +0000 (04:56 -0500)
The check for the number of buffers requested against the maximum,
VB2_MAX_FRAME, was performed before checking queue's minimum number of
buffers. Reverse the order, thus ensuring that under no circumstances
num_buffers exceeds VB2_MAX_FRAME here.

Also add a warning of the condition.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/common/videobuf/videobuf2-core.c

index dbb0fd8..365b30c 100644 (file)
@@ -700,8 +700,9 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
        /*
         * Make sure the requested values and current defaults are sane.
         */
-       num_buffers = min_t(unsigned int, *count, VB2_MAX_FRAME);
-       num_buffers = max_t(unsigned int, num_buffers, q->min_buffers_needed);
+       WARN_ON(q->min_buffers_needed > VB2_MAX_FRAME);
+       num_buffers = max_t(unsigned int, *count, q->min_buffers_needed);
+       num_buffers = min_t(unsigned int, num_buffers, VB2_MAX_FRAME);
        memset(q->alloc_devs, 0, sizeof(q->alloc_devs));
        q->memory = memory;