aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorSatish Kodishala <skodisha@codeaurora.org>2014-05-09 11:39:06 +0530
committerMister Oyster <oysterized@gmail.com>2017-12-14 17:18:18 +0100
commitc4fd5633f12890814abace672c71423eb6803e77 (patch)
treee79a55f418d5e53b1a2585f3bc33309170feb5cb /drivers
parent9c7b441267e6a1b7b683838605bbcf744ffc9fb8 (diff)
v4l2-compat-ioctl32: Add support for private buffers
Add support for copying length and userptr fields from user space private buffers to kernel space and vice versa. Change-Id: Ia7d41aa312544bb0960670af58623b0dc0435a8a Signed-off-by: Satish Kodishala <skodisha@codeaurora.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/v4l2-core/v4l2-compat-ioctl32.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
index 07d6ce4c9..d3a60c31c 100644
--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
@@ -404,6 +404,16 @@ static int get_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user
&up->timestamp.tv_usec))
return -EFAULT;
+ if (V4L2_TYPE_IS_PRIVATE(kp->type)) {
+ compat_long_t tmp;
+
+ if (get_user(kp->length, &up->length) ||
+ get_user(tmp, &up->m.userptr))
+ return -EFAULT;
+
+ kp->m.userptr = (unsigned long)compat_ptr(tmp);
+ }
+
if (V4L2_TYPE_IS_MULTIPLANAR(kp->type)) {
num_planes = kp->length;
if (num_planes == 0) {
@@ -490,6 +500,12 @@ static int put_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user
put_user(kp->length, &up->length))
return -EFAULT;
+ if (V4L2_TYPE_IS_PRIVATE(kp->type)) {
+ if (put_user(kp->length, &up->length) ||
+ put_user(kp->m.userptr, &up->m.userptr))
+ return -EFAULT;
+ }
+
if (V4L2_TYPE_IS_MULTIPLANAR(kp->type)) {
num_planes = kp->length;
if (num_planes == 0)