netfilter: nf_tables: rework ct timeout set support
authorFlorian Westphal <fw@strlen.de>
Fri, 24 Aug 2018 06:43:36 +0000 (08:43 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 29 Aug 2018 11:04:38 +0000 (13:04 +0200)
commit0434ccdcf883e53ec7156a6843943e940dc1feb8
tree2095369764120c3f736956a4b190f4b62f09a27c
parentef39078d6342deaddacdd550c4197421bd83fb76
netfilter: nf_tables: rework ct timeout set support

Using a private template is problematic:

1. We can't assign both a zone and a timeout policy
   (zone assigns a conntrack template, so we hit problem 1)
2. Using a template needs to take care of ct refcount, else we'll
   eventually free the private template due to ->use underflow.

This patch reworks template policy to instead work with existing conntrack.

As long as such conntrack has not yet been placed into the hash table
(unconfirmed) we can still add the timeout extension.

The only caveat is that we now need to update/correct ct->timeout to
reflect the initial/new state, otherwise the conntrack entry retains the
default 'new' timeout.

Side effect of this change is that setting the policy must
now occur from chains that are evaluated *after* the conntrack lookup
has taken place.

No released kernel contains the timeout policy feature yet, so this change
should be ok.

Changes since v2:
 - don't handle 'ct is confirmed case'
 - after previous patch, no need to special-case tcp/dccp/sctp timeout
   anymore

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/net/netfilter/nf_conntrack_timeout.h
net/netfilter/nft_ct.c