Message ID | 20190228190146.802CD95C016B@us180.sjc.aristanetworks.com |
---|---|
State | Deferred |
Delegated to: | David Miller |
Headers | show |
Series | net: ipv6: check net in ip6_call_ra_chain | expand |
From: fruggeri@arista.com (Francesco Ruggeri) Date: Thu, 28 Feb 2019 11:01:46 -0800 > ip6_call_ra_chain is called when IPv6 packet with Router Alert option > is forwarded. > It needs to check if the net of the socket is the same as the net of the > input device, otherwise the packet gets delivered to every IPv6 socket > listening for Router Alerts, no matter which network namespace it is in. > > Suggested-by: Maxim Martynov <maxim@arista.com> > Signed-off-by: Maxim Martynov <maxim@arista.com> > Signed-off-by: Francesco Ruggeri <fruggeri@arista.com> Right now someone using such a tool does get all RAs in the system. Your change not only breaks them, but also gives them no method by which to keep obtaining the same behavior. I don't know what to do or suggest in this situation, but right now I'm putting this patch on hold.
On 2/28/19 2:02 PM, David Miller wrote: > From: fruggeri@arista.com (Francesco Ruggeri) > Date: Thu, 28 Feb 2019 11:01:46 -0800 > >> ip6_call_ra_chain is called when IPv6 packet with Router Alert option >> is forwarded. >> It needs to check if the net of the socket is the same as the net of the >> input device, otherwise the packet gets delivered to every IPv6 socket >> listening for Router Alerts, no matter which network namespace it is in. >> >> Suggested-by: Maxim Martynov <maxim@arista.com> >> Signed-off-by: Maxim Martynov <maxim@arista.com> >> Signed-off-by: Francesco Ruggeri <fruggeri@arista.com> > > Right now someone using such a tool does get all RAs in the system. > > Your change not only breaks them, but also gives them no method by > which to keep obtaining the same behavior. > > I don't know what to do or suggest in this situation, but right now > I'm putting this patch on hold. > need an equivalent to NETLINK_LISTEN_ALL_NSID
On Thu, Feb 28, 2019 at 3:31 PM David Ahern <dsahern@gmail.com> wrote: > > On 2/28/19 2:02 PM, David Miller wrote: > > From: fruggeri@arista.com (Francesco Ruggeri) > > Date: Thu, 28 Feb 2019 11:01:46 -0800 > > > >> ip6_call_ra_chain is called when IPv6 packet with Router Alert option > >> is forwarded. > >> It needs to check if the net of the socket is the same as the net of the > >> input device, otherwise the packet gets delivered to every IPv6 socket > >> listening for Router Alerts, no matter which network namespace it is in. > >> > >> Suggested-by: Maxim Martynov <maxim@arista.com> > >> Signed-off-by: Maxim Martynov <maxim@arista.com> > >> Signed-off-by: Francesco Ruggeri <fruggeri@arista.com> > > > > Right now someone using such a tool does get all RAs in the system. > > > > Your change not only breaks them, but also gives them no method by > > which to keep obtaining the same behavior. > > > > I don't know what to do or suggest in this situation, but right now > > I'm putting this patch on hold. > > > > need an equivalent to NETLINK_LISTEN_ALL_NSID If that would be acceptable, we can look into it. Thanks, Francesco
From: Francesco Ruggeri <fruggeri@arista.com> Date: Thu, 28 Feb 2019 16:09:17 -0800 > On Thu, Feb 28, 2019 at 3:31 PM David Ahern <dsahern@gmail.com> wrote: >> >> On 2/28/19 2:02 PM, David Miller wrote: >> > From: fruggeri@arista.com (Francesco Ruggeri) >> > Date: Thu, 28 Feb 2019 11:01:46 -0800 >> > >> >> ip6_call_ra_chain is called when IPv6 packet with Router Alert option >> >> is forwarded. >> >> It needs to check if the net of the socket is the same as the net of the >> >> input device, otherwise the packet gets delivered to every IPv6 socket >> >> listening for Router Alerts, no matter which network namespace it is in. >> >> >> >> Suggested-by: Maxim Martynov <maxim@arista.com> >> >> Signed-off-by: Maxim Martynov <maxim@arista.com> >> >> Signed-off-by: Francesco Ruggeri <fruggeri@arista.com> >> > >> > Right now someone using such a tool does get all RAs in the system. >> > >> > Your change not only breaks them, but also gives them no method by >> > which to keep obtaining the same behavior. >> > >> > I don't know what to do or suggest in this situation, but right now >> > I'm putting this patch on hold. >> > >> >> need an equivalent to NETLINK_LISTEN_ALL_NSID > > If that would be acceptable, we can look into it. It is.
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 5f9fa0302b5a..3ed25e17dff3 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c @@ -299,7 +299,8 @@ static int ip6_call_ra_chain(struct sk_buff *skb, int sel) struct sock *sk = ra->sk; if (sk && ra->sel == sel && (!sk->sk_bound_dev_if || - sk->sk_bound_dev_if == skb->dev->ifindex)) { + sk->sk_bound_dev_if == skb->dev->ifindex) && + net_eq(sock_net(sk), dev_net(skb->dev))) { if (last) { struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC); if (skb2)