From 537d5d4cd09af5590ed0b5e6d2150de87b694824 Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Wed, 2 Mar 2016 13:56:43 +0100 Subject: exthdr: remove implicit dependencies exthdr expression requires a dependency on ipv6; we can thus remove an ipv6 protocol test if its present. Signed-off-by: Florian Westphal Acked-by: Pablo Neira Ayuso --- src/netlink_delinearize.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c index ae6abb07..eec7d0ff 100644 --- a/src/netlink_delinearize.c +++ b/src/netlink_delinearize.c @@ -982,10 +982,10 @@ struct rule_pp_ctx { /* * Kill a redundant payload dependecy that is implied by a higher layer payload expression. */ -static void payload_dependency_kill(struct rule_pp_ctx *ctx, struct expr *expr) +static void __payload_dependency_kill(struct rule_pp_ctx *ctx, enum proto_bases base) { if (ctx->pbase != PROTO_BASE_INVALID && - ctx->pbase == expr->payload.base && + ctx->pbase == base && ctx->pdep != NULL) { list_del(&ctx->pdep->list); stmt_free(ctx->pdep); @@ -996,6 +996,11 @@ static void payload_dependency_kill(struct rule_pp_ctx *ctx, struct expr *expr) } } +static void payload_dependency_kill(struct rule_pp_ctx *ctx, const struct expr *expr) +{ + __payload_dependency_kill(ctx, expr->payload.base); +} + static void payload_dependency_store(struct rule_pp_ctx *ctx, struct stmt *stmt, enum proto_bases base) @@ -1505,8 +1510,10 @@ static void expr_postprocess(struct rule_pp_ctx *ctx, struct expr **exprp) case EXPR_SET_ELEM: expr_postprocess(ctx, &expr->key); break; - case EXPR_SET_REF: case EXPR_EXTHDR: + __payload_dependency_kill(ctx, PROTO_BASE_NETWORK_HDR); + break; + case EXPR_SET_REF: case EXPR_META: case EXPR_VERDICT: break; -- cgit v1.2.3