Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bd82393ca23324d103b21aae43160728da6e6c9c
Commit:     bd82393ca23324d103b21aae43160728da6e6c9c
Parent:     39b89160df691045d1449cbaef43c02084c7543a
Author:     Arnaldo Carvalho de Melo <[EMAIL PROTECTED]>
AuthorDate: Tue Mar 13 17:10:43 2007 -0300
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Apr 25 22:25:29 2007 -0700

    [SK_BUFF]: More skb_reset_transport_header conversions
    
    These are a bit more subtle, they are of this type:
    
    -       skb->h.raw = payload;
            __skb_pull(skb, payload - skb->data);
    +       skb_reset_transport_header(skb);
    
    __skb_pull results in:
    
    skb->data = skb->data + payload - skb->data;
    skb->data = payload;
    
    So after __skb_pull we have skb->data pointing to payload and we can
    just call skb_reset_transport_header(skb), that will do:
    
    skb->h.raw = payload;
    
    The others are similar, allowing us to get rid of some more cases where a
    pointer was being attributed to the layer headers.
    
    Signed-off-by: Arnaldo Carvalho de Melo <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 net/ipv4/ip_sockglue.c |   12 +++++++-----
 net/ipv6/datagram.c    |    4 ++--
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
index ccdc59d..fcb35cd 100644
--- a/net/ipv4/ip_sockglue.c
+++ b/net/ipv4/ip_sockglue.c
@@ -278,10 +278,12 @@ void ip_icmp_error(struct sock *sk, struct sk_buff *skb, 
int err,
                                   skb_network_header(skb);
        serr->port = port;
 
-       skb->h.raw = payload;
-       if (!skb_pull(skb, payload - skb->data) ||
-           sock_queue_err_skb(sk, skb))
-               kfree_skb(skb);
+       if (skb_pull(skb, payload - skb->data) != NULL) {
+               skb_reset_transport_header(skb);
+               if (sock_queue_err_skb(sk, skb) == 0)
+                       return;
+       }
+       kfree_skb(skb);
 }
 
 void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 port, u32 
info)
@@ -314,8 +316,8 @@ void ip_local_error(struct sock *sk, int err, __be32 daddr, 
__be16 port, u32 inf
        serr->addr_offset = (u8 *)&iph->daddr - skb_network_header(skb);
        serr->port = port;
 
-       skb->h.raw = skb->tail;
        __skb_pull(skb, skb->tail - skb->data);
+       skb_reset_transport_header(skb);
 
        if (sock_queue_err_skb(sk, skb))
                kfree_skb(skb);
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
index feba6b1..f16f4f0 100644
--- a/net/ipv6/datagram.c
+++ b/net/ipv6/datagram.c
@@ -231,8 +231,8 @@ void ipv6_icmp_error(struct sock *sk, struct sk_buff *skb, 
int err,
                                  skb_network_header(skb);
        serr->port = port;
 
-       skb->h.raw = payload;
        __skb_pull(skb, payload - skb->data);
+       skb_reset_transport_header(skb);
 
        if (sock_queue_err_skb(sk, skb))
                kfree_skb(skb);
@@ -268,8 +268,8 @@ void ipv6_local_error(struct sock *sk, int err, struct 
flowi *fl, u32 info)
        serr->addr_offset = (u8 *)&iph->daddr - skb_network_header(skb);
        serr->port = fl->fl_ip_dport;
 
-       skb->h.raw = skb->tail;
        __skb_pull(skb, skb->tail - skb->data);
+       skb_reset_transport_header(skb);
 
        if (sock_queue_err_skb(sk, skb))
                kfree_skb(skb);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to