Loading net/ipv4/ip_sockglue.c +4 −1 Original line number Diff line number Diff line Loading @@ -1352,7 +1352,10 @@ static int do_ip_setsockopt(struct sock *sk, int level, int optname, goto e_inval; if (val < 0 || val > 255) goto e_inval; inet->min_ttl = val; /* tcp_v4_err() and tcp_v4_rcv() might read min_ttl * while we are changint it. */ WRITE_ONCE(inet->min_ttl, val); break; default: Loading net/ipv4/tcp_ipv4.c +5 −2 Original line number Diff line number Diff line Loading @@ -508,7 +508,8 @@ int tcp_v4_err(struct sk_buff *skb, u32 info) if (sk->sk_state == TCP_CLOSE) goto out; if (unlikely(iph->ttl < inet_sk(sk)->min_ttl)) { /* min_ttl can be changed concurrently from do_ip_setsockopt() */ if (unlikely(iph->ttl < READ_ONCE(inet_sk(sk)->min_ttl))) { __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP); goto out; } Loading Loading @@ -2068,7 +2069,9 @@ int tcp_v4_rcv(struct sk_buff *skb) return 0; } } if (unlikely(iph->ttl < inet_sk(sk)->min_ttl)) { /* min_ttl can be changed concurrently from do_ip_setsockopt() */ if (unlikely(iph->ttl < READ_ONCE(inet_sk(sk)->min_ttl))) { __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP); goto discard_and_relse; } Loading Loading
net/ipv4/ip_sockglue.c +4 −1 Original line number Diff line number Diff line Loading @@ -1352,7 +1352,10 @@ static int do_ip_setsockopt(struct sock *sk, int level, int optname, goto e_inval; if (val < 0 || val > 255) goto e_inval; inet->min_ttl = val; /* tcp_v4_err() and tcp_v4_rcv() might read min_ttl * while we are changint it. */ WRITE_ONCE(inet->min_ttl, val); break; default: Loading
net/ipv4/tcp_ipv4.c +5 −2 Original line number Diff line number Diff line Loading @@ -508,7 +508,8 @@ int tcp_v4_err(struct sk_buff *skb, u32 info) if (sk->sk_state == TCP_CLOSE) goto out; if (unlikely(iph->ttl < inet_sk(sk)->min_ttl)) { /* min_ttl can be changed concurrently from do_ip_setsockopt() */ if (unlikely(iph->ttl < READ_ONCE(inet_sk(sk)->min_ttl))) { __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP); goto out; } Loading Loading @@ -2068,7 +2069,9 @@ int tcp_v4_rcv(struct sk_buff *skb) return 0; } } if (unlikely(iph->ttl < inet_sk(sk)->min_ttl)) { /* min_ttl can be changed concurrently from do_ip_setsockopt() */ if (unlikely(iph->ttl < READ_ONCE(inet_sk(sk)->min_ttl))) { __NET_INC_STATS(net, LINUX_MIB_TCPMINTTLDROP); goto discard_and_relse; } Loading