]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
netfilter: xt_iprange: fix range inversion match
authorAlexey Dobriyan <adobriyan@gmail.com>
Wed, 22 Oct 2008 17:41:28 +0000 (19:41 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sat, 25 Oct 2008 21:32:40 +0000 (14:32 -0700)
netfilter: xt_iprange: fix range inversion match

Upstream commit 6def1eb48:

Inverted IPv4 v1 and IPv6 v0 matches don't match anything since 2.6.25-rc1!

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Acked-by: Jan Engelhardt <jengelh@medozas.de>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
net/netfilter/xt_iprange.c

index c63e9333c7550a04971084b3f688d8fe295919ea..4b5741bac341a5ab43a682f26c25f21e4160693e 100644 (file)
@@ -67,7 +67,7 @@ iprange_mt4(const struct sk_buff *skb, const struct net_device *in,
        if (info->flags & IPRANGE_SRC) {
                m  = ntohl(iph->saddr) < ntohl(info->src_min.ip);
                m |= ntohl(iph->saddr) > ntohl(info->src_max.ip);
-               m ^= info->flags & IPRANGE_SRC_INV;
+               m ^= !!(info->flags & IPRANGE_SRC_INV);
                if (m) {
                        pr_debug("src IP " NIPQUAD_FMT " NOT in range %s"
                                 NIPQUAD_FMT "-" NIPQUAD_FMT "\n",
@@ -81,7 +81,7 @@ iprange_mt4(const struct sk_buff *skb, const struct net_device *in,
        if (info->flags & IPRANGE_DST) {
                m  = ntohl(iph->daddr) < ntohl(info->dst_min.ip);
                m |= ntohl(iph->daddr) > ntohl(info->dst_max.ip);
-               m ^= info->flags & IPRANGE_DST_INV;
+               m ^= !!(info->flags & IPRANGE_DST_INV);
                if (m) {
                        pr_debug("dst IP " NIPQUAD_FMT " NOT in range %s"
                                 NIPQUAD_FMT "-" NIPQUAD_FMT "\n",
@@ -123,14 +123,14 @@ iprange_mt6(const struct sk_buff *skb, const struct net_device *in,
        if (info->flags & IPRANGE_SRC) {
                m  = iprange_ipv6_sub(&iph->saddr, &info->src_min.in6) < 0;
                m |= iprange_ipv6_sub(&iph->saddr, &info->src_max.in6) > 0;
-               m ^= info->flags & IPRANGE_SRC_INV;
+               m ^= !!(info->flags & IPRANGE_SRC_INV);
                if (m)
                        return false;
        }
        if (info->flags & IPRANGE_DST) {
                m  = iprange_ipv6_sub(&iph->daddr, &info->dst_min.in6) < 0;
                m |= iprange_ipv6_sub(&iph->daddr, &info->dst_max.in6) > 0;
-               m ^= info->flags & IPRANGE_DST_INV;
+               m ^= !!(info->flags & IPRANGE_DST_INV);
                if (m)
                        return false;
        }