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

sockopt: Rename SO_TIMESTAMP* to SO_TIMESTAMP*_OLD

SO_TIMESTAMP, SO_TIMESTAMPNS and SO_TIMESTAMPING options, the
way they are currently defined, are not y2038 safe.
Subsequent patches in the series add new y2038 safe versions
of these options which provide 64 bit timestamps on all
architectures uniformly.
Hence, rename existing options with OLD tag suffixes.

Also note that kernel will not use the untagged SO_TIMESTAMP*
and SCM_TIMESTAMP* options internally anymore.

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Acked-by: Willem de Bruijn <willemb@google.com>
Cc: deller@gmx.de
Cc: dhowells@redhat.com
Cc: jejb@parisc-linux.org
Cc: ralf@linux-mips.org
Cc: rth@twiddle.net
Cc: linux-afs@lists.infradead.org
Cc: linux-alpha@vger.kernel.org
Cc: linux-arch@vger.kernel.org
Cc: linux-mips@linux-mips.org
Cc: linux-parisc@vger.kernel.org
Cc: linux-rdma@vger.kernel.org
Cc: sparclinux@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Deepa Dinamani and committed by
David S. Miller
7f1bc6e9 2edfd8e0

+101 -57
+16 -7
arch/alpha/include/uapi/asm/socket.h
··· 51 51 #define SO_GET_FILTER SO_ATTACH_FILTER 52 52 53 53 #define SO_PEERNAME 28 54 - #define SO_TIMESTAMP 29 55 - #define SCM_TIMESTAMP SO_TIMESTAMP 56 54 57 55 #define SO_PEERSEC 30 58 56 #define SO_PASSSEC 34 59 - #define SO_TIMESTAMPNS 35 60 - #define SCM_TIMESTAMPNS SO_TIMESTAMPNS 61 57 62 58 /* Security levels - as per NRL IPv6 - don't actually do anything */ 63 59 #define SO_SECURITY_AUTHENTICATION 19 ··· 61 65 #define SO_SECURITY_ENCRYPTION_NETWORK 21 62 66 63 67 #define SO_MARK 36 64 - 65 - #define SO_TIMESTAMPING 37 66 - #define SCM_TIMESTAMPING SO_TIMESTAMPING 67 68 68 69 #define SO_RXQ_OVFL 40 69 70 ··· 109 116 #define SCM_TXTIME SO_TXTIME 110 117 111 118 #define SO_BINDTOIFINDEX 62 119 + 120 + #define SO_TIMESTAMP_OLD 29 121 + #define SO_TIMESTAMPNS_OLD 35 122 + #define SO_TIMESTAMPING_OLD 37 123 + 124 + #if !defined(__KERNEL__) 125 + 126 + #define SO_TIMESTAMP SO_TIMESTAMP_OLD 127 + #define SO_TIMESTAMPNS SO_TIMESTAMPNS_OLD 128 + #define SO_TIMESTAMPING SO_TIMESTAMPING_OLD 129 + 130 + #define SCM_TIMESTAMP SO_TIMESTAMP 131 + #define SCM_TIMESTAMPNS SO_TIMESTAMPNS 132 + #define SCM_TIMESTAMPING SO_TIMESTAMPING 133 + 134 + #endif 112 135 113 136 #endif /* _UAPI_ASM_SOCKET_H */
+16 -7
arch/mips/include/uapi/asm/socket.h
··· 65 65 #define SO_GET_FILTER SO_ATTACH_FILTER 66 66 67 67 #define SO_PEERNAME 28 68 - #define SO_TIMESTAMP 29 69 - #define SCM_TIMESTAMP SO_TIMESTAMP 70 68 71 69 #define SO_PEERSEC 30 72 70 #define SO_SNDBUFFORCE 31 73 71 #define SO_RCVBUFFORCE 33 74 72 #define SO_PASSSEC 34 75 - #define SO_TIMESTAMPNS 35 76 - #define SCM_TIMESTAMPNS SO_TIMESTAMPNS 77 73 78 74 #define SO_MARK 36 79 - 80 - #define SO_TIMESTAMPING 37 81 - #define SCM_TIMESTAMPING SO_TIMESTAMPING 82 75 83 76 #define SO_RXQ_OVFL 40 84 77 ··· 120 127 #define SCM_TXTIME SO_TXTIME 121 128 122 129 #define SO_BINDTOIFINDEX 62 130 + 131 + #define SO_TIMESTAMP_OLD 29 132 + #define SO_TIMESTAMPNS_OLD 35 133 + #define SO_TIMESTAMPING_OLD 37 134 + 135 + #if !defined(__KERNEL__) 136 + 137 + #define SO_TIMESTAMP SO_TIMESTAMP_OLD 138 + #define SO_TIMESTAMPNS SO_TIMESTAMPNS_OLD 139 + #define SO_TIMESTAMPING SO_TIMESTAMPING_OLD 140 + 141 + #define SCM_TIMESTAMP SO_TIMESTAMP 142 + #define SCM_TIMESTAMPNS SO_TIMESTAMPNS 143 + #define SCM_TIMESTAMPING SO_TIMESTAMPING 144 + 145 + #endif 123 146 124 147 #endif /* _UAPI_ASM_SOCKET_H */
+16 -7
arch/parisc/include/uapi/asm/socket.h
··· 34 34 #define SO_BSDCOMPAT 0x400e 35 35 #define SO_PASSCRED 0x4010 36 36 #define SO_PEERCRED 0x4011 37 - #define SO_TIMESTAMP 0x4012 38 - #define SCM_TIMESTAMP SO_TIMESTAMP 39 - #define SO_TIMESTAMPNS 0x4013 40 - #define SCM_TIMESTAMPNS SO_TIMESTAMPNS 41 37 42 38 /* Security levels - as per NRL IPv6 - don't actually do anything */ 43 39 #define SO_SECURITY_AUTHENTICATION 0x4016 ··· 53 57 #define SO_PASSSEC 0x401e 54 58 55 59 #define SO_MARK 0x401f 56 - 57 - #define SO_TIMESTAMPING 0x4020 58 - #define SCM_TIMESTAMPING SO_TIMESTAMPING 59 60 60 61 #define SO_RXQ_OVFL 0x4021 61 62 ··· 101 108 #define SCM_TXTIME SO_TXTIME 102 109 103 110 #define SO_BINDTOIFINDEX 0x4037 111 + 112 + #define SO_TIMESTAMP_OLD 0x4012 113 + #define SO_TIMESTAMPNS_OLD 0x4013 114 + #define SO_TIMESTAMPING_OLD 0x4020 115 + 116 + #if !defined(__KERNEL__) 117 + 118 + #define SO_TIMESTAMP SO_TIMESTAMP_OLD 119 + #define SO_TIMESTAMPNS SO_TIMESTAMPNS_OLD 120 + #define SO_TIMESTAMPING SO_TIMESTAMPING_OLD 121 + 122 + #define SCM_TIMESTAMP SO_TIMESTAMP 123 + #define SCM_TIMESTAMPNS SO_TIMESTAMPNS 124 + #define SCM_TIMESTAMPING SO_TIMESTAMPING 125 + 126 + #endif 104 127 105 128 #endif /* _UAPI_ASM_SOCKET_H */
+16 -8
arch/sparc/include/uapi/asm/socket.h
··· 33 33 #define SO_PROTOCOL 0x1028 34 34 #define SO_DOMAIN 0x1029 35 35 36 - 37 36 /* Linux specific, keep the same. */ 38 37 #define SO_NO_CHECK 0x000b 39 38 #define SO_PRIORITY 0x000c ··· 44 45 #define SO_GET_FILTER SO_ATTACH_FILTER 45 46 46 47 #define SO_PEERNAME 0x001c 47 - #define SO_TIMESTAMP 0x001d 48 - #define SCM_TIMESTAMP SO_TIMESTAMP 49 48 50 49 #define SO_PEERSEC 0x001e 51 50 #define SO_PASSSEC 0x001f 52 - #define SO_TIMESTAMPNS 0x0021 53 - #define SCM_TIMESTAMPNS SO_TIMESTAMPNS 54 51 55 52 #define SO_MARK 0x0022 56 - 57 - #define SO_TIMESTAMPING 0x0023 58 - #define SCM_TIMESTAMPING SO_TIMESTAMPING 59 53 60 54 #define SO_RXQ_OVFL 0x0024 61 55 ··· 102 110 #define SO_SECURITY_AUTHENTICATION 0x5001 103 111 #define SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002 104 112 #define SO_SECURITY_ENCRYPTION_NETWORK 0x5004 113 + 114 + #define SO_TIMESTAMP_OLD 0x001d 115 + #define SO_TIMESTAMPNS_OLD 0x0021 116 + #define SO_TIMESTAMPING_OLD 0x0023 117 + 118 + #if !defined(__KERNEL__) 119 + 120 + #define SO_TIMESTAMP SO_TIMESTAMP_OLD 121 + #define SO_TIMESTAMPNS SO_TIMESTAMPNS_OLD 122 + #define SO_TIMESTAMPING SO_TIMESTAMPING_OLD 123 + 124 + #define SCM_TIMESTAMP SO_TIMESTAMP 125 + #define SCM_TIMESTAMPNS SO_TIMESTAMPNS 126 + #define SCM_TIMESTAMPING SO_TIMESTAMPING 127 + 128 + #endif 105 129 106 130 #endif /* _ASM_SOCKET_H */
+16 -7
include/uapi/asm-generic/socket.h
··· 46 46 #define SO_GET_FILTER SO_ATTACH_FILTER 47 47 48 48 #define SO_PEERNAME 28 49 - #define SO_TIMESTAMP 29 50 - #define SCM_TIMESTAMP SO_TIMESTAMP 51 49 52 50 #define SO_ACCEPTCONN 30 53 51 54 52 #define SO_PEERSEC 31 55 53 #define SO_PASSSEC 34 56 - #define SO_TIMESTAMPNS 35 57 - #define SCM_TIMESTAMPNS SO_TIMESTAMPNS 58 54 59 55 #define SO_MARK 36 60 - 61 - #define SO_TIMESTAMPING 37 62 - #define SCM_TIMESTAMPING SO_TIMESTAMPING 63 56 64 57 #define SO_PROTOCOL 38 65 58 #define SO_DOMAIN 39 ··· 104 111 #define SCM_TXTIME SO_TXTIME 105 112 106 113 #define SO_BINDTOIFINDEX 62 114 + 115 + #define SO_TIMESTAMP_OLD 29 116 + #define SO_TIMESTAMPNS_OLD 35 117 + #define SO_TIMESTAMPING_OLD 37 118 + 119 + #if !defined(__KERNEL__) 120 + 121 + #define SO_TIMESTAMP SO_TIMESTAMP_OLD 122 + #define SO_TIMESTAMPNS SO_TIMESTAMPNS_OLD 123 + #define SO_TIMESTAMPING SO_TIMESTAMPING_OLD 124 + 125 + #define SCM_TIMESTAMP SO_TIMESTAMP 126 + #define SCM_TIMESTAMPNS SO_TIMESTAMPNS 127 + #define SCM_TIMESTAMPING SO_TIMESTAMPING 128 + 129 + #endif 107 130 108 131 #endif /* __ASM_GENERIC_SOCKET_H */
+3 -3
net/compat.c
··· 219 219 } 220 220 221 221 if (!COMPAT_USE_64BIT_TIME) { 222 - if (level == SOL_SOCKET && type == SCM_TIMESTAMP) { 222 + if (level == SOL_SOCKET && type == SO_TIMESTAMP_OLD) { 223 223 struct timeval *tv = (struct timeval *)data; 224 224 ctv.tv_sec = tv->tv_sec; 225 225 ctv.tv_usec = tv->tv_usec; ··· 227 227 len = sizeof(ctv); 228 228 } 229 229 if (level == SOL_SOCKET && 230 - (type == SCM_TIMESTAMPNS || type == SCM_TIMESTAMPING)) { 231 - int count = type == SCM_TIMESTAMPNS ? 1 : 3; 230 + (type == SO_TIMESTAMPNS_OLD || type == SO_TIMESTAMPING_OLD)) { 231 + int count = type == SO_TIMESTAMPNS_OLD ? 1 : 3; 232 232 int i; 233 233 struct timespec *ts = (struct timespec *)data; 234 234 for (i = 0; i < count; i++) {
+8 -8
net/core/sock.c
··· 867 867 clear_bit(SOCK_PASSCRED, &sock->flags); 868 868 break; 869 869 870 - case SO_TIMESTAMP: 871 - case SO_TIMESTAMPNS: 870 + case SO_TIMESTAMP_OLD: 871 + case SO_TIMESTAMPNS_OLD: 872 872 if (valbool) { 873 - if (optname == SO_TIMESTAMP) 873 + if (optname == SO_TIMESTAMP_OLD) 874 874 sock_reset_flag(sk, SOCK_RCVTSTAMPNS); 875 875 else 876 876 sock_set_flag(sk, SOCK_RCVTSTAMPNS); ··· 882 882 } 883 883 break; 884 884 885 - case SO_TIMESTAMPING: 885 + case SO_TIMESTAMPING_OLD: 886 886 if (val & ~SOF_TIMESTAMPING_MASK) { 887 887 ret = -EINVAL; 888 888 break; ··· 1243 1243 sock_warn_obsolete_bsdism("getsockopt"); 1244 1244 break; 1245 1245 1246 - case SO_TIMESTAMP: 1246 + case SO_TIMESTAMP_OLD: 1247 1247 v.val = sock_flag(sk, SOCK_RCVTSTAMP) && 1248 1248 !sock_flag(sk, SOCK_RCVTSTAMPNS); 1249 1249 break; 1250 1250 1251 - case SO_TIMESTAMPNS: 1251 + case SO_TIMESTAMPNS_OLD: 1252 1252 v.val = sock_flag(sk, SOCK_RCVTSTAMPNS); 1253 1253 break; 1254 1254 1255 - case SO_TIMESTAMPING: 1255 + case SO_TIMESTAMPING_OLD: 1256 1256 v.val = sk->sk_tsflags; 1257 1257 break; 1258 1258 ··· 2168 2168 return -EINVAL; 2169 2169 sockc->mark = *(u32 *)CMSG_DATA(cmsg); 2170 2170 break; 2171 - case SO_TIMESTAMPING: 2171 + case SO_TIMESTAMPING_OLD: 2172 2172 if (cmsg->cmsg_len != CMSG_LEN(sizeof(u32))) 2173 2173 return -EINVAL; 2174 2174
+3 -3
net/ipv4/tcp.c
··· 1867 1867 if (tss->ts[0].tv_sec || tss->ts[0].tv_nsec) { 1868 1868 if (sock_flag(sk, SOCK_RCVTSTAMP)) { 1869 1869 if (sock_flag(sk, SOCK_RCVTSTAMPNS)) { 1870 - put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMPNS, 1870 + put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMPNS_OLD, 1871 1871 sizeof(tss->ts[0]), &tss->ts[0]); 1872 1872 } else { 1873 1873 tv.tv_sec = tss->ts[0].tv_sec; 1874 1874 tv.tv_usec = tss->ts[0].tv_nsec / 1000; 1875 1875 1876 - put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMP, 1876 + put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP_OLD, 1877 1877 sizeof(tv), &tv); 1878 1878 } 1879 1879 } ··· 1893 1893 1894 1894 if (has_timestamping) { 1895 1895 tss->ts[1] = (struct timespec) {0}; 1896 - put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMPING, 1896 + put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMPING_OLD, 1897 1897 sizeof(*tss), tss); 1898 1898 } 1899 1899 }
+1 -1
net/rds/af_rds.c
··· 430 430 ret = rds_set_transport(rs, optval, optlen); 431 431 release_sock(sock->sk); 432 432 break; 433 - case SO_TIMESTAMP: 433 + case SO_TIMESTAMP_OLD: 434 434 lock_sock(sock->sk); 435 435 ret = rds_enable_recvtstamp(sock->sk, optval, optlen); 436 436 release_sock(sock->sk);
+1 -1
net/rds/recv.c
··· 550 550 if ((inc->i_rx_tstamp != 0) && 551 551 sock_flag(rds_rs_to_sk(rs), SOCK_RCVTSTAMP)) { 552 552 struct timeval tv = ktime_to_timeval(inc->i_rx_tstamp); 553 - ret = put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMP, 553 + ret = put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP_OLD, 554 554 sizeof(tv), &tv); 555 555 if (ret) 556 556 goto out;
+1 -1
net/rxrpc/local_object.c
··· 202 202 203 203 /* We want receive timestamps. */ 204 204 opt = 1; 205 - ret = kernel_setsockopt(local->socket, SOL_SOCKET, SO_TIMESTAMPNS, 205 + ret = kernel_setsockopt(local->socket, SOL_SOCKET, SO_TIMESTAMPNS_OLD, 206 206 (char *)&opt, sizeof(opt)); 207 207 if (ret < 0) { 208 208 _debug("setsockopt failed");
+4 -4
net/socket.c
··· 669 669 * before the software timestamp is received, a hardware TX timestamp may be 670 670 * returned only if there is no software TX timestamp. Ignore false software 671 671 * timestamps, which may be made in the __sock_recv_timestamp() call when the 672 - * option SO_TIMESTAMP(NS) is enabled on the socket, even when the skb has a 672 + * option SO_TIMESTAMP_OLD(NS) is enabled on the socket, even when the skb has a 673 673 * hardware timestamp. 674 674 */ 675 675 static bool skb_is_swtx_tstamp(const struct sk_buff *skb, int false_tstamp) ··· 721 721 if (!sock_flag(sk, SOCK_RCVTSTAMPNS)) { 722 722 struct timeval tv; 723 723 skb_get_timestamp(skb, &tv); 724 - put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMP, 724 + put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP_OLD, 725 725 sizeof(tv), &tv); 726 726 } else { 727 727 struct timespec ts; 728 728 skb_get_timestampns(skb, &ts); 729 - put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMPNS, 729 + put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMPNS_OLD, 730 730 sizeof(ts), &ts); 731 731 } 732 732 } ··· 746 746 } 747 747 if (!empty) { 748 748 put_cmsg(msg, SOL_SOCKET, 749 - SCM_TIMESTAMPING, sizeof(tss), &tss); 749 + SO_TIMESTAMPING_OLD, sizeof(tss), &tss); 750 750 751 751 if (skb_is_err_queue(skb) && skb->len && 752 752 SKB_EXT_ERR(skb)->opt_stats)