These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / net / netfilter / ipset / ip_set_getport.c
index 29fb01d..42c3e3b 100644 (file)
@@ -30,7 +30,7 @@ get_port(const struct sk_buff *skb, int protocol, unsigned int protooff,
                const struct tcphdr *th;
 
                th = skb_header_pointer(skb, protooff, sizeof(_tcph), &_tcph);
-               if (th == NULL)
+               if (!th)
                        /* No choice either */
                        return false;
 
@@ -42,7 +42,7 @@ get_port(const struct sk_buff *skb, int protocol, unsigned int protooff,
                const sctp_sctphdr_t *sh;
 
                sh = skb_header_pointer(skb, protooff, sizeof(_sh), &_sh);
-               if (sh == NULL)
+               if (!sh)
                        /* No choice either */
                        return false;
 
@@ -55,7 +55,7 @@ get_port(const struct sk_buff *skb, int protocol, unsigned int protooff,
                const struct udphdr *uh;
 
                uh = skb_header_pointer(skb, protooff, sizeof(_udph), &_udph);
-               if (uh == NULL)
+               if (!uh)
                        /* No choice either */
                        return false;
 
@@ -67,7 +67,7 @@ get_port(const struct sk_buff *skb, int protocol, unsigned int protooff,
                const struct icmphdr *ic;
 
                ic = skb_header_pointer(skb, protooff, sizeof(_ich), &_ich);
-               if (ic == NULL)
+               if (!ic)
                        return false;
 
                *port = (__force __be16)htons((ic->type << 8) | ic->code);
@@ -78,7 +78,7 @@ get_port(const struct sk_buff *skb, int protocol, unsigned int protooff,
                const struct icmp6hdr *ic;
 
                ic = skb_header_pointer(skb, protooff, sizeof(_ich), &_ich);
-               if (ic == NULL)
+               if (!ic)
                        return false;
 
                *port = (__force __be16)
@@ -98,7 +98,7 @@ ip_set_get_ip4_port(const struct sk_buff *skb, bool src,
                    __be16 *port, u8 *proto)
 {
        const struct iphdr *iph = ip_hdr(skb);
-       unsigned int protooff = ip_hdrlen(skb);
+       unsigned int protooff = skb_network_offset(skb) + ip_hdrlen(skb);
        int protocol = iph->protocol;
 
        /* See comments at tcp_match in ip_tables.c */
@@ -116,7 +116,8 @@ ip_set_get_ip4_port(const struct sk_buff *skb, bool src,
                        return false;
                default:
                        /* Other protocols doesn't have ports,
-                          so we can match fragments */
+                        * so we can match fragments.
+                        */
                        *proto = protocol;
                        return true;
                }
@@ -135,7 +136,9 @@ ip_set_get_ip6_port(const struct sk_buff *skb, bool src,
        __be16 frag_off = 0;
 
        nexthdr = ipv6_hdr(skb)->nexthdr;
-       protoff = ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr), &nexthdr,
+       protoff = ipv6_skip_exthdr(skb,
+                                  skb_network_offset(skb) +
+                                       sizeof(struct ipv6hdr), &nexthdr,
                                   &frag_off);
        if (protoff < 0 || (frag_off & htons(~0x7)) != 0)
                return false;