提交 dc435e6d 编写于 作者: M Masahide NAKAMURA 提交者: David S. Miller

[IPV6] MIP6: Fix to update IP6CB when cloned skbuff is received at HAO.

Signed-off-by: NMasahide NAKAMURA <nakam@linux-ipv6.org>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 a9917c06
...@@ -233,9 +233,14 @@ static int ipv6_dest_hao(struct sk_buff **skbp, int optoff) ...@@ -233,9 +233,14 @@ static int ipv6_dest_hao(struct sk_buff **skbp, int optoff)
if (skb_cloned(skb)) { if (skb_cloned(skb)) {
struct sk_buff *skb2 = skb_copy(skb, GFP_ATOMIC); struct sk_buff *skb2 = skb_copy(skb, GFP_ATOMIC);
struct inet6_skb_parm *opt2;
if (skb2 == NULL) if (skb2 == NULL)
goto discard; goto discard;
opt2 = IP6CB(skb2);
memcpy(opt2, opt, sizeof(*opt2));
kfree_skb(skb); kfree_skb(skb);
/* update all variable using below by copied skbuff */ /* update all variable using below by copied skbuff */
...@@ -296,6 +301,7 @@ static int ipv6_destopt_rcv(struct sk_buff **skbp) ...@@ -296,6 +301,7 @@ static int ipv6_destopt_rcv(struct sk_buff **skbp)
if (ip6_parse_tlv(tlvprocdestopt_lst, skbp)) { if (ip6_parse_tlv(tlvprocdestopt_lst, skbp)) {
skb = *skbp; skb = *skbp;
skb->h.raw += ((skb->h.raw[1]+1)<<3); skb->h.raw += ((skb->h.raw[1]+1)<<3);
opt = IP6CB(skb);
#ifdef CONFIG_IPV6_MIP6 #ifdef CONFIG_IPV6_MIP6
opt->nhoff = dstbuf; opt->nhoff = dstbuf;
#else #else
...@@ -690,6 +696,7 @@ int ipv6_parse_hopopts(struct sk_buff **skbp) ...@@ -690,6 +696,7 @@ int ipv6_parse_hopopts(struct sk_buff **skbp)
if (ip6_parse_tlv(tlvprochopopt_lst, skbp)) { if (ip6_parse_tlv(tlvprochopopt_lst, skbp)) {
skb = *skbp; skb = *skbp;
skb->h.raw += (skb->h.raw[1]+1)<<3; skb->h.raw += (skb->h.raw[1]+1)<<3;
opt = IP6CB(skb);
opt->nhoff = sizeof(struct ipv6hdr); opt->nhoff = sizeof(struct ipv6hdr);
return 1; return 1;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册