summaryrefslogtreecommitdiffstats
path: root/src/netlink_delinearize.c
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2016-02-01 12:40:40 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2016-02-01 12:56:27 +0100
commitbd14bba9c62a86e28b3423c9056e6549581df323 (patch)
tree9a24856f9bf225024a77fb58cb6009929949c115 /src/netlink_delinearize.c
parent62c152bf3ef811952ae57778da280c40bbb010ce (diff)
netlink_delinearize: prune implicit binop before payload_match_postprocess()
payload_match_postprocess() expects a relational with payload of his lhs and value on the rhs. Moreover, payload_match_expand() releases the previous expression so valgrind reports an use-after-free when pruning the implicit binop. Fix this by calling payload_match_postprocess() in first place. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/netlink_delinearize.c')
-rw-r--r--src/netlink_delinearize.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c
index 7d94f309..ae6abb07 100644
--- a/src/netlink_delinearize.c
+++ b/src/netlink_delinearize.c
@@ -1229,13 +1229,12 @@ static void binop_postprocess(struct rule_pp_ctx *ctx, struct expr *expr)
value->len = payload->len;
}
- payload_match_postprocess(ctx, expr, payload);
-
assert(expr->left->ops->type == EXPR_BINOP);
-
assert(binop->left == payload);
expr->left = expr_get(payload);
expr_free(binop);
+
+ payload_match_postprocess(ctx, expr, payload);
}
}