netfilter: nf_tables: Carry s_idx in nft_obj_dump_ctx
authorPhil Sutter <phil@nwl.cc>
Fri, 20 Oct 2023 17:34:31 +0000 (19:34 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 24 Oct 2023 11:16:30 +0000 (13:16 +0200)
Prep work for moving the context into struct netlink_callback scratch
area.

Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nf_tables_api.c

index 2b81069ea3f6751f3d3a260ce59a6e0200df0ef3..3585ddd99ef869c9068f0da5c30058a0165a5e25 100644 (file)
@@ -7682,6 +7682,7 @@ static void audit_log_obj_reset(const struct nft_table *table,
 }
 
 struct nft_obj_dump_ctx {
+       unsigned int    s_idx;
        char            *table;
        u32             type;
 };
@@ -7689,14 +7690,14 @@ struct nft_obj_dump_ctx {
 static int nf_tables_dump_obj(struct sk_buff *skb, struct netlink_callback *cb)
 {
        const struct nfgenmsg *nfmsg = nlmsg_data(cb->nlh);
-       const struct nft_table *table;
-       unsigned int idx = 0, s_idx = cb->args[0];
        struct nft_obj_dump_ctx *ctx = cb->data;
        struct net *net = sock_net(skb->sk);
        int family = nfmsg->nfgen_family;
        struct nftables_pernet *nft_net;
+       const struct nft_table *table;
        unsigned int entries = 0;
        struct nft_object *obj;
+       unsigned int idx = 0;
        bool reset = false;
        int rc = 0;
 
@@ -7715,7 +7716,7 @@ static int nf_tables_dump_obj(struct sk_buff *skb, struct netlink_callback *cb)
                list_for_each_entry_rcu(obj, &table->objects, list) {
                        if (!nft_is_active(net, obj))
                                goto cont;
-                       if (idx < s_idx)
+                       if (idx < ctx->s_idx)
                                goto cont;
                        if (ctx->table && strcmp(ctx->table, table->name))
                                goto cont;
@@ -7745,7 +7746,7 @@ cont:
        }
        rcu_read_unlock();
 
-       cb->args[0] = idx;
+       ctx->s_idx = idx;
        return skb->len;
 }