Commit 8281b7ec authored by Kuniyuki Iwashima's avatar Kuniyuki Iwashima Committed by David S. Miller

ip: Fix data-races around sysctl_ip_default_ttl.

While reading sysctl_ip_default_ttl, it can be changed concurrently.
Thus, we need to add READ_ONCE() to its readers.

Fixes: 1da177e4 ("Linux-2.6.12-rc2")
Signed-off-by: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent db886979
...@@ -474,7 +474,7 @@ nfp_fl_set_tun(struct nfp_app *app, struct nfp_fl_set_tun *set_tun, ...@@ -474,7 +474,7 @@ nfp_fl_set_tun(struct nfp_app *app, struct nfp_fl_set_tun *set_tun,
set_tun->ttl = ip4_dst_hoplimit(&rt->dst); set_tun->ttl = ip4_dst_hoplimit(&rt->dst);
ip_rt_put(rt); ip_rt_put(rt);
} else { } else {
set_tun->ttl = net->ipv4.sysctl_ip_default_ttl; set_tun->ttl = READ_ONCE(net->ipv4.sysctl_ip_default_ttl);
} }
} }
......
...@@ -373,7 +373,7 @@ static inline int ip4_dst_hoplimit(const struct dst_entry *dst) ...@@ -373,7 +373,7 @@ static inline int ip4_dst_hoplimit(const struct dst_entry *dst)
struct net *net = dev_net(dst->dev); struct net *net = dev_net(dst->dev);
if (hoplimit == 0) if (hoplimit == 0)
hoplimit = net->ipv4.sysctl_ip_default_ttl; hoplimit = READ_ONCE(net->ipv4.sysctl_ip_default_ttl);
return hoplimit; return hoplimit;
} }
......
...@@ -1606,7 +1606,7 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname, ...@@ -1606,7 +1606,7 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname,
{ {
struct net *net = sock_net(sk); struct net *net = sock_net(sk);
val = (inet->uc_ttl == -1 ? val = (inet->uc_ttl == -1 ?
net->ipv4.sysctl_ip_default_ttl : READ_ONCE(net->ipv4.sysctl_ip_default_ttl) :
inet->uc_ttl); inet->uc_ttl);
break; break;
} }
......
...@@ -62,7 +62,7 @@ struct sk_buff *nf_reject_skb_v4_tcp_reset(struct net *net, ...@@ -62,7 +62,7 @@ struct sk_buff *nf_reject_skb_v4_tcp_reset(struct net *net,
skb_reserve(nskb, LL_MAX_HEADER); skb_reserve(nskb, LL_MAX_HEADER);
niph = nf_reject_iphdr_put(nskb, oldskb, IPPROTO_TCP, niph = nf_reject_iphdr_put(nskb, oldskb, IPPROTO_TCP,
net->ipv4.sysctl_ip_default_ttl); READ_ONCE(net->ipv4.sysctl_ip_default_ttl));
nf_reject_ip_tcphdr_put(nskb, oldskb, oth); nf_reject_ip_tcphdr_put(nskb, oldskb, oth);
niph->tot_len = htons(nskb->len); niph->tot_len = htons(nskb->len);
ip_send_check(niph); ip_send_check(niph);
...@@ -117,7 +117,7 @@ struct sk_buff *nf_reject_skb_v4_unreach(struct net *net, ...@@ -117,7 +117,7 @@ struct sk_buff *nf_reject_skb_v4_unreach(struct net *net,
skb_reserve(nskb, LL_MAX_HEADER); skb_reserve(nskb, LL_MAX_HEADER);
niph = nf_reject_iphdr_put(nskb, oldskb, IPPROTO_ICMP, niph = nf_reject_iphdr_put(nskb, oldskb, IPPROTO_ICMP,
net->ipv4.sysctl_ip_default_ttl); READ_ONCE(net->ipv4.sysctl_ip_default_ttl));
skb_reset_transport_header(nskb); skb_reset_transport_header(nskb);
icmph = skb_put_zero(nskb, sizeof(struct icmphdr)); icmph = skb_put_zero(nskb, sizeof(struct icmphdr));
......
...@@ -387,7 +387,7 @@ static int snmp_seq_show_ipstats(struct seq_file *seq, void *v) ...@@ -387,7 +387,7 @@ static int snmp_seq_show_ipstats(struct seq_file *seq, void *v)
seq_printf(seq, "\nIp: %d %d", seq_printf(seq, "\nIp: %d %d",
IPV4_DEVCONF_ALL(net, FORWARDING) ? 1 : 2, IPV4_DEVCONF_ALL(net, FORWARDING) ? 1 : 2,
net->ipv4.sysctl_ip_default_ttl); READ_ONCE(net->ipv4.sysctl_ip_default_ttl));
BUILD_BUG_ON(offsetof(struct ipstats_mib, mibs) != 0); BUILD_BUG_ON(offsetof(struct ipstats_mib, mibs) != 0);
snmp_get_cpu_field64_batch(buff64, snmp4_ipstats_list, snmp_get_cpu_field64_batch(buff64, snmp4_ipstats_list,
......
...@@ -405,7 +405,7 @@ synproxy_build_ip(struct net *net, struct sk_buff *skb, __be32 saddr, ...@@ -405,7 +405,7 @@ synproxy_build_ip(struct net *net, struct sk_buff *skb, __be32 saddr,
iph->tos = 0; iph->tos = 0;
iph->id = 0; iph->id = 0;
iph->frag_off = htons(IP_DF); iph->frag_off = htons(IP_DF);
iph->ttl = net->ipv4.sysctl_ip_default_ttl; iph->ttl = READ_ONCE(net->ipv4.sysctl_ip_default_ttl);
iph->protocol = IPPROTO_TCP; iph->protocol = IPPROTO_TCP;
iph->check = 0; iph->check = 0;
iph->saddr = saddr; iph->saddr = saddr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment