netfilter: nf_tables: Unconditionally allocate nft_obj_filter
authorPhil Sutter <phil@nwl.cc>
Fri, 20 Oct 2023 17:34:29 +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 filter into struct netlink_callback's 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 fa216d1cfb7416a9369fbf76011f27ae806ee51e..e2e0586307f508dc70a8d9e3e35ed2749b532211 100644 (file)
@@ -7717,11 +7717,9 @@ static int nf_tables_dump_obj(struct sk_buff *skb, struct netlink_callback *cb)
                                goto cont;
                        if (idx < s_idx)
                                goto cont;
-                       if (filter && filter->table &&
-                           strcmp(filter->table, table->name))
+                       if (filter->table && strcmp(filter->table, table->name))
                                goto cont;
-                       if (filter &&
-                           filter->type != NFT_OBJECT_UNSPEC &&
+                       if (filter->type != NFT_OBJECT_UNSPEC &&
                            obj->ops->type->type != filter->type)
                                goto cont;
 
@@ -7756,23 +7754,21 @@ static int nf_tables_dump_obj_start(struct netlink_callback *cb)
        const struct nlattr * const *nla = cb->data;
        struct nft_obj_filter *filter = NULL;
 
-       if (nla[NFTA_OBJ_TABLE] || nla[NFTA_OBJ_TYPE]) {
-               filter = kzalloc(sizeof(*filter), GFP_ATOMIC);
-               if (!filter)
-                       return -ENOMEM;
+       filter = kzalloc(sizeof(*filter), GFP_ATOMIC);
+       if (!filter)
+               return -ENOMEM;
 
-               if (nla[NFTA_OBJ_TABLE]) {
-                       filter->table = nla_strdup(nla[NFTA_OBJ_TABLE], GFP_ATOMIC);
-                       if (!filter->table) {
-                               kfree(filter);
-                               return -ENOMEM;
-                       }
+       if (nla[NFTA_OBJ_TABLE]) {
+               filter->table = nla_strdup(nla[NFTA_OBJ_TABLE], GFP_ATOMIC);
+               if (!filter->table) {
+                       kfree(filter);
+                       return -ENOMEM;
                }
-
-               if (nla[NFTA_OBJ_TYPE])
-                       filter->type = ntohl(nla_get_be32(nla[NFTA_OBJ_TYPE]));
        }
 
+       if (nla[NFTA_OBJ_TYPE])
+               filter->type = ntohl(nla_get_be32(nla[NFTA_OBJ_TYPE]));
+
        cb->data = filter;
        return 0;
 }
@@ -7781,10 +7777,8 @@ static int nf_tables_dump_obj_done(struct netlink_callback *cb)
 {
        struct nft_obj_filter *filter = cb->data;
 
-       if (filter) {
-               kfree(filter->table);
-               kfree(filter);
-       }
+       kfree(filter->table);
+       kfree(filter);
 
        return 0;
 }