| From: Andrey Smirnov <andrew.smirnov@gmail.com> |
| Date: Thu, 23 May 2019 12:55:26 -0700 |
| Subject: Input: uinput - add compat ioctl number translation for |
| UI_*_FF_UPLOAD |
| |
| commit 7c7da40da1640ce6814dab1e8031b44e19e5a3f6 upstream. |
| |
| In the case of compat syscall ioctl numbers for UI_BEGIN_FF_UPLOAD and |
| UI_END_FF_UPLOAD need to be adjusted before being passed on |
| uinput_ioctl_handler() since code built with -m32 will be passing |
| slightly different values. Extend the code already covering |
| UI_SET_PHYS to cover UI_BEGIN_FF_UPLOAD and UI_END_FF_UPLOAD as well. |
| |
| Reported-by: Pierre-Loup A. Griffais <pgriffais@valvesoftware.com> |
| Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> |
| Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/input/misc/uinput.c | 22 ++++++++++++++++++++-- |
| 1 file changed, 20 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/input/misc/uinput.c |
| +++ b/drivers/input/misc/uinput.c |
| @@ -908,13 +908,31 @@ static long uinput_ioctl(struct file *fi |
| |
| #ifdef CONFIG_COMPAT |
| |
| -#define UI_SET_PHYS_COMPAT _IOW(UINPUT_IOCTL_BASE, 108, compat_uptr_t) |
| +/* |
| + * These IOCTLs change their size and thus their numbers between |
| + * 32 and 64 bits. |
| + */ |
| +#define UI_SET_PHYS_COMPAT \ |
| + _IOW(UINPUT_IOCTL_BASE, 108, compat_uptr_t) |
| +#define UI_BEGIN_FF_UPLOAD_COMPAT \ |
| + _IOWR(UINPUT_IOCTL_BASE, 200, struct uinput_ff_upload_compat) |
| +#define UI_END_FF_UPLOAD_COMPAT \ |
| + _IOW(UINPUT_IOCTL_BASE, 201, struct uinput_ff_upload_compat) |
| |
| static long uinput_compat_ioctl(struct file *file, |
| unsigned int cmd, unsigned long arg) |
| { |
| - if (cmd == UI_SET_PHYS_COMPAT) |
| + switch (cmd) { |
| + case UI_SET_PHYS_COMPAT: |
| cmd = UI_SET_PHYS; |
| + break; |
| + case UI_BEGIN_FF_UPLOAD_COMPAT: |
| + cmd = UI_BEGIN_FF_UPLOAD; |
| + break; |
| + case UI_END_FF_UPLOAD_COMPAT: |
| + cmd = UI_END_FF_UPLOAD; |
| + break; |
| + } |
| |
| return uinput_ioctl_handler(file, cmd, arg, compat_ptr(arg)); |
| } |