• Liping Zhang's avatar
    netfilter: nft_dynset: continue to next expr if _OP_ADD succeeded · 277a2928
    Liping Zhang authored
    Currently, after adding the following nft rules:
      # nft add set x target1 { type ipv4_addr \; flags timeout \;}
      # nft add rule x y set add ip daddr timeout 1d @target1 counter
    
    the counters will always be zero despite of the elements are added
    to the dynamic set "target1" or not, as we will break the nft expr
    traversal unconditionally:
      # nft list ruleset
      ...
      set target1 {
          ...
          elements = { 8.8.8.8 expires 23h59m53s}
      }
      chain output {
          ...
          set add ip daddr timeout 1d @target1 counter packets 0 bytes 0
                                                               ^       ^
          ...
      }
    
    Since we add the elements to the set successfully, we should continue
    to the next expression.
    
    Additionally, if elements are added to "flow table" successfully, we
    will _always_ continue to the next expr, even if the operation is
    _OP_ADD. So it's better to keep them to be consistent.
    
    Fixes: 22fe54d5 ("netfilter: nf_tables: add support for dynamic set updates")
    Reported-by: default avatarRobert White <rwhite@pobox.com>
    Signed-off-by: default avatarLiping Zhang <zlpnobody@gmail.com>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    277a2928
nft_dynset.c 7.44 KB