diff options
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/ipv6_sockglue.c | 11 | ||||
-rw-r--r-- | net/ipv6/netfilter/ip6_tables.c | 3 |
2 files changed, 12 insertions, 2 deletions
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index c28e5c287447..0c17dec11c8d 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c | |||
@@ -64,6 +64,14 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb, int features) | |||
64 | struct inet6_protocol *ops; | 64 | struct inet6_protocol *ops; |
65 | int proto; | 65 | int proto; |
66 | 66 | ||
67 | if (unlikely(skb_shinfo(skb)->gso_type & | ||
68 | ~(SKB_GSO_UDP | | ||
69 | SKB_GSO_DODGY | | ||
70 | SKB_GSO_TCP_ECN | | ||
71 | SKB_GSO_TCPV6 | | ||
72 | 0))) | ||
73 | goto out; | ||
74 | |||
67 | if (unlikely(!pskb_may_pull(skb, sizeof(*ipv6h)))) | 75 | if (unlikely(!pskb_may_pull(skb, sizeof(*ipv6h)))) |
68 | goto out; | 76 | goto out; |
69 | 77 | ||
@@ -111,7 +119,8 @@ unlock: | |||
111 | 119 | ||
112 | for (skb = segs; skb; skb = skb->next) { | 120 | for (skb = segs; skb; skb = skb->next) { |
113 | ipv6h = skb->nh.ipv6h; | 121 | ipv6h = skb->nh.ipv6h; |
114 | ipv6h->payload_len = htons(skb->len - skb->mac_len); | 122 | ipv6h->payload_len = htons(skb->len - skb->mac_len - |
123 | sizeof(*ipv6h)); | ||
115 | } | 124 | } |
116 | 125 | ||
117 | out: | 126 | out: |
diff --git a/net/ipv6/netfilter/ip6_tables.c b/net/ipv6/netfilter/ip6_tables.c index 7ef143c0ebf6..f26898b00347 100644 --- a/net/ipv6/netfilter/ip6_tables.c +++ b/net/ipv6/netfilter/ip6_tables.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/vmalloc.h> | 25 | #include <linux/vmalloc.h> |
26 | #include <linux/netdevice.h> | 26 | #include <linux/netdevice.h> |
27 | #include <linux/module.h> | 27 | #include <linux/module.h> |
28 | #include <linux/poison.h> | ||
28 | #include <linux/icmpv6.h> | 29 | #include <linux/icmpv6.h> |
29 | #include <net/ipv6.h> | 30 | #include <net/ipv6.h> |
30 | #include <asm/uaccess.h> | 31 | #include <asm/uaccess.h> |
@@ -376,7 +377,7 @@ ip6t_do_table(struct sk_buff **pskb, | |||
376 | } while (!hotdrop); | 377 | } while (!hotdrop); |
377 | 378 | ||
378 | #ifdef CONFIG_NETFILTER_DEBUG | 379 | #ifdef CONFIG_NETFILTER_DEBUG |
379 | ((struct ip6t_entry *)table_base)->comefrom = 0xdead57ac; | 380 | ((struct ip6t_entry *)table_base)->comefrom = NETFILTER_LINK_POISON; |
380 | #endif | 381 | #endif |
381 | read_unlock_bh(&table->lock); | 382 | read_unlock_bh(&table->lock); |
382 | 383 | ||