[IPV6]: Repair IPv6 Fragments
The commit "[IPV6]: Use kmemdup" (commit-id:
af879cc704
) broke IPv6 fragments.
Bug was spotted by Yasuyuki Kozakai <yasuyuki.kozakai@toshiba.co.jp>.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5c804bfdcc
commit
9a217a1c7e
@ -624,13 +624,13 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *))
|
|||||||
skb_shinfo(skb)->frag_list = NULL;
|
skb_shinfo(skb)->frag_list = NULL;
|
||||||
/* BUILD HEADER */
|
/* BUILD HEADER */
|
||||||
|
|
||||||
|
*prevhdr = NEXTHDR_FRAGMENT;
|
||||||
tmp_hdr = kmemdup(skb->nh.raw, hlen, GFP_ATOMIC);
|
tmp_hdr = kmemdup(skb->nh.raw, hlen, GFP_ATOMIC);
|
||||||
if (!tmp_hdr) {
|
if (!tmp_hdr) {
|
||||||
IP6_INC_STATS(ip6_dst_idev(skb->dst), IPSTATS_MIB_FRAGFAILS);
|
IP6_INC_STATS(ip6_dst_idev(skb->dst), IPSTATS_MIB_FRAGFAILS);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
*prevhdr = NEXTHDR_FRAGMENT;
|
|
||||||
__skb_pull(skb, hlen);
|
__skb_pull(skb, hlen);
|
||||||
fh = (struct frag_hdr*)__skb_push(skb, sizeof(struct frag_hdr));
|
fh = (struct frag_hdr*)__skb_push(skb, sizeof(struct frag_hdr));
|
||||||
skb->nh.raw = __skb_push(skb, hlen);
|
skb->nh.raw = __skb_push(skb, hlen);
|
||||||
|
Loading…
Reference in New Issue
Block a user