summaryrefslogtreecommitdiffstats
path: root/package/network/utils/ipset/patches/210-fix-ipv6_skip_exthdr.patch
blob: aaecc79cd199cc3dc0a95e2b15a88c274f367642 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
--- a/kernel/net/netfilter/ipset/ip_set_getport.c
+++ b/kernel/net/netfilter/ipset/ip_set_getport.c
@@ -113,6 +113,17 @@ ip_set_get_ip4_port(const struct sk_buff
 EXPORT_SYMBOL_GPL(ip_set_get_ip4_port);
 
 #if defined(CONFIG_IP6_NF_IPTABLES) || defined(CONFIG_IP6_NF_IPTABLES_MODULE)
+static int ip_set_skip_exthdr(const struct sk_buff *skb, int start,
+                              u8 *nexthdrp)
+{
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)
+	__be16 fragoff;
+	return ipv6_skip_exthdr(skb, start, nexthdrp, &fragoff);
+#else
+	return ipv6_skip_exthdr(skb, start, nexthdrp);
+#endif
+}
+
 bool
 ip_set_get_ip6_port(const struct sk_buff *skb, bool src,
 		    __be16 *port, u8 *proto)
@@ -121,7 +132,7 @@ ip_set_get_ip6_port(const struct sk_buff
 	u8 nexthdr;
 
 	nexthdr = ipv6_hdr(skb)->nexthdr;
-	protoff = ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr), &nexthdr);
+	protoff = ip_set_skip_exthdr(skb, sizeof(struct ipv6hdr), &nexthdr);
 	if (protoff < 0)
 		return false;