]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
ct expectation: fix 'list object x' vs. 'list objects in table' confusion
authorFlorian Westphal <fw@strlen.de>
Fri, 28 Jul 2023 19:04:13 +0000 (21:04 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 13 Aug 2025 16:23:30 +0000 (18:23 +0200)
commit a8ff324dc64fd76f7d218d3d94c5885250951258 upstream.

Just like "ct timeout", "ct expectation" is in need of the same fix,
we get segfault on "nft list ct expectation table t", if table t exists.

This is the exact same pattern as resolved for "ct timeout" in commit
1d2e22fc0521 ("ct timeout: fix 'list object x' vs. 'list objects in table' confusion").

Signed-off-by: Florian Westphal <fw@strlen.de>
include/rule.h
src/cache.c
src/evaluate.c
src/parser_bison.y
src/rule.c

index 4f9262e6bc4dca00f728351395aab89dc6d9f9c9..4fae9eec25b23a93d7e579ee3e6f236aaeae87f5 100644 (file)
@@ -648,6 +648,7 @@ enum cmd_obj {
        CMD_OBJ_SECMARK,
        CMD_OBJ_SECMARKS,
        CMD_OBJ_CT_EXPECT,
+       CMD_OBJ_CT_EXPECTATIONS,
        CMD_OBJ_SYNPROXY,
        CMD_OBJ_SYNPROXYS,
        CMD_OBJ_HOOKS,
index aaeb79f30a201e73da85d255fcf87326565a9b37..90eb901eab64b2d0919848d9ba57ef5a9c30d438 100644 (file)
@@ -337,6 +337,7 @@ static int nft_handle_validate(const struct cmd *cmd, struct list_head *msgs)
        case CMD_OBJ_CT_TIMEOUT:
        case CMD_OBJ_CT_TIMEOUTS:
        case CMD_OBJ_CT_EXPECT:
+       case CMD_OBJ_CT_EXPECTATIONS:
                if (h->table.name &&
                    strlen(h->table.name) > NFT_NAME_MAXLEN) {
                        loc = &h->table.location;
index c44d277715f8c4ec64204425bc72321216b2ee46..560db873a0c7ac397de511b4ed43e3a3a0275eca 100644 (file)
@@ -5762,6 +5762,7 @@ static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd)
        case CMD_OBJ_SECMARKS:
        case CMD_OBJ_SYNPROXYS:
        case CMD_OBJ_CT_TIMEOUTS:
+       case CMD_OBJ_CT_EXPECTATIONS:
                if (cmd->handle.table.name == NULL)
                        return 0;
                if (!table_cache_find(&ctx->nft->cache.table_cache,
index db6f2492ba47713ea0d7c6286106ff9e41b0db1f..67e6fc921bcd4125e7eccb882aa2aabb679447e3 100644 (file)
@@ -4714,7 +4714,7 @@ ct_obj_type               :       HELPER          { $$ = NFT_OBJECT_CT_HELPER; }
 
 ct_cmd_type            :       HELPERS         { $$ = CMD_OBJ_CT_HELPERS; }
                        |       TIMEOUT         { $$ = CMD_OBJ_CT_TIMEOUTS; }
-                       |       EXPECTATION     { $$ = CMD_OBJ_CT_EXPECT; }
+                       |       EXPECTATION     { $$ = CMD_OBJ_CT_EXPECTATIONS; }
                        ;
 
 ct_l4protoname         :       TCP     close_scope_tcp { $$ = IPPROTO_TCP; }
index 582ea40c53dc97362e55141f14eb70ce7afcdb38..6c81106d49a652caa54e75f0f677cd0e302c02a4 100644 (file)
@@ -2567,6 +2567,7 @@ static int do_command_list(struct netlink_ctx *ctx, struct cmd *cmd)
        case CMD_OBJ_CT_TIMEOUTS:
                return do_list_obj(ctx, cmd, NFT_OBJECT_CT_TIMEOUT);
        case CMD_OBJ_CT_EXPECT:
+       case CMD_OBJ_CT_EXPECTATIONS:
                return do_list_obj(ctx, cmd, NFT_OBJECT_CT_EXPECT);
        case CMD_OBJ_LIMIT:
        case CMD_OBJ_LIMITS: