summaryrefslogtreecommitdiffstats
path: root/src/evaluate.c
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2018-04-03 13:00:31 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2018-04-03 13:07:03 +0200
commit715c8e7b625a48d3a64d9d2a7f83e33e458b1355 (patch)
treeb1c607790a54feaf28134970589beaf489061965 /src/evaluate.c
parent63d2e9da685121be2d3ee7d7514887d634c159e0 (diff)
evaluate: propagate binop_transfer() adjustment to set key size
The right shift transfer may be result in adjusting the set key size, eg. ip6 dscp results in fetching 6 bits that are splitted between two bytes, hence the set element ends up being 16 bytes long. Reported-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/evaluate.c')
-rw-r--r--src/evaluate.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/evaluate.c b/src/evaluate.c
index d6961099..967ad162 100644
--- a/src/evaluate.c
+++ b/src/evaluate.c
@@ -1282,8 +1282,9 @@ static int expr_evaluate_map(struct eval_ctx *ctx, struct expr **expr)
if (binop_transfer(ctx, expr) < 0)
return -1;
- map = *expr;
+ ctx->set->key->len = ctx->ectx.len;
ctx->set = NULL;
+ map = *expr;
map->mappings->set->flags |= map->mappings->set->init->set_flags;
break;
case EXPR_SYMBOL: