diff options
author | Florian Westphal <fw@strlen.de> | 2016-03-07 17:38:23 +0100 |
---|---|---|
committer | Florian Westphal <fw@strlen.de> | 2016-03-10 14:08:34 +0100 |
commit | ebb0dd15731d2782b6ade1a0904c2c8890e5b5aa (patch) | |
tree | 79cc75666b40b7cf2e90c238920cd1bf09136c9c /src/netlink_linearize.c | |
parent | 2294f6828cd73c12ed76b93f65ffe7315c947c96 (diff) |
netlink_delinearize: fix bogus offset w exthdr expressions
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>
Diffstat (limited to 'src/netlink_linearize.c')
-rw-r--r-- | src/netlink_linearize.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/netlink_linearize.c b/src/netlink_linearize.c index 07f70e06..49b46760 100644 --- a/src/netlink_linearize.c +++ b/src/netlink_linearize.c @@ -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, |