• Florian Westphal's avatar
    netfilter: ctnetlink: disable helper autoassign · d1ca60ef
    Florian Westphal authored
    When userspace, e.g. conntrackd, inserts an entry with a specified helper,
    its possible that the helper is lost immediately after its added:
    
    ctnetlink_create_conntrack
      -> nf_ct_helper_ext_add + assign helper
        -> ctnetlink_setup_nat
          -> ctnetlink_parse_nat_setup
             -> parse_nat_setup -> nfnetlink_parse_nat_setup
    	                       -> nf_nat_setup_info
                                     -> nf_conntrack_alter_reply
                                       -> __nf_ct_try_assign_helper
    
    ... and __nf_ct_try_assign_helper will zero the helper again.
    
    Set IPS_HELPER bit to bypass auto-assign logic, its unwanted, just like
    when helper is assigned via ruleset.
    
    Dropped old 'not strictly necessary' comment, it referred to use of
    rcu_assign_pointer() before it got replaced by RCU_INIT_POINTER().
    
    NB: Fixes tag intentionally incorrect, this extends the referenced commit,
    but this change won't build without IPS_HELPER introduced there.
    
    Fixes: 6714cf54 ("netfilter: nf_conntrack: fix explicit helper attachment and NAT")
    Reported-by: default avatarPham Thanh Tuyen <phamtyn@gmail.com>
    Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    d1ca60ef
nf_conntrack_netlink.c 94.3 KB