diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2007-03-10 19:57:15 -0300 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-04-25 22:24:54 -0700 |
commit | 1ced98e81d1c2f1ce965ecf8d0032e02ffa07bf0 (patch) | |
tree | 135955ffd557808f97aeb126efde39f8eeaeefbf /net/ipv6/datagram.c | |
parent | 8856dfa3e9b71ac2177016f66ace3a8978afecc1 (diff) | |
download | lwn-1ced98e81d1c2f1ce965ecf8d0032e02ffa07bf0.tar.gz lwn-1ced98e81d1c2f1ce965ecf8d0032e02ffa07bf0.zip |
[SK_BUFF] ipv6: More skb_reset_network_header conversions related to skb_pull
Now related to this form:
skb->nh.ipv6h = (struct ipv6hdr *)skb_put(skb, length);
That, as the others, is done when skb->tail is still equal to skb->data, making
the conversion to skb_reset_network_header possible.
Also one more case equivalent to skb->nh.raw = skb->data, of this form:
iph = (struct ipv6hdr *)skb->data;
<SNIP>
skb->nh.ipv6h = iph;
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/datagram.c')
-rw-r--r-- | net/ipv6/datagram.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c index 3b4e8dcf4c86..31a20f17c854 100644 --- a/net/ipv6/datagram.c +++ b/net/ipv6/datagram.c @@ -251,8 +251,9 @@ void ipv6_local_error(struct sock *sk, int err, struct flowi *fl, u32 info) if (!skb) return; - iph = (struct ipv6hdr*)skb_put(skb, sizeof(struct ipv6hdr)); - skb->nh.ipv6h = iph; + skb_put(skb, sizeof(struct ipv6hdr)); + skb_reset_network_header(skb); + iph = skb->nh.ipv6h; ipv6_addr_copy(&iph->daddr, &fl->fl6_dst); serr = SKB_EXT_ERR(skb); |