]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
cache: assert name is non-nul when looking up
authorPablo Neira Ayuso <pablo@netfilter.org>
Sun, 15 Jun 2025 09:33:49 +0000 (11:33 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 13 Aug 2025 18:44:50 +0000 (20:44 +0200)
commit f15bc7d368b7c1d897fd830f91e7db6929175b27 upstream.

{table,chain,set,obj,flowtable}_cache_find() should not be called when
handles are used

Fixes: 5ec5c706d993 ("cache: add hashtable cache for table")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/cache.c

index bbba210366920a56da6cf04a8fff738b4681919f..2e96a489c261758e1027cf950e9c8c1e52ac96a7 100644 (file)
@@ -444,8 +444,7 @@ struct table *table_cache_find(const struct cache *cache,
        struct table *table;
        uint32_t hash;
 
-       if (!name)
-               return NULL;
+       assert(name);
 
        hash = djb_hash(name) % NFT_CACHE_HSIZE;
        list_for_each_entry(table, &cache->ht[hash], cache.hlist) {
@@ -565,6 +564,8 @@ struct chain *chain_cache_find(const struct table *table, const char *name)
        struct chain *chain;
        uint32_t hash;
 
+       assert(name);
+
        hash = djb_hash(name) % NFT_CACHE_HSIZE;
        list_for_each_entry(chain, &table->chain_cache.ht[hash], cache.hlist) {
                if (!strcmp(chain->handle.chain.name, name))
@@ -718,6 +719,8 @@ struct set *set_cache_find(const struct table *table, const char *name)
        struct set *set;
        uint32_t hash;
 
+       assert(name);
+
        hash = djb_hash(name) % NFT_CACHE_HSIZE;
        list_for_each_entry(set, &table->set_cache.ht[hash], cache.hlist) {
                if (!strcmp(set->handle.set.name, name))
@@ -803,6 +806,8 @@ struct obj *obj_cache_find(const struct table *table, const char *name,
        struct obj *obj;
        uint32_t hash;
 
+       assert(name);
+
        hash = djb_hash(name) % NFT_CACHE_HSIZE;
        list_for_each_entry(obj, &table->obj_cache.ht[hash], cache.hlist) {
                if (!strcmp(obj->handle.obj.name, name) &&
@@ -907,6 +912,8 @@ struct flowtable *ft_cache_find(const struct table *table, const char *name)
        struct flowtable *ft;
        uint32_t hash;
 
+       assert(name);
+
        hash = djb_hash(name) % NFT_CACHE_HSIZE;
        list_for_each_entry(ft, &table->ft_cache.ht[hash], cache.hlist) {
                if (!strcmp(ft->handle.flowtable.name, name))