diff options
author | Florian Westphal <fw@strlen.de> | 2016-01-27 02:53:51 +0100 |
---|---|---|
committer | Florian Westphal <fw@strlen.de> | 2016-01-27 16:39:41 +0100 |
commit | dcbfc8b14231f43695019ed456a355e37e4a8c84 (patch) | |
tree | dcaf9de0245d79a077c82b7950f0e92ed36667da /src/netlink_delinearize.c | |
parent | 7ecca3b785a67c5783ca61119d4490963837b0f0 (diff) |
netlink_delinearize: only remove protocol if equal cmp is used
Check for OP_EQ before removing a dependency, else we may zap wrong one,
changing the meaning of the rule.
Listing without patch:
ip protocol udp udp dport ssh
ip protocol udp udp dport ssh
counter packets 1 bytes 308 ip protocol udp udp dport ssh
With patch:
ip protocol != tcp udp dport ssh
ip protocol != udp udp dport ssh
ip protocol != tcp counter packets 1 bytes 308 udp dport ssh
Signed-off-by: Florian Westphal <fw@strlen.de>
Acked-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/netlink_delinearize.c')
-rw-r--r-- | src/netlink_delinearize.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c index 76d598ca..2732c965 100644 --- a/src/netlink_delinearize.c +++ b/src/netlink_delinearize.c @@ -1042,6 +1042,7 @@ static void payload_match_expand(struct rule_pp_ctx *ctx, * payload expression. */ if (ctx->pbase == PROTO_BASE_INVALID && + expr->op == OP_EQ && left->flags & EXPR_F_PROTOCOL) { unsigned int proto = mpz_get_be16(tmp->value); const struct proto_desc *desc, *next; |