diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/compat_ioctl.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c index 8b1c5d8bf4ef..c68b055fa26e 100644 --- a/fs/compat_ioctl.c +++ b/fs/compat_ioctl.c | |||
@@ -266,6 +266,23 @@ static int do_siocgstamp(unsigned int fd, unsigned int cmd, unsigned long arg) | |||
266 | return err; | 266 | return err; |
267 | } | 267 | } |
268 | 268 | ||
269 | static int do_siocgstampns(unsigned int fd, unsigned int cmd, unsigned long arg) | ||
270 | { | ||
271 | struct compat_timespec __user *up = compat_ptr(arg); | ||
272 | struct timespec kts; | ||
273 | mm_segment_t old_fs = get_fs(); | ||
274 | int err; | ||
275 | |||
276 | set_fs(KERNEL_DS); | ||
277 | err = sys_ioctl(fd, cmd, (unsigned long)&kts); | ||
278 | set_fs(old_fs); | ||
279 | if (!err) { | ||
280 | err = put_user(kts.tv_sec, &up->tv_sec); | ||
281 | err |= __put_user(kts.tv_nsec, &up->tv_nsec); | ||
282 | } | ||
283 | return err; | ||
284 | } | ||
285 | |||
269 | struct ifmap32 { | 286 | struct ifmap32 { |
270 | compat_ulong_t mem_start; | 287 | compat_ulong_t mem_start; |
271 | compat_ulong_t mem_end; | 288 | compat_ulong_t mem_end; |
@@ -2437,6 +2454,7 @@ HANDLE_IOCTL(SIOCBRDELIF, dev_ifsioc) | |||
2437 | /* Note SIOCRTMSG is no longer, so this is safe and * the user would have seen just an -EINVAL anyways. */ | 2454 | /* Note SIOCRTMSG is no longer, so this is safe and * the user would have seen just an -EINVAL anyways. */ |
2438 | HANDLE_IOCTL(SIOCRTMSG, ret_einval) | 2455 | HANDLE_IOCTL(SIOCRTMSG, ret_einval) |
2439 | HANDLE_IOCTL(SIOCGSTAMP, do_siocgstamp) | 2456 | HANDLE_IOCTL(SIOCGSTAMP, do_siocgstamp) |
2457 | HANDLE_IOCTL(SIOCGSTAMPNS, do_siocgstampns) | ||
2440 | #endif | 2458 | #endif |
2441 | #ifdef CONFIG_BLOCK | 2459 | #ifdef CONFIG_BLOCK |
2442 | HANDLE_IOCTL(HDIO_GETGEO, hdio_getgeo) | 2460 | HANDLE_IOCTL(HDIO_GETGEO, hdio_getgeo) |