From: Arnaldo Carvalho de Melo Date: Sat, 10 Mar 2007 15:47:22 +0000 (-0300) Subject: [TCP]: Do the layer header setting in tcp_collapse relative to skb->data X-Git-Tag: v2.6.22-rc1~1128^2~354 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c51957dafa6f960c5c6372aa3da6c8fa71c13730;p=linux-2.6 [TCP]: Do the layer header setting in tcp_collapse relative to skb->data That is equal to skb->head before skb_reserve, to help in the layer header changes. Signed-off-by: Arnaldo Carvalho de Melo Signed-off-by: David S. Miller --- diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index fb02560859..e5d1c2c8ce 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -3632,11 +3632,13 @@ tcp_collapse(struct sock *sk, struct sk_buff_head *list, nskb = alloc_skb(copy+header, GFP_ATOMIC); if (!nskb) return; + + nskb->mac.raw = nskb->data + (skb->mac.raw - skb->head); + nskb->nh.raw = nskb->data + (skb->nh.raw - skb->head); + nskb->h.raw = nskb->data + (skb->h.raw - skb->head); + skb_reserve(nskb, header); memcpy(nskb->head, skb->head, header); - nskb->nh.raw = nskb->head + (skb->nh.raw-skb->head); - nskb->h.raw = nskb->head + (skb->h.raw-skb->head); - nskb->mac.raw = nskb->head + (skb->mac.raw-skb->head); memcpy(nskb->cb, skb->cb, sizeof(skb->cb)); TCP_SKB_CB(nskb)->seq = TCP_SKB_CB(nskb)->end_seq = start; __skb_insert(nskb, skb->prev, skb, list);