summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2016-01-27 02:53:51 +0100
committerFlorian Westphal <fw@strlen.de>2016-01-27 16:39:41 +0100
commitdcbfc8b14231f43695019ed456a355e37e4a8c84 (patch)
treedcaf9de0245d79a077c82b7950f0e92ed36667da /src
parent7ecca3b785a67c5783ca61119d4490963837b0f0 (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')
-rw-r--r--src/netlink_delinearize.c1
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;