1. 17 Jun, 2019 7 commits
    • Fernando Fernandez Mancera's avatar
      netfilter: synproxy: add common uapi for SYNPROXY infrastructure · 5fcc88ec
      Fernando Fernandez Mancera authored
      This new UAPI file is going to be used by the xt and nft common SYNPROXY
      infrastructure. It is needed to avoid duplicated code.
      Signed-off-by: default avatarFernando Fernandez Mancera <ffmancera@riseup.net>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      5fcc88ec
    • Pablo Neira Ayuso's avatar
      Merge branch 'master' of git://blackhole.kfki.hu/nf-next · 667ec21e
      Pablo Neira Ayuso authored
      Jozsef Kadlecsik says:
      
      ====================
      ipset patches for nf-next
      
      - Remove useless memset() calls, nla_parse_nested/nla_parse
        erase the tb array properly, from Florent Fourcot.
      - Merge the uadd and udel functions, the code is nicer
        this way, also from Florent Fourcot.
      - Add a missing check for the return value of a
        nla_parse[_deprecated] call, from Aditya Pakki.
      - Add the last missing check for the return value
        of nla_parse[_deprecated] call.
      - Fix error path and release the references properly
        in set_target_v3_checkentry().
      - Fix memory accounting which is reported to userspace
        for hash types on resize, from Stefano Brivio.
      - Update my email address to kadlec@netfilter.org.
        The patch covers all places in the source tree where
        my kadlec@blackhole.kfki.hu address could be found.
      ====================
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      667ec21e
    • Christian Brauner's avatar
      netfilter: bridge: namespace bridge netfilter sysctls · 22567590
      Christian Brauner authored
      Currently, the /proc/sys/net/bridge folder is only created in the initial
      network namespace. This patch ensures that the /proc/sys/net/bridge folder
      is available in each network namespace if the module is loaded and
      disappears from all network namespaces when the module is unloaded.
      
      In doing so the patch makes the sysctls:
      
      bridge-nf-call-arptables
      bridge-nf-call-ip6tables
      bridge-nf-call-iptables
      bridge-nf-filter-pppoe-tagged
      bridge-nf-filter-vlan-tagged
      bridge-nf-pass-vlan-input-dev
      
      apply per network namespace. This unblocks some use-cases where users would
      like to e.g. not do bridge filtering for bridges in a specific network
      namespace while doing so for bridges located in another network namespace.
      
      The netfilter rules are afaict already per network namespace so it should
      be safe for users to specify whether bridge devices inside a network
      namespace are supposed to go through iptables et al. or not. Also, this can
      already be done per-bridge by setting an option for each individual bridge
      via Netlink. It should also be possible to do this for all bridges in a
      network namespace via sysctls.
      
      Cc: Tyler Hicks <tyhicks@canonical.com>
      Signed-off-by: default avatarChristian Brauner <christian.brauner@ubuntu.com>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      22567590
    • Christian Brauner's avatar
      netfilter: bridge: port sysctls to use brnf_net · ff6d090d
      Christian Brauner authored
      This ports the sysctls to use struct brnf_net.
      
      With this patch we make it possible to namespace the br_netfilter module in
      the following patch.
      Signed-off-by: default avatarChristian Brauner <christian.brauner@ubuntu.com>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      ff6d090d
    • Pablo Neira Ayuso's avatar
      netfilter: xt_owner: bail out with EINVAL in case of unsupported flags · 9911c113
      Pablo Neira Ayuso authored
      Reject flags that are not supported with EINVAL.
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      9911c113
    • Florian Westphal's avatar
      netfilter: conntrack: small conntrack lookup optimization · 87e389b4
      Florian Westphal authored
      ____nf_conntrack_find() performs checks on the conntrack objects in
      this order:
      
      1. if (nf_ct_is_expired(ct))
      
      This fetches ct->timeout, in third cache line.
      
      The hnnode that is used to store the list pointers resides in the first
      (origin) or second (reply tuple) cache lines.
      
      This test rarely passes, but its necessary to reap obsolete entries.
      
      2. if (nf_ct_is_dying(ct))
      
      This fetches ct->status, also in third cache line.
      
      The test is useless, and can be removed:
        Consider:
           cpu0                                           cpu1
          ct = ____nf_conntrack_find()
          atomic_inc_not_zero(ct) -> ok
          nf_ct_key_equal -> ok
          is_dying -> DYING bit not set, ok
                                                          set_bit(ct, DYING);
      						    ... unhash ... etc.
          return ct
          -> returning a ct with dying bit set, despite
          having a test for it.
      
      This (unlikely) case is fine - refcount prevents ct from getting free'd.
      
      3. if (nf_ct_key_equal(h, tuple, zone, net))
      
      nf_ct_key_equal checks in following order:
      
      1. Tuple equal (first or second cacheline)
      2. Zone equal (third cacheline)
      3. confirmed bit set (->status, third cacheline)
      4. net namespace match (third cacheline).
      
      Swapping "timeout" and "cpu" places timeout in the first cacheline.
      This has two advantages:
      
      1. For a conntrack that won't even match the original tuple,
         we will now only fetch the first and maybe the second cacheline
         instead of always accessing the 3rd one as well.
      
      2.  in case of TCP ct->timeout changes frequently because we
          reduce/increase it when there are packets outstanding in the network.
      
      The first cacheline contains both the reference count and the ct spinlock,
      i.e. moving timeout there avoids writes to 3rd cacheline.
      
      The restart sequence in __nf_conntrack_find() is removed, if we found a
      candidate, but then fail to increment the refcount or discover the tuple
      has changed (object recycling), just pretend we did not find an entry.
      
      A second lookup won't find anything until another CPU adds a new conntrack
      with identical tuple into the hash table, which is very unlikely.
      
      We have the confirmation-time checks (when we hold hash lock) that deal
      with identical entries and even perform clash resolution in some cases.
      Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      87e389b4
    • Stéphane Veyret's avatar
      netfilter: nft_ct: add ct expectations support · 857b4602
      Stéphane Veyret authored
      This patch allows to add, list and delete expectations via nft objref
      infrastructure and assigning these expectations via nft rule.
      
      This allows manual port triggering when no helper is defined to manage a
      specific protocol. For example, if I have an online game which protocol
      is based on initial connection to TCP port 9753 of the server, and where
      the server opens a connection to port 9876, I can set rules as follow:
      
      table ip filter {
          ct expectation mygame {
              protocol udp;
              dport 9876;
              timeout 2m;
              size 1;
          }
      
          chain input {
              type filter hook input priority 0; policy drop;
              tcp dport 9753 ct expectation set "mygame";
          }
      
          chain output {
              type filter hook output priority 0; policy drop;
              udp dport 9876 ct status expected accept;
          }
      }
      Signed-off-by: default avatarStéphane Veyret <sveyret@gmail.com>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      857b4602
  2. 10 Jun, 2019 7 commits
  3. 06 Jun, 2019 9 commits
  4. 05 Jun, 2019 17 commits