51 lines
1.8 KiB
Diff
51 lines
1.8 KiB
Diff
From c8a3c669499d169fef8c1e89b8d2d909e5ecd023 Mon Sep 17 00:00:00 2001
|
|
From: Pablo Neira Ayuso <pablo@netfilter.org>
|
|
Date: Mon, 31 Oct 2022 11:35:31 +0100
|
|
Subject: [PATCH] payload: do not kill dependency for proto_unknown
|
|
|
|
Unsupported meta match on layer 4 protocol sets on protocol context to
|
|
proto_unknown, handle anything coming after it as a raw expression in
|
|
payload_expr_expand().
|
|
|
|
Moreover, payload_dependency_kill() skips dependency removal if protocol
|
|
is unknown, so raw payload expression leaves meta layer 4 protocol
|
|
remains in place.
|
|
|
|
Conflict: Remove supplementary test cases
|
|
Reference: https://git.netfilter.org/nftables/commit?id=c8a3c669499d169fef8c1e89b8d2d909e5ecd023
|
|
|
|
Closes: https://bugzilla.netfilter.org/show_bug.cgi?id=1641
|
|
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|
---
|
|
src/payload.c | 6 ++++--
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/payload.c b/src/payload.c
|
|
index 97b6071..ebd99c9 100644
|
|
--- a/src/payload.c
|
|
+++ b/src/payload.c
|
|
@@ -755,7 +755,8 @@ static bool payload_may_dependency_kill(struct payload_dep_ctx *ctx,
|
|
void payload_dependency_kill(struct payload_dep_ctx *ctx, struct expr *expr,
|
|
unsigned int family)
|
|
{
|
|
- if (payload_dependency_exists(ctx, expr->payload.base) &&
|
|
+ if (expr->payload.desc != &proto_unknown &&
|
|
+ payload_dependency_exists(ctx, expr->payload.base) &&
|
|
payload_may_dependency_kill(ctx, family, expr))
|
|
payload_dependency_release(ctx);
|
|
}
|
|
@@ -926,8 +927,9 @@ void payload_expr_expand(struct list_head *list, struct expr *expr,
|
|
assert(expr->etype == EXPR_PAYLOAD);
|
|
|
|
desc = ctx->protocol[expr->payload.base].desc;
|
|
- if (desc == NULL)
|
|
+ if (desc == NULL || desc == &proto_unknown)
|
|
goto raw;
|
|
+
|
|
assert(desc->base == expr->payload.base);
|
|
|
|
for (i = 1; i < array_size(desc->templates); i++) {
|
|
--
|
|
2.33.0
|
|
|