| From bf55a9f67bff1779933b307f6fb79891f86577a1 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 27 Aug 2018 15:56:21 -0400 |
| Subject: media: dvb: fix compat ioctl translation |
| |
| From: Arnd Bergmann <arnd@arndb.de> |
| |
| [ Upstream commit 1ccbeeb888ac33627d91f1ccf0b84ef3bcadef24 ] |
| |
| The VIDEO_GET_EVENT and VIDEO_STILLPICTURE was added back in 2005 but |
| it never worked because the command number is wrong. |
| |
| Using the right command number means we have a better chance of them |
| actually doing the right thing, though clearly nobody has ever tried |
| it successfully. |
| |
| I noticed these while auditing the remaining users of compat_time_t |
| for y2038 bugs. This one is fine in that regard, it just never did |
| anything. |
| |
| Fixes: 6e87abd0b8cb ("[DVB]: Add compat ioctl handling.") |
| |
| Signed-off-by: Arnd Bergmann <arnd@arndb.de> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| fs/compat_ioctl.c | 10 ++++++---- |
| 1 file changed, 6 insertions(+), 4 deletions(-) |
| |
| diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c |
| index 8f08095ee54e9..3a03f74a8cc4e 100644 |
| --- a/fs/compat_ioctl.c |
| +++ b/fs/compat_ioctl.c |
| @@ -141,6 +141,7 @@ struct compat_video_event { |
| unsigned int frame_rate; |
| } u; |
| }; |
| +#define VIDEO_GET_EVENT32 _IOR('o', 28, struct compat_video_event) |
| |
| static int do_video_get_event(struct file *file, |
| unsigned int cmd, struct compat_video_event __user *up) |
| @@ -152,7 +153,7 @@ static int do_video_get_event(struct file *file, |
| if (kevent == NULL) |
| return -EFAULT; |
| |
| - err = do_ioctl(file, cmd, (unsigned long)kevent); |
| + err = do_ioctl(file, VIDEO_GET_EVENT, (unsigned long)kevent); |
| if (!err) { |
| err = convert_in_user(&kevent->type, &up->type); |
| err |= convert_in_user(&kevent->timestamp, &up->timestamp); |
| @@ -171,6 +172,7 @@ struct compat_video_still_picture { |
| compat_uptr_t iFrame; |
| int32_t size; |
| }; |
| +#define VIDEO_STILLPICTURE32 _IOW('o', 30, struct compat_video_still_picture) |
| |
| static int do_video_stillpicture(struct file *file, |
| unsigned int cmd, struct compat_video_still_picture __user *up) |
| @@ -193,7 +195,7 @@ static int do_video_stillpicture(struct file *file, |
| if (err) |
| return -EFAULT; |
| |
| - err = do_ioctl(file, cmd, (unsigned long) up_native); |
| + err = do_ioctl(file, VIDEO_STILLPICTURE, (unsigned long) up_native); |
| |
| return err; |
| } |
| @@ -1302,9 +1304,9 @@ static long do_ioctl_trans(unsigned int cmd, |
| return rtc_ioctl(file, cmd, argp); |
| |
| /* dvb */ |
| - case VIDEO_GET_EVENT: |
| + case VIDEO_GET_EVENT32: |
| return do_video_get_event(file, cmd, argp); |
| - case VIDEO_STILLPICTURE: |
| + case VIDEO_STILLPICTURE32: |
| return do_video_stillpicture(file, cmd, argp); |
| } |
| |
| -- |
| 2.20.1 |
| |