1. 19 Jun, 2017 9 commits
    • Pablo Neira Ayuso's avatar
      netfilter: nfnetlink: extended ACK reporting · 04ba724b
      Pablo Neira Ayuso authored
      Pass down struct netlink_ext_ack as parameter to all of our nfnetlink
      subsystem callbacks, so we can work on follow up patches to provide
      finer grain error reporting using the new infrastructure that
      2d4bc933 ("netlink: extended ACK reporting") provides.
      
      No functional change, just pass down this new object to callbacks.
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      04ba724b
    • Florian Westphal's avatar
      netfilter: nf_tables: reduce chain type table size · d8297d4f
      Florian Westphal authored
      text  data  bss     dec    hex filename
      old: 151590  2240 1152  154982  25d66 net/netfilter/nf_tables_api.o
      new: 151666  2240  416  154322  25ad2 net/netfilter/nf_tables_api.o
      Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      d8297d4f
    • Florian Westphal's avatar
      netfilter: conntrack: use NFPROTO_MAX to size array · b7b5fda4
      Florian Westphal authored
      We don't support anything larger than NFPROTO_MAX, so we can shrink this a bit:
      
           text data  dec  hex filename
      old: 8259 1096 9355 248b net/netfilter/nf_conntrack_proto.o
      new: 8259  624 8883 22b3 net/netfilter/nf_conntrack_proto.o
      Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      b7b5fda4
    • Liping Zhang's avatar
      netfilter: use nf_conntrack_helpers_register when possible · d53e3fc3
      Liping Zhang authored
      amanda_helper, nf_conntrack_helper_ras and nf_conntrack_helper_q931 are
      all arrays, so we can use nf_conntrack_helpers_register to register
      the ct helper, this will help us to eliminate some "goto errX"
      statements.
      
      Also introduce h323_helper_init/exit helper function to register the ct
      helpers, this is prepared for the followup patch, which will add net
      namespace support for ct helper.
      Signed-off-by: default avatarLiping Zhang <zlpnobody@gmail.com>
      Acked-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      d53e3fc3
    • Jike Song's avatar
      netfilter, kbuild: use canonical method to specify objs. · 2becbbc5
      Jike Song authored
      Should use ":=" instead of "+=".
      Signed-off-by: default avatarJike Song <jike.song@intel.com>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      2becbbc5
    • Gao Feng's avatar
      netfilter: ebt: Use new helper ebt_invalid_target to check target · e15b9c50
      Gao Feng authored
      Use the new helper function ebt_invalid_target instead of the old
      macro INVALID_TARGET and other duplicated codes to enhance the readability.
      Signed-off-by: default avatarGao Feng <gfree.wind@vip.163.com>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      e15b9c50
    • Florian Westphal's avatar
      netns: add and use net_ns_barrier · 7866cc57
      Florian Westphal authored
      Quoting Joe Stringer:
        If a user loads nf_conntrack_ftp, sends FTP traffic through a network
        namespace, destroys that namespace then unloads the FTP helper module,
        then the kernel will crash.
      
      Events that lead to the crash:
      1. conntrack is created with ftp helper in netns x
      2. This netns is destroyed
      3. netns destruction is scheduled
      4. netns destruction wq starts, removes netns from global list
      5. ftp helper is unloaded, which resets all helpers of the conntracks
      via for_each_net()
      
      but because netns is already gone from list the for_each_net() loop
      doesn't include it, therefore all of these conntracks are unaffected.
      
      6. helper module unload finishes
      7. netns wq invokes destructor for rmmod'ed helper
      
      CC: "Eric W. Biederman" <ebiederm@xmission.com>
      Reported-by: default avatarJoe Stringer <joe@ovn.org>
      Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
      Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
      Acked-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      7866cc57
    • Florian Westphal's avatar
      netfilter: move table iteration out of netns exit paths · 2c41f33c
      Florian Westphal authored
      We only need to iterate & remove in case of module removal;
      for netns destruction all conntracks will be removed anyway.
      Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      2c41f33c
    • Xin Long's avatar
      netfilter: ipt_CLUSTERIP: do not hold dev · 202f59af
      Xin Long authored
      It's a terrible thing to hold dev in iptables target. When the dev is
      being removed, unregister_netdevice has to wait for the dev to become
      free. dmesg will keep logging the err:
      
        kernel:unregister_netdevice: waiting for veth0_in to become free. \
        Usage count = 1
      
      until iptables rules with this target are removed manually.
      
      The worse thing is when deleting a netns, a virtual nic will be deleted
      instead of reset to init_net in default_device_ops exit/exit_batch. As
      it is earlier than to flush the iptables rules in iptable_filter_net_ops
      exit, unregister_netdevice will block to wait for the nic to become free.
      
      As unregister_netdevice is actually waiting for iptables rules flushing
      while iptables rules have to be flushed after unregister_netdevice. This
      'dead lock' will cause unregister_netdevice to block there forever. As
      the netns is not available to operate at that moment, iptables rules can
      not even be flushed manually either.
      
      The reproducer can be:
      
        # ip netns add test
        # ip link add veth0_in type veth peer name veth0_out
        # ip link set veth0_in netns test
        # ip netns exec test ip link set lo up
        # ip netns exec test ip link set veth0_in up
        # ip netns exec test iptables -I INPUT -d 1.2.3.4 -i veth0_in -j \
          CLUSTERIP --new --clustermac 89:d4:47:eb:9a:fa --total-nodes 3 \
          --local-node 1 --hashmode sourceip-sourceport
        # ip netns del test
      
      This issue can be triggered by all virtual nics with ipt_CLUSTERIP.
      
      This patch is to fix it by not holding dev in ipt_CLUSTERIP, but saving
      the dev->ifindex instead of the dev.
      
      As Pablo Neira Ayuso's suggestion, it will refresh c->ifindex and dev's
      mc by registering a netdevice notifier, just as what xt_TEE does. So it
      removes the old codes updating dev's mc, and also no need to initialize
      c->ifindex with dev->ifindex.
      
      But as one config can be shared by more than one targets, and the netdev
      notifier is per config, not per target. It couldn't get e->ip.iniface
      in the notifier handler. So e->ip.iniface has to be saved into config.
      
      Note that for backwards compatibility, this patch doesn't remove the
      codes checking if the dev exists before creating a config.
      
      v1->v2:
        - As Pablo Neira Ayuso's suggestion, register a netdevice notifier to
          manage c->ifindex and dev's mc.
      Reported-by: default avatarJianlin Shi <jishi@redhat.com>
      Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      202f59af
  2. 29 May, 2017 20 commits
  3. 23 May, 2017 10 commits
  4. 22 May, 2017 1 commit