Commit 644595f89620ba8446cc555be336d24a34464950

Authored by H. Peter Anvin
1 parent ee4fa23c4b

compat: Handle COMPAT_USE_64BIT_TIME in net/socket.c

Use helper functions aware of COMPAT_USE_64BIT_TIME to write struct
timeval and struct timespec to userspace in net/socket.c.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>

Showing 1 changed file with 8 additions and 10 deletions Side-by-side Diff

... ... @@ -2600,7 +2600,7 @@
2600 2600  
2601 2601 #ifdef CONFIG_COMPAT
2602 2602 static int do_siocgstamp(struct net *net, struct socket *sock,
2603   - unsigned int cmd, struct compat_timeval __user *up)
  2603 + unsigned int cmd, void __user *up)
2604 2604 {
2605 2605 mm_segment_t old_fs = get_fs();
2606 2606 struct timeval ktv;
2607 2607  
... ... @@ -2609,15 +2609,14 @@
2609 2609 set_fs(KERNEL_DS);
2610 2610 err = sock_do_ioctl(net, sock, cmd, (unsigned long)&ktv);
2611 2611 set_fs(old_fs);
2612   - if (!err) {
2613   - err = put_user(ktv.tv_sec, &up->tv_sec);
2614   - err |= __put_user(ktv.tv_usec, &up->tv_usec);
2615   - }
  2612 + if (!err)
  2613 + err = compat_put_timeval(up, &ktv);
  2614 +
2616 2615 return err;
2617 2616 }
2618 2617  
2619 2618 static int do_siocgstampns(struct net *net, struct socket *sock,
2620   - unsigned int cmd, struct compat_timespec __user *up)
  2619 + unsigned int cmd, void __user *up)
2621 2620 {
2622 2621 mm_segment_t old_fs = get_fs();
2623 2622 struct timespec kts;
... ... @@ -2626,10 +2625,9 @@
2626 2625 set_fs(KERNEL_DS);
2627 2626 err = sock_do_ioctl(net, sock, cmd, (unsigned long)&kts);
2628 2627 set_fs(old_fs);
2629   - if (!err) {
2630   - err = put_user(kts.tv_sec, &up->tv_sec);
2631   - err |= __put_user(kts.tv_nsec, &up->tv_nsec);
2632   - }
  2628 + if (!err)
  2629 + err = compat_put_timespec(up, &kts);
  2630 +
2633 2631 return err;
2634 2632 }
2635 2633