mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
netfilter: nf_conntrack_netlink: fix inverted IPv6 tuple filter
ctnetlink_filter_match_tuple() returns 0 (no match) when the IPv6
source or destination address differs from the filter, because the
!ipv6_addr_cmp() test is inverted. ipv6_addr_cmp() returns 0 when
the addresses are equal, so the negation makes the branch trigger on
a match instead of a mismatch, which is the opposite of the IPv4
path above.
Drop the '!' so the IPv6 branch returns 0 only when the addresses
differ, matching the IPv4 semantics and the caller's expectation.
Fixes: cb8aa9a3af ("netfilter: ctnetlink: add kernel side filtering for dump")
Cc: stable@vger.kernel.org
Signed-off-by: Liu Chao <liuc63@xiaopeng.com>
Reviewed-by: Weibin Liu <liuwb@xiaopeng.com>
Reviewed-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
08f7882637
commit
cd37ab22a7
|
|
@ -1098,13 +1098,13 @@ static int ctnetlink_filter_match_tuple(struct nf_conntrack_tuple *filter_tuple,
|
||||||
break;
|
break;
|
||||||
case NFPROTO_IPV6:
|
case NFPROTO_IPV6:
|
||||||
if ((flags & CTA_FILTER_FLAG(CTA_IP_SRC)) &&
|
if ((flags & CTA_FILTER_FLAG(CTA_IP_SRC)) &&
|
||||||
!ipv6_addr_cmp(&filter_tuple->src.u3.in6,
|
ipv6_addr_cmp(&filter_tuple->src.u3.in6,
|
||||||
&ct_tuple->src.u3.in6))
|
&ct_tuple->src.u3.in6))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if ((flags & CTA_FILTER_FLAG(CTA_IP_DST)) &&
|
if ((flags & CTA_FILTER_FLAG(CTA_IP_DST)) &&
|
||||||
!ipv6_addr_cmp(&filter_tuple->dst.u3.in6,
|
ipv6_addr_cmp(&filter_tuple->dst.u3.in6,
|
||||||
&ct_tuple->dst.u3.in6))
|
&ct_tuple->dst.u3.in6))
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user