]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
netlink_delinearize: fix bogus offset w exthdr expressions
authorFlorian Westphal <fw@strlen.de>
Mon, 7 Mar 2016 16:38:23 +0000 (17:38 +0100)
committerFlorian Westphal <fw@strlen.de>
Thu, 10 Mar 2016 13:08:34 +0000 (14:08 +0100)
Need to fetch the offset from the exthdr template.

Signed-off-by: Florian Westphal <fw@strlen.de>
Acked-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/netlink_linearize.c

index 07f70e064fcfa7ae521de27c52792f2bcaf8474c..49b46760433bdc345fc2ab8d90d8a41ab1e94b15 100644 (file)
@@ -320,19 +320,24 @@ static void netlink_gen_range(struct netlink_linearize_ctx *ctx,
 
 static void payload_shift_value(const struct expr *left, struct expr *right)
 {
+       unsigned int offset;
+
        if (right->ops->type != EXPR_VALUE)
                return;
 
        switch (left->ops->type) {
        case EXPR_PAYLOAD:
+               offset = left->payload.offset;
+               break;
        case EXPR_EXTHDR:
+               offset = left->exthdr.tmpl->offset;
                break;
        default:
                return;
        }
 
        mpz_lshift_ui(right->value,
-                       payload_shift_calc(left, left->payload.offset));
+                       payload_shift_calc(left, offset));
 }
 
 static struct expr *netlink_gen_prefix(struct netlink_linearize_ctx *ctx,