Keep inspecting rule verdicts before assuming they are equal. Update
existing test to catch this bug.
Fixes: 1542082e259b ("optimize: merge same selector with different verdict into verdict map")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
stmt_a = ctx->stmt_matrix[i][k];
stmt_b = ctx->stmt_matrix[i + 1][k];
if (!stmt_a && !stmt_b)
- return true;
- if (stmt_verdict_eq(stmt_a, stmt_b))
- return true;
+ continue;
+ if (!stmt_a || !stmt_b)
+ return false;
+ if (!stmt_verdict_eq(stmt_a, stmt_b))
+ return false;
}
- return false;
+ return true;
}
static void rule_optimize_print(struct output_ctx *octx,
RULESET="table ip x {
chain y {
ip saddr 1.1.1.1 ip daddr 2.2.2.2 accept
- ip saddr 2.2.2.2 ip daddr 3.3.3.3 drop
ip saddr 4.4.4.4 ip daddr 5.5.5.5 accept
+ ip saddr 2.2.2.2 ip daddr 3.3.3.3 drop
}
}"