diff options
| author | Satish Kodishala <skodisha@codeaurora.org> | 2014-05-09 11:39:06 +0530 |
|---|---|---|
| committer | Mister Oyster <oysterized@gmail.com> | 2017-12-14 17:18:18 +0100 |
| commit | c4fd5633f12890814abace672c71423eb6803e77 (patch) | |
| tree | e79a55f418d5e53b1a2585f3bc33309170feb5cb /drivers | |
| parent | 9c7b441267e6a1b7b683838605bbcf744ffc9fb8 (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.c | 16 |
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) |
