Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+8 -10
+8 -10
net/socket.c
··· 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; ··· 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; ··· 2625 2626 set_fs(KERNEL_DS); 2626 2627 err = sock_do_ioctl(net, sock, cmd, (unsigned long)&kts); 2627 2628 set_fs(old_fs); 2628 - if (!err) { 2629 - err = put_user(kts.tv_sec, &up->tv_sec); 2630 - err |= __put_user(kts.tv_nsec, &up->tv_nsec); 2631 - } 2629 + if (!err) 2630 + err = compat_put_timespec(up, &kts); 2631 + 2632 2632 return err; 2633 2633 } 2634 2634