diff options
| author | Anders K. Pedersen <akp@cohaesio.com> | 2016-11-20 11:38:47 -0500 |
|---|---|---|
| committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2016-11-24 08:43:34 -0500 |
| commit | d3e2a1110cae6ee5eeb1f9a97addf03e974f12e6 (patch) | |
| tree | 81cbe225d30cc88bb084a810a1d7d98f7026ac3a /include/net | |
| parent | 7223ecd4669921cb2a709193521967aaa2b06862 (diff) | |
netfilter: nf_tables: fix inconsistent element expiration calculation
As Liping Zhang reports, after commit a8b1e36d0d1d ("netfilter: nft_dynset:
fix element timeout for HZ != 1000"), priv->timeout was stored in jiffies,
while set->timeout was stored in milliseconds. This is inconsistent and
incorrect.
Firstly, we already call msecs_to_jiffies in nft_set_elem_init, so
priv->timeout will be converted to jiffies twice.
Secondly, if the user did not specify the NFTA_DYNSET_TIMEOUT attr,
set->timeout will be used, but we forget to call msecs_to_jiffies
when do update elements.
Fix this by using jiffies internally for traditional sets and doing the
conversions to/from msec when interacting with userspace - as dynset
already does.
This is preferable to doing the conversions, when elements are inserted or
updated, because this can happen very frequently on busy dynsets.
Fixes: a8b1e36d0d1d ("netfilter: nft_dynset: fix element timeout for HZ != 1000")
Reported-by: Liping Zhang <zlpnobody@gmail.com>
Signed-off-by: Anders K. Pedersen <akp@cohaesio.com>
Acked-by: Liping Zhang <zlpnobody@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'include/net')
| -rw-r--r-- | include/net/netfilter/nf_tables.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/net/netfilter/nf_tables.h b/include/net/netfilter/nf_tables.h index d79d1e9b9546..b02af0bf5777 100644 --- a/include/net/netfilter/nf_tables.h +++ b/include/net/netfilter/nf_tables.h | |||
| @@ -313,7 +313,7 @@ void nft_unregister_set(struct nft_set_ops *ops); | |||
| 313 | * @size: maximum set size | 313 | * @size: maximum set size |
| 314 | * @nelems: number of elements | 314 | * @nelems: number of elements |
| 315 | * @ndeact: number of deactivated elements queued for removal | 315 | * @ndeact: number of deactivated elements queued for removal |
| 316 | * @timeout: default timeout value in msecs | 316 | * @timeout: default timeout value in jiffies |
| 317 | * @gc_int: garbage collection interval in msecs | 317 | * @gc_int: garbage collection interval in msecs |
| 318 | * @policy: set parameterization (see enum nft_set_policies) | 318 | * @policy: set parameterization (see enum nft_set_policies) |
| 319 | * @udlen: user data length | 319 | * @udlen: user data length |
