From 724a6d6e06e7c792f3407b1cf0f7c84fa75eac91 Mon Sep 17 00:00:00 2001 From: Ksawlii Date: Sun, 24 Nov 2024 00:23:32 +0100 Subject: [PATCH] Revert "netfilter: nft_set_pipapo: walk over current view on netlink dump" This reverts commit 2bbac316e007e06fd204d27579be4fe4236ffb48. --- include/net/netfilter/nf_tables.h | 13 ------------- net/netfilter/nf_tables_api.c | 5 ----- net/netfilter/nft_set_pipapo.c | 5 ++--- 3 files changed, 2 insertions(+), 21 deletions(-) diff --git a/include/net/netfilter/nf_tables.h b/include/net/netfilter/nf_tables.h index 484f9cdf2..3cc25a5fa 100755 --- a/include/net/netfilter/nf_tables.h +++ b/include/net/netfilter/nf_tables.h @@ -262,22 +262,9 @@ struct nft_set_elem { void *priv; }; -/** - * enum nft_iter_type - nftables set iterator type - * - * @NFT_ITER_READ: read-only iteration over set elements - * @NFT_ITER_UPDATE: iteration under mutex to update set element state - */ -enum nft_iter_type { - NFT_ITER_UNSPEC, - NFT_ITER_READ, - NFT_ITER_UPDATE, -}; - struct nft_set; struct nft_set_iter { u8 genmask; - enum nft_iter_type type:8; unsigned int count; unsigned int skip; int err; diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c index 87c572ba6..249c30c47 100755 --- a/net/netfilter/nf_tables_api.c +++ b/net/netfilter/nf_tables_api.c @@ -594,7 +594,6 @@ static void nft_map_deactivate(const struct nft_ctx *ctx, struct nft_set *set) { struct nft_set_iter iter = { .genmask = nft_genmask_next(ctx->net), - .type = NFT_ITER_UPDATE, .fn = nft_mapelem_deactivate, }; @@ -4778,7 +4777,6 @@ int nf_tables_bind_set(const struct nft_ctx *ctx, struct nft_set *set, } iter.genmask = nft_genmask_next(ctx->net); - iter.type = NFT_ITER_UPDATE; iter.skip = 0; iter.count = 0; iter.err = 0; @@ -4832,7 +4830,6 @@ static void nft_map_activate(const struct nft_ctx *ctx, struct nft_set *set) { struct nft_set_iter iter = { .genmask = nft_genmask_next(ctx->net), - .type = NFT_ITER_UPDATE, .fn = nft_mapelem_activate, }; @@ -5145,7 +5142,6 @@ static int nf_tables_dump_set(struct sk_buff *skb, struct netlink_callback *cb) args.cb = cb; args.skb = skb; args.iter.genmask = nft_genmask_cur(net); - args.iter.type = NFT_ITER_READ; args.iter.skip = cb->args[0]; args.iter.count = 0; args.iter.err = 0; @@ -6069,7 +6065,6 @@ static int nf_tables_delsetelem(struct net *net, struct sock *nlsk, if (nla[NFTA_SET_ELEM_LIST_ELEMENTS] == NULL) { struct nft_set_iter iter = { .genmask = genmask, - .type = NFT_ITER_UPDATE, .fn = nft_flush_set, }; set->ops->walk(&ctx, set, &iter); diff --git a/net/netfilter/nft_set_pipapo.c b/net/netfilter/nft_set_pipapo.c index b30be099f..9e0269e85 100755 --- a/net/netfilter/nft_set_pipapo.c +++ b/net/netfilter/nft_set_pipapo.c @@ -2026,14 +2026,13 @@ static void nft_pipapo_walk(const struct nft_ctx *ctx, struct nft_set *set, struct nft_set_iter *iter) { struct nft_pipapo *priv = nft_set_priv(set); + struct net *net = read_pnet(&set->net); struct nft_pipapo_match *m; struct nft_pipapo_field *f; int i, r; - WARN_ON_ONCE(iter->type == NFT_ITER_UNSPEC); - rcu_read_lock(); - if (iter->type == NFT_ITER_READ) + if (iter->genmask == nft_genmask_cur(net)) m = rcu_dereference(priv->match); else m = priv->clone;