diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2022-10-31 11:35:21 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2022-10-31 12:50:31 +0100 |
commit | bdea233e6b5283ed48fd593a842b677b7833b892 (patch) | |
tree | 261813f92fea7a0ff9a7b36f5cfc69f9c8abdb6e /src | |
parent | 8c600a843b7c0c1cc275ecc0603bd1fc57773e98 (diff) |
netlink_delinearize: complete payload expression in payload statement
Call payload_expr_complete() to complete payload expression in payload
statement, otherwise expr->payload.desc is set to proto_unknown.
Call stmt_payload_binop_postprocess() introduced by 50ca788ca4d0
("netlink: decode payload statment") if payload_expr_complete() fails to
provide a protocol description (eg. ip dscp).
Follow up patch does not allow to remove redundant payload dependency if
proto_unknown is used to deal with the raw payload expression case.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/netlink_delinearize.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c index 828ad12d..0b6cf107 100644 --- a/src/netlink_delinearize.c +++ b/src/netlink_delinearize.c @@ -2995,15 +2995,16 @@ static void stmt_payload_postprocess(struct rule_pp_ctx *ctx) { struct stmt *stmt = ctx->stmt; + payload_expr_complete(stmt->payload.expr, &ctx->pctx); + if (!payload_is_known(stmt->payload.expr)) + stmt_payload_binop_postprocess(ctx); + expr_postprocess(ctx, &stmt->payload.expr); expr_set_type(stmt->payload.val, stmt->payload.expr->dtype, stmt->payload.expr->byteorder); - if (!payload_is_known(stmt->payload.expr)) - stmt_payload_binop_postprocess(ctx); - expr_postprocess(ctx, &stmt->payload.val); } |