Skip to content

Commit

Permalink
netfilter: nf_tables: Carry reset flag in nft_rule_dump_ctx
Browse files Browse the repository at this point in the history
This relieves the dump callback from having to check nlmsg_type upon
each call and instead performs the check once in .start callback.

Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Florian Westphal <fw@strlen.de>
  • Loading branch information
Phil Sutter authored and Florian Westphal committed Oct 10, 2023
1 parent 30fa41a commit 405c8fd
Showing 1 changed file with 9 additions and 10 deletions.
19 changes: 9 additions & 10 deletions net/netfilter/nf_tables_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -3443,15 +3443,16 @@ static void audit_log_rule_reset(const struct nft_table *table,
struct nft_rule_dump_ctx {
char *table;
char *chain;
bool reset;
};

static int __nf_tables_dump_rules(struct sk_buff *skb,
unsigned int *idx,
struct netlink_callback *cb,
const struct nft_table *table,
const struct nft_chain *chain,
bool reset)
const struct nft_chain *chain)
{
struct nft_rule_dump_ctx *ctx = cb->data;
struct net *net = sock_net(skb->sk);
const struct nft_rule *rule, *prule;
unsigned int s_idx = cb->args[0];
Expand All @@ -3475,7 +3476,7 @@ static int __nf_tables_dump_rules(struct sk_buff *skb,
NFT_MSG_NEWRULE,
NLM_F_MULTI | NLM_F_APPEND,
table->family,
table, chain, rule, handle, reset) < 0) {
table, chain, rule, handle, ctx->reset) < 0) {
ret = 1;
break;
}
Expand All @@ -3487,7 +3488,7 @@ static int __nf_tables_dump_rules(struct sk_buff *skb,
(*idx)++;
}

if (reset && entries)
if (ctx->reset && entries)
audit_log_rule_reset(table, cb->seq, entries);

return ret;
Expand All @@ -3504,10 +3505,6 @@ static int nf_tables_dump_rules(struct sk_buff *skb,
struct net *net = sock_net(skb->sk);
int family = nfmsg->nfgen_family;
struct nftables_pernet *nft_net;
bool reset = false;

if (NFNL_MSG_TYPE(cb->nlh->nlmsg_type) == NFT_MSG_GETRULE_RESET)
reset = true;

rcu_read_lock();
nft_net = nft_pernet(net);
Expand All @@ -3532,15 +3529,15 @@ static int nf_tables_dump_rules(struct sk_buff *skb,
if (!nft_is_active(net, chain))
continue;
__nf_tables_dump_rules(skb, &idx,
cb, table, chain, reset);
cb, table, chain);
break;
}
goto done;
}

list_for_each_entry_rcu(chain, &table->chains, list) {
if (__nf_tables_dump_rules(skb, &idx,
cb, table, chain, reset))
cb, table, chain))
goto done;
}

Expand Down Expand Up @@ -3578,6 +3575,8 @@ static int nf_tables_dump_rules_start(struct netlink_callback *cb)
return -ENOMEM;
}
}
if (NFNL_MSG_TYPE(cb->nlh->nlmsg_type) == NFT_MSG_GETRULE_RESET)
ctx->reset = true;

cb->data = ctx;
return 0;
Expand Down

0 comments on commit 405c8fd

Please sign in to comment.