]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
ct timeout: fix 'list object x' vs. 'list objects in table' confusion
authorFlorian Westphal <fw@strlen.de>
Mon, 19 Jun 2023 20:43:06 +0000 (22:43 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 13 Aug 2025 16:23:05 +0000 (18:23 +0200)
commit 1d2e22fc0521bcf73ee1f891c291dc1bde47a6bb upstream.

<empty ruleset>
$ nft list ct timeout table t
Error: No such file or directory
list ct timeout table t
                      ^
This is expected to list all 'ct timeout' objects.
The failure is correct, the table 't' does not exist.

But now lets add one:
$ nft add table t
$ nft list ct timeout  table t
Segmentation fault (core dumped)

... and thats not expected, nothing should be shown
and nft should exit normally.

Because of missing TIMEOUTS command enum, the backend thinks
it should do an object lookup, but as frontend asked for
'list of objects' rather than 'show this object',
handle.obj.name is NULL, which then results in this crash.

Update the command enums so that backend knows what the
frontend asked for.

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 fa652f02245550237be89ae7eedee27f36a4bd87..4f9262e6bc4dca00f728351395aab89dc6d9f9c9 100644 (file)
@@ -644,6 +644,7 @@ enum cmd_obj {
        CMD_OBJ_FLOWTABLE,
        CMD_OBJ_FLOWTABLES,
        CMD_OBJ_CT_TIMEOUT,
+       CMD_OBJ_CT_TIMEOUTS,
        CMD_OBJ_SECMARK,
        CMD_OBJ_SECMARKS,
        CMD_OBJ_CT_EXPECT,
index ca00a818c20b6c90aa6625054ad54e067f706d59..aaeb79f30a201e73da85d255fcf87326565a9b37 100644 (file)
@@ -335,6 +335,7 @@ static int nft_handle_validate(const struct cmd *cmd, struct list_head *msgs)
        case CMD_OBJ_CT_HELPER:
        case CMD_OBJ_CT_HELPERS:
        case CMD_OBJ_CT_TIMEOUT:
+       case CMD_OBJ_CT_TIMEOUTS:
        case CMD_OBJ_CT_EXPECT:
                if (h->table.name &&
                    strlen(h->table.name) > NFT_NAME_MAXLEN) {
index ae5b07bab10ac07818f5ad66b0f4c99bdd8e824e..c44d277715f8c4ec64204425bc72321216b2ee46 100644 (file)
@@ -5761,6 +5761,7 @@ static int cmd_evaluate_list(struct eval_ctx *ctx, struct cmd *cmd)
        case CMD_OBJ_FLOWTABLES:
        case CMD_OBJ_SECMARKS:
        case CMD_OBJ_SYNPROXYS:
+       case CMD_OBJ_CT_TIMEOUTS:
                if (cmd->handle.table.name == NULL)
                        return 0;
                if (!table_cache_find(&ctx->nft->cache.table_cache,
index 86bd4d7c53b95f27fac70fa436f98b0111c7c36d..db6f2492ba47713ea0d7c6286106ff9e41b0db1f 100644 (file)
@@ -4713,7 +4713,7 @@ ct_obj_type               :       HELPER          { $$ = NFT_OBJECT_CT_HELPER; }
                        ;
 
 ct_cmd_type            :       HELPERS         { $$ = CMD_OBJ_CT_HELPERS; }
-                       |       TIMEOUT         { $$ = CMD_OBJ_CT_TIMEOUT; }
+                       |       TIMEOUT         { $$ = CMD_OBJ_CT_TIMEOUTS; }
                        |       EXPECTATION     { $$ = CMD_OBJ_CT_EXPECT; }
                        ;
 
index b4f1d98edbd89e6b0abf40d4fbcd7421e0e0e7dd..582ea40c53dc97362e55141f14eb70ce7afcdb38 100644 (file)
@@ -2564,6 +2564,7 @@ static int do_command_list(struct netlink_ctx *ctx, struct cmd *cmd)
        case CMD_OBJ_CT_HELPERS:
                return do_list_obj(ctx, cmd, NFT_OBJECT_CT_HELPER);
        case CMD_OBJ_CT_TIMEOUT:
+       case CMD_OBJ_CT_TIMEOUTS:
                return do_list_obj(ctx, cmd, NFT_OBJECT_CT_TIMEOUT);
        case CMD_OBJ_CT_EXPECT:
                return do_list_obj(ctx, cmd, NFT_OBJECT_CT_EXPECT);