]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
netlink_delinearize: complete payload expression in payload statement
authorPablo Neira Ayuso <pablo@netfilter.org>
Mon, 31 Oct 2022 10:35:21 +0000 (11:35 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 31 Oct 2022 11:50:31 +0000 (12:50 +0100)
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>
src/netlink_delinearize.c

index 828ad12d7536469c5d25db155bac03f92ed6d669..0b6cf10722949f3233c0dde4bbfeda33b753dcbc 100644 (file)
@@ -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);
 }