All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] netlink: Add netns check on taps
@ 2017-12-05 22:46 Kevin Cernekee
  2017-12-06  2:19 ` David Ahern
  2017-12-06 19:40 ` David Miller
  0 siblings, 2 replies; 5+ messages in thread
From: Kevin Cernekee @ 2017-12-05 22:46 UTC (permalink / raw)
  To: davem; +Cc: johannes.berg, netdev, linux-kernel

Currently, a nlmon link inside a child namespace can observe systemwide
netlink activity.  Filter the traffic so that in a non-init netns,
nlmon can only sniff netlink messages from its own netns.

Test case:

    vpnns -- bash -c "ip link add nlmon0 type nlmon; \
                      ip link set nlmon0 up; \
                      tcpdump -i nlmon0 -q -w /tmp/nlmon.pcap -U" &
    sudo ip xfrm state add src 10.1.1.1 dst 10.1.1.2 proto esp \
        spi 0x1 mode transport \
        auth sha1 0x6162633132330000000000000000000000000000 \
        enc aes 0x00000000000000000000000000000000
    grep abc123 /tmp/nlmon.pcap

Signed-off-by: Kevin Cernekee <cernekee@chromium.org>
---
 net/netlink/af_netlink.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index b9e0ee4..88381a2 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -253,6 +253,11 @@ static int __netlink_deliver_tap_skb(struct sk_buff *skb,
 	struct sock *sk = skb->sk;
 	int ret = -ENOMEM;
 
+	if (!net_eq(dev_net(dev), sock_net(sk)) &&
+	    !net_eq(dev_net(dev), &init_net)) {
+		return 0;
+	}
+
 	dev_hold(dev);
 
 	if (is_vmalloc_addr(skb->head))
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] netlink: Add netns check on taps
  2017-12-05 22:46 [PATCH] netlink: Add netns check on taps Kevin Cernekee
@ 2017-12-06  2:19 ` David Ahern
  2017-12-06  3:14   ` Kevin Cernekee
  2017-12-06 19:40 ` David Miller
  1 sibling, 1 reply; 5+ messages in thread
From: David Ahern @ 2017-12-06  2:19 UTC (permalink / raw)
  To: Kevin Cernekee, davem; +Cc: johannes.berg, netdev, linux-kernel

On 12/5/17 3:46 PM, Kevin Cernekee wrote:
> Currently, a nlmon link inside a child namespace can observe systemwide
> netlink activity.  Filter the traffic so that in a non-init netns,
> nlmon can only sniff netlink messages from its own netns.
> 
> Test case:
> 
>     vpnns -- bash -c "ip link add nlmon0 type nlmon; \
>                       ip link set nlmon0 up; \
>                       tcpdump -i nlmon0 -q -w /tmp/nlmon.pcap -U" &
>     sudo ip xfrm state add src 10.1.1.1 dst 10.1.1.2 proto esp \
>         spi 0x1 mode transport \
>         auth sha1 0x6162633132330000000000000000000000000000 \
>         enc aes 0x00000000000000000000000000000000
>     grep abc123 /tmp/nlmon.pcap
> 
> Signed-off-by: Kevin Cernekee <cernekee@chromium.org>
> ---
>  net/netlink/af_netlink.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
> index b9e0ee4..88381a2 100644
> --- a/net/netlink/af_netlink.c
> +++ b/net/netlink/af_netlink.c
> @@ -253,6 +253,11 @@ static int __netlink_deliver_tap_skb(struct sk_buff *skb,
>  	struct sock *sk = skb->sk;
>  	int ret = -ENOMEM;
>  
> +	if (!net_eq(dev_net(dev), sock_net(sk)) &&
> +	    !net_eq(dev_net(dev), &init_net)) {

Why is init_net special? Seems like snooping should be limited to the
namespace you are in.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] netlink: Add netns check on taps
  2017-12-06  2:19 ` David Ahern
@ 2017-12-06  3:14   ` Kevin Cernekee
  0 siblings, 0 replies; 5+ messages in thread
From: Kevin Cernekee @ 2017-12-06  3:14 UTC (permalink / raw)
  To: David Ahern; +Cc: davem, Berg, Johannes, netdev, linux-kernel

On Tue, Dec 5, 2017 at 6:19 PM, David Ahern <dsahern@gmail.com> wrote:
>> +     if (!net_eq(dev_net(dev), sock_net(sk)) &&
>> +         !net_eq(dev_net(dev), &init_net)) {
>
> Why is init_net special? Seems like snooping should be limited to the
> namespace you are in.

Depends how important it is to preserve the current "typical use case"
behavior, where the root user in the init netns can see all netlink
traffic on the system.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] netlink: Add netns check on taps
  2017-12-05 22:46 [PATCH] netlink: Add netns check on taps Kevin Cernekee
  2017-12-06  2:19 ` David Ahern
@ 2017-12-06 19:40 ` David Miller
  2017-12-06 20:51   ` Daniel Borkmann
  1 sibling, 1 reply; 5+ messages in thread
From: David Miller @ 2017-12-06 19:40 UTC (permalink / raw)
  To: cernekee; +Cc: johannes.berg, netdev, linux-kernel, daniel

From: Kevin Cernekee <cernekee@chromium.org>
Date: Tue,  5 Dec 2017 14:46:22 -0800

> Currently, a nlmon link inside a child namespace can observe systemwide
> netlink activity.  Filter the traffic so that in a non-init netns,
> nlmon can only sniff netlink messages from its own netns.
> 
> Test case:
> 
>     vpnns -- bash -c "ip link add nlmon0 type nlmon; \
>                       ip link set nlmon0 up; \
>                       tcpdump -i nlmon0 -q -w /tmp/nlmon.pcap -U" &
>     sudo ip xfrm state add src 10.1.1.1 dst 10.1.1.2 proto esp \
>         spi 0x1 mode transport \
>         auth sha1 0x6162633132330000000000000000000000000000 \
>         enc aes 0x00000000000000000000000000000000
>     grep abc123 /tmp/nlmon.pcap
> 
> Signed-off-by: Kevin Cernekee <cernekee@chromium.org>

Daniel, what behavior did you intend this to have?

Taps can see their own namespace only, or init_net is special
and can see all netlink activity.

I think letting init_net see everything could be confusing,
because there is no way to distinguish netlink events by
namespace just by looking at the messages that arrive at
the tap right?

So maybe own-namespace-only is the way to go.

Thanks.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] netlink: Add netns check on taps
  2017-12-06 19:40 ` David Miller
@ 2017-12-06 20:51   ` Daniel Borkmann
  0 siblings, 0 replies; 5+ messages in thread
From: Daniel Borkmann @ 2017-12-06 20:51 UTC (permalink / raw)
  To: David Miller, cernekee; +Cc: johannes.berg, netdev, linux-kernel

On 12/06/2017 08:40 PM, David Miller wrote:
> From: Kevin Cernekee <cernekee@chromium.org>
> Date: Tue,  5 Dec 2017 14:46:22 -0800
> 
>> Currently, a nlmon link inside a child namespace can observe systemwide
>> netlink activity.  Filter the traffic so that in a non-init netns,
>> nlmon can only sniff netlink messages from its own netns.
>>
>> Test case:
>>
>>     vpnns -- bash -c "ip link add nlmon0 type nlmon; \
>>                       ip link set nlmon0 up; \
>>                       tcpdump -i nlmon0 -q -w /tmp/nlmon.pcap -U" &
>>     sudo ip xfrm state add src 10.1.1.1 dst 10.1.1.2 proto esp \
>>         spi 0x1 mode transport \
>>         auth sha1 0x6162633132330000000000000000000000000000 \
>>         enc aes 0x00000000000000000000000000000000
>>     grep abc123 /tmp/nlmon.pcap
>>
>> Signed-off-by: Kevin Cernekee <cernekee@chromium.org>
> 
> Daniel, what behavior did you intend this to have?
> 
> Taps can see their own namespace only, or init_net is special
> and can see all netlink activity.
> 
> I think letting init_net see everything could be confusing,
> because there is no way to distinguish netlink events by
> namespace just by looking at the messages that arrive at
> the tap right?

Yeah, only snooping from own netns makes sense, lets limit
it to this.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-12-06 20:51 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-05 22:46 [PATCH] netlink: Add netns check on taps Kevin Cernekee
2017-12-06  2:19 ` David Ahern
2017-12-06  3:14   ` Kevin Cernekee
2017-12-06 19:40 ` David Miller
2017-12-06 20:51   ` Daniel Borkmann

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.