mirror of https://gitee.com/openkylin/linux.git
[IPV6] MIP6: Fix to update IP6CB when cloned skbuff is received at HAO.
Signed-off-by: Masahide NAKAMURA <nakam@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a9917c0665
commit
dc435e6dac
|
@ -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)
|
||||||
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)
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue