• Florian Westphal's avatar
    netfilter: ctnetlink: make event listener tracking global · fdf64911
    Florian Westphal authored
    pernet tracking doesn't work correctly because other netns might have
    set NETLINK_LISTEN_ALL_NSID on its event socket.
    
    In this case its expected that events originating in other net
    namespaces are also received.
    
    Making pernet-tracking work while also honoring NETLINK_LISTEN_ALL_NSID
    requires much more intrusive changes both in netlink and nfnetlink,
    f.e. adding a 'setsockopt' callback that lets nfnetlink know that the
    event socket entered (or left) ALL_NSID mode.
    
    Move to global tracking instead: if there is an event socket anywhere
    on the system, all net namespaces which have conntrack enabled and
    use autobind mode will allocate the ecache extension.
    
    netlink_has_listeners() returns false only if the given group has no
    subscribers in any net namespace, the 'net' argument passed to
    nfnetlink_has_listeners is only used to derive the protocol (nfnetlink),
    it has no other effect.
    
    For proper NETLINK_LISTEN_ALL_NSID-aware pernet tracking of event
    listeners a new netlink_has_net_listeners() is also needed.
    
    Fixes: 90d1daa4 ("netfilter: conntrack: add nf_conntrack_events autodetect mode")
    Reported-by: default avatarBryce Kahle <bryce.kahle@datadoghq.com>
    Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    fdf64911
nfnetlink.c 19.2 KB