]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
netfilter: xt_hashlimit: replace vmalloc calls with kvmalloc
authorDenis Kirjanov <kirjanov@gmail.com>
Sun, 26 Jan 2025 13:19:24 +0000 (08:19 -0500)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 12 Mar 2025 15:37:48 +0000 (16:37 +0100)
Replace vmalloc allocations with kvmalloc since
kvmalloc is more flexible in memory allocation

Signed-off-by: Denis Kirjanov <kirjanov@gmail.com>
Reviewed-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/xt_hashlimit.c

index fa02aab567245e6df886ed6626cb556ba0f1e533..3b507694e81e52b9cf3ef0e18a9bdf9a7886190f 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/random.h>
 #include <linux/jhash.h>
 #include <linux/slab.h>
-#include <linux/vmalloc.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/list.h>
@@ -294,8 +293,7 @@ static int htable_create(struct net *net, struct hashlimit_cfg3 *cfg,
                if (size < 16)
                        size = 16;
        }
-       /* FIXME: don't use vmalloc() here or anywhere else -HW */
-       hinfo = vmalloc(struct_size(hinfo, hash, size));
+       hinfo = kvmalloc(struct_size(hinfo, hash, size), GFP_KERNEL);
        if (hinfo == NULL)
                return -ENOMEM;
        *out_hinfo = hinfo;
@@ -303,7 +301,7 @@ static int htable_create(struct net *net, struct hashlimit_cfg3 *cfg,
        /* copy match config into hashtable config */
        ret = cfg_copy(&hinfo->cfg, (void *)cfg, 3);
        if (ret) {
-               vfree(hinfo);
+               kvfree(hinfo);
                return ret;
        }
 
@@ -322,7 +320,7 @@ static int htable_create(struct net *net, struct hashlimit_cfg3 *cfg,
        hinfo->rnd_initialized = false;
        hinfo->name = kstrdup(name, GFP_KERNEL);
        if (!hinfo->name) {
-               vfree(hinfo);
+               kvfree(hinfo);
                return -ENOMEM;
        }
        spin_lock_init(&hinfo->lock);
@@ -344,7 +342,7 @@ static int htable_create(struct net *net, struct hashlimit_cfg3 *cfg,
                ops, hinfo);
        if (hinfo->pde == NULL) {
                kfree(hinfo->name);
-               vfree(hinfo);
+               kvfree(hinfo);
                return -ENOMEM;
        }
        hinfo->net = net;
@@ -433,7 +431,7 @@ static void htable_put(struct xt_hashlimit_htable *hinfo)
                cancel_delayed_work_sync(&hinfo->gc_work);
                htable_selective_cleanup(hinfo, true);
                kfree(hinfo->name);
-               vfree(hinfo);
+               kvfree(hinfo);
        }
 }