Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 211531
b: refs/heads/master
c: 3e645d6
h: refs/heads/master
i:
  211529: e962e99
  211527: 5a47886
v: v3
  • Loading branch information
Linus Torvalds committed Oct 15, 2010
1 parent 8de965c commit 78d6261
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 12 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 799c10559d60f159ab2232203f222f18fa3c4a5f
refs/heads/master: 3e645d6b485446c54c6745c5e2cf5c528fe4deec
32 changes: 21 additions & 11 deletions trunk/drivers/media/video/v4l2-compat-ioctl32.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,17 +193,24 @@ static int put_video_window32(struct video_window *kp, struct video_window32 __u
struct video_code32 {
char loadwhat[16]; /* name or tag of file being passed */
compat_int_t datasize;
unsigned char *data;
compat_uptr_t data;
};

static int get_microcode32(struct video_code *kp, struct video_code32 __user *up)
static struct video_code __user *get_microcode32(struct video_code32 *kp)
{
if (!access_ok(VERIFY_READ, up, sizeof(struct video_code32)) ||
copy_from_user(kp->loadwhat, up->loadwhat, sizeof(up->loadwhat)) ||
get_user(kp->datasize, &up->datasize) ||
copy_from_user(kp->data, up->data, up->datasize))
return -EFAULT;
return 0;
struct video_code __user *up;

up = compat_alloc_user_space(sizeof(*up));

/*
* NOTE! We don't actually care if these fail. If the
* user address is invalid, the native ioctl will do
* the error handling for us
*/
(void) copy_to_user(up->loadwhat, kp->loadwhat, sizeof(up->loadwhat));
(void) put_user(kp->datasize, &up->datasize);
(void) put_user(compat_ptr(kp->data), &up->data);
return up;
}

#define VIDIOCGTUNER32 _IOWR('v', 4, struct video_tuner32)
Expand Down Expand Up @@ -739,7 +746,7 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
struct video_tuner vt;
struct video_buffer vb;
struct video_window vw;
struct video_code vc;
struct video_code32 vc;
struct video_audio va;
#endif
struct v4l2_format v2f;
Expand Down Expand Up @@ -818,8 +825,11 @@ static long do_video_ioctl(struct file *file, unsigned int cmd, unsigned long ar
break;

case VIDIOCSMICROCODE:
err = get_microcode32(&karg.vc, up);
compatible_arg = 0;
/* Copy the 32-bit "video_code32" to kernel space */
if (copy_from_user(&karg.vc, up, sizeof(karg.vc)))
return -EFAULT;
/* Convert the 32-bit version to a 64-bit version in user space */
up = get_microcode32(&karg.vc);
break;

case VIDIOCSFREQ:
Expand Down

0 comments on commit 78d6261

Please sign in to comment.