From: Ben Hutchings Date: Tue, 20 Aug 2019 17:12:35 +0000 (+0100) Subject: Partially revert "net: socket: implement 64-bit timestamps" X-Git-Tag: archive/raspbian/5.10.234-1+rpi1^2~34 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=46e3cab8d2878bb9565eebaa2f05fb60039579e8;p=linux.git Partially revert "net: socket: implement 64-bit timestamps" The introduction of SIOCGSTAMP{,NS}_OLD and move of SICOGSTAMP{,NS} to a different header has caused build failures for various user-space programs including qemu and suricata. It also causes a test failure for glibc. For now, remove the _OLD suffix on the old ioctl numbers and require programs using 64-bit timestamps to explicitly use SIOCGSTAMP{,NS}_NEW. References: https://lore.kernel.org/lkml/af0eb47a-5b98-1bd9-3e8d-652e7f28b01f@de.ibm.com/ References: https://bugs.debian.org/934316 References: https://ci.debian.net/data/autopkgtest/testing/amd64/g/glibc/2772289/log.gz Signed-off-by: Ben Hutchings Gbp-Pq: Topic bugfix/all Gbp-Pq: Name partially-revert-net-socket-implement-64-bit-timestamps.patch --- diff --git a/arch/alpha/include/uapi/asm/sockios.h b/arch/alpha/include/uapi/asm/sockios.h index af92bc27c3b..ba287e4b01b 100644 --- a/arch/alpha/include/uapi/asm/sockios.h +++ b/arch/alpha/include/uapi/asm/sockios.h @@ -11,7 +11,7 @@ #define SIOCSPGRP _IOW('s', 8, pid_t) #define SIOCGPGRP _IOR('s', 9, pid_t) -#define SIOCGSTAMP_OLD 0x8906 /* Get stamp (timeval) */ -#define SIOCGSTAMPNS_OLD 0x8907 /* Get stamp (timespec) */ +#define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */ +#define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */ #endif /* _ASM_ALPHA_SOCKIOS_H */ diff --git a/arch/mips/include/uapi/asm/sockios.h b/arch/mips/include/uapi/asm/sockios.h index 66f60234f29..5b40a88593f 100644 --- a/arch/mips/include/uapi/asm/sockios.h +++ b/arch/mips/include/uapi/asm/sockios.h @@ -21,7 +21,7 @@ #define SIOCSPGRP _IOW('s', 8, pid_t) #define SIOCGPGRP _IOR('s', 9, pid_t) -#define SIOCGSTAMP_OLD 0x8906 /* Get stamp (timeval) */ -#define SIOCGSTAMPNS_OLD 0x8907 /* Get stamp (timespec) */ +#define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */ +#define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */ #endif /* _ASM_SOCKIOS_H */ diff --git a/arch/sh/include/uapi/asm/sockios.h b/arch/sh/include/uapi/asm/sockios.h index ef01ced9e16..24a67f46b70 100644 --- a/arch/sh/include/uapi/asm/sockios.h +++ b/arch/sh/include/uapi/asm/sockios.h @@ -12,7 +12,6 @@ #define SIOCSPGRP _IOW('s', 8, pid_t) #define SIOCGPGRP _IOR('s', 9, pid_t) -#define SIOCGSTAMP_OLD _IOR('s', 100, struct __kernel_old_timeval) /* Get stamp (timeval) */ -#define SIOCGSTAMPNS_OLD _IOR('s', 101, struct __kernel_old_timespec) /* Get stamp (timespec) */ - +#define SIOCGSTAMP _IOR('s', 100, struct __kernel_old_timeval) /* Get stamp (timeval) */ +#define SIOCGSTAMPNS _IOR('s', 101, struct __kernel_old_timespec) /* Get stamp (timespec) */ #endif /* __ASM_SH_SOCKIOS_H */ diff --git a/arch/xtensa/include/uapi/asm/sockios.h b/arch/xtensa/include/uapi/asm/sockios.h index 1a1f58f4b75..fb8ac360718 100644 --- a/arch/xtensa/include/uapi/asm/sockios.h +++ b/arch/xtensa/include/uapi/asm/sockios.h @@ -26,7 +26,7 @@ #define SIOCSPGRP _IOW('s', 8, pid_t) #define SIOCGPGRP _IOR('s', 9, pid_t) -#define SIOCGSTAMP_OLD 0x8906 /* Get stamp (timeval) */ -#define SIOCGSTAMPNS_OLD 0x8907 /* Get stamp (timespec) */ +#define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */ +#define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */ #endif /* _XTENSA_SOCKIOS_H */ diff --git a/include/uapi/asm-generic/sockios.h b/include/uapi/asm-generic/sockios.h index 44fa3ed7048..64f658c7cec 100644 --- a/include/uapi/asm-generic/sockios.h +++ b/include/uapi/asm-generic/sockios.h @@ -8,7 +8,7 @@ #define FIOGETOWN 0x8903 #define SIOCGPGRP 0x8904 #define SIOCATMARK 0x8905 -#define SIOCGSTAMP_OLD 0x8906 /* Get stamp (timeval) */ -#define SIOCGSTAMPNS_OLD 0x8907 /* Get stamp (timespec) */ +#define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */ +#define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */ #endif /* __ASM_GENERIC_SOCKIOS_H */ diff --git a/include/uapi/linux/sockios.h b/include/uapi/linux/sockios.h index 7d1bccbbef7..ac2e9d9e1f4 100644 --- a/include/uapi/linux/sockios.h +++ b/include/uapi/linux/sockios.h @@ -19,7 +19,6 @@ #ifndef _LINUX_SOCKIOS_H #define _LINUX_SOCKIOS_H -#include #include /* Linux-specific socket ioctls */ @@ -37,17 +36,6 @@ /* Get stamp (timespec) */ #define SIOCGSTAMPNS_NEW _IOR(SOCK_IOC_TYPE, 0x07, long long[2]) -#if __BITS_PER_LONG == 64 || (defined(__x86_64__) && defined(__ILP32__)) -/* on 64-bit and x32, avoid the ?: operator */ -#define SIOCGSTAMP SIOCGSTAMP_OLD -#define SIOCGSTAMPNS SIOCGSTAMPNS_OLD -#else -#define SIOCGSTAMP ((sizeof(struct timeval)) == 8 ? \ - SIOCGSTAMP_OLD : SIOCGSTAMP_NEW) -#define SIOCGSTAMPNS ((sizeof(struct timespec)) == 8 ? \ - SIOCGSTAMPNS_OLD : SIOCGSTAMPNS_NEW) -#endif - /* Routing table calls. */ #define SIOCADDRT 0x890B /* add routing table entry */ #define SIOCDELRT 0x890C /* delete routing table entry */ diff --git a/net/socket.c b/net/socket.c index 2a48aa89c03..246321b461c 100644 --- a/net/socket.c +++ b/net/socket.c @@ -1182,14 +1182,14 @@ static long sock_ioctl(struct file *file, unsigned cmd, unsigned long arg) err = open_related_ns(&net->ns, get_net_ns); break; - case SIOCGSTAMP_OLD: - case SIOCGSTAMPNS_OLD: + case SIOCGSTAMP: + case SIOCGSTAMPNS: if (!sock->ops->gettstamp) { err = -ENOIOCTLCMD; break; } err = sock->ops->gettstamp(sock, argp, - cmd == SIOCGSTAMP_OLD, + cmd == SIOCGSTAMP, !IS_ENABLED(CONFIG_64BIT)); break; case SIOCGSTAMP_NEW: @@ -3299,11 +3299,11 @@ static int compat_sock_ioctl_trans(struct file *file, struct socket *sock, case SIOCGIFMAP: case SIOCSIFMAP: return compat_sioc_ifmap(net, cmd, argp); - case SIOCGSTAMP_OLD: - case SIOCGSTAMPNS_OLD: + case SIOCGSTAMP: + case SIOCGSTAMPNS: if (!sock->ops->gettstamp) return -ENOIOCTLCMD; - return sock->ops->gettstamp(sock, argp, cmd == SIOCGSTAMP_OLD, + return sock->ops->gettstamp(sock, argp, cmd == SIOCGSTAMP, !COMPAT_USE_64BIT_TIME); case SIOCETHTOOL: