Commit 4c90bba6 authored by Pablo Neira Ayuso's avatar Pablo Neira Ayuso Committed by Florian Westphal

netfilter: nf_tables: do not refresh timeout when resetting element

The dump and reset command should not refresh the timeout, this command
is intended to allow users to list existing stateful objects and reset
them, element expiration should be refresh via transaction instead with
a specific command to achieve this, otherwise this is entering combo
semantics that will be hard to be undone later (eg. a user asking to
retrieve counters but _not_ requiring to refresh expiration).

Fixes: 079cd633 ("netfilter: nf_tables: Introduce NFT_MSG_GETSETELEM_RESET")
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
parent d51c42cd
...@@ -5556,7 +5556,6 @@ static int nf_tables_fill_setelem(struct sk_buff *skb, ...@@ -5556,7 +5556,6 @@ static int nf_tables_fill_setelem(struct sk_buff *skb,
const struct nft_set_ext *ext = nft_set_elem_ext(set, elem->priv); const struct nft_set_ext *ext = nft_set_elem_ext(set, elem->priv);
unsigned char *b = skb_tail_pointer(skb); unsigned char *b = skb_tail_pointer(skb);
struct nlattr *nest; struct nlattr *nest;
u64 timeout = 0;
nest = nla_nest_start_noflag(skb, NFTA_LIST_ELEM); nest = nla_nest_start_noflag(skb, NFTA_LIST_ELEM);
if (nest == NULL) if (nest == NULL)
...@@ -5592,15 +5591,11 @@ static int nf_tables_fill_setelem(struct sk_buff *skb, ...@@ -5592,15 +5591,11 @@ static int nf_tables_fill_setelem(struct sk_buff *skb,
htonl(*nft_set_ext_flags(ext)))) htonl(*nft_set_ext_flags(ext))))
goto nla_put_failure; goto nla_put_failure;
if (nft_set_ext_exists(ext, NFT_SET_EXT_TIMEOUT)) { if (nft_set_ext_exists(ext, NFT_SET_EXT_TIMEOUT) &&
timeout = *nft_set_ext_timeout(ext); nla_put_be64(skb, NFTA_SET_ELEM_TIMEOUT,
if (nla_put_be64(skb, NFTA_SET_ELEM_TIMEOUT, nf_jiffies64_to_msecs(*nft_set_ext_timeout(ext)),
nf_jiffies64_to_msecs(timeout), NFTA_SET_ELEM_PAD))
NFTA_SET_ELEM_PAD)) goto nla_put_failure;
goto nla_put_failure;
} else if (set->flags & NFT_SET_TIMEOUT) {
timeout = READ_ONCE(set->timeout);
}
if (nft_set_ext_exists(ext, NFT_SET_EXT_EXPIRATION)) { if (nft_set_ext_exists(ext, NFT_SET_EXT_EXPIRATION)) {
u64 expires, now = get_jiffies_64(); u64 expires, now = get_jiffies_64();
...@@ -5615,9 +5610,6 @@ static int nf_tables_fill_setelem(struct sk_buff *skb, ...@@ -5615,9 +5610,6 @@ static int nf_tables_fill_setelem(struct sk_buff *skb,
nf_jiffies64_to_msecs(expires), nf_jiffies64_to_msecs(expires),
NFTA_SET_ELEM_PAD)) NFTA_SET_ELEM_PAD))
goto nla_put_failure; goto nla_put_failure;
if (reset)
*nft_set_ext_expiration(ext) = now + timeout;
} }
if (nft_set_ext_exists(ext, NFT_SET_EXT_USERDATA)) { if (nft_set_ext_exists(ext, NFT_SET_EXT_USERDATA)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment