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@xxxxxxxxx> --- include/rule.h | 1 + src/cache.c | 1 + src/evaluate.c | 1 + src/parser_bison.y | 2 +- src/rule.c | 1 + 5 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/rule.h b/include/rule.h index 5cb549c2e14e..13ab1bf3df5a 100644 --- a/include/rule.h +++ b/include/rule.h @@ -649,6 +649,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, diff --git a/src/cache.c b/src/cache.c index 5cab2622db95..b6a7e194771a 100644 --- a/src/cache.c +++ b/src/cache.c @@ -377,6 +377,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; diff --git a/src/evaluate.c b/src/evaluate.c index 33e4ac93e89a..8fc1ca7e4b4f 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -5425,6 +5425,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, diff --git a/src/parser_bison.y b/src/parser_bison.y index 2d7538d840be..9593de00bd96 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -4777,7 +4777,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; } diff --git a/src/rule.c b/src/rule.c index 08841902fef4..99c4f0bb8b00 100644 --- a/src/rule.c +++ b/src/rule.c @@ -2363,6 +2363,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: -- 2.41.0