diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2015-10-09 13:44:53 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-10-12 19:44:14 -0700 |
commit | 37fcbab61b8ecf75cb5fd81e5809b71c270f9632 (patch) | |
tree | 45f0b17eec491c1f35adff81aa1d1b07c4a7ea48 | |
parent | 161642e24fee40fba2c5bc2ceacc00d118a22d65 (diff) | |
download | op-kernel-dev-37fcbab61b8ecf75cb5fd81e5809b71c270f9632.zip op-kernel-dev-37fcbab61b8ecf75cb5fd81e5809b71c270f9632.tar.gz |
ipv4: Only compute net once in ip_call_ra_chain
ip_call_ra_chain is called early in the forwarding chain from
ip_forward and ip_mr_input, which makes skb->dev the correct
expression to get the input network device and dev_net(skb->dev) a
correct expression for the network namespace the packet is being
processed in.
Compute the network namespace and store it in a variable to make the
code clearer.
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/ipv4/ip_input.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c index 7cc9f7b..804b86f 100644 --- a/net/ipv4/ip_input.c +++ b/net/ipv4/ip_input.c @@ -157,6 +157,7 @@ bool ip_call_ra_chain(struct sk_buff *skb) u8 protocol = ip_hdr(skb)->protocol; struct sock *last = NULL; struct net_device *dev = skb->dev; + struct net *net = dev_net(dev); for (ra = rcu_dereference(ip_ra_chain); ra; ra = rcu_dereference(ra->next)) { struct sock *sk = ra->sk; @@ -167,7 +168,7 @@ bool ip_call_ra_chain(struct sk_buff *skb) if (sk && inet_sk(sk)->inet_num == protocol && (!sk->sk_bound_dev_if || sk->sk_bound_dev_if == dev->ifindex) && - net_eq(sock_net(sk), dev_net(dev))) { + net_eq(sock_net(sk), net)) { if (ip_is_fragment(ip_hdr(skb))) { if (ip_defrag(skb, IP_DEFRAG_CALL_RA_CHAIN)) return true; |