|
@@ -4535,26 +4535,13 @@ restart:
|
|
|
return;
|
|
|
|
|
|
while (before(start, end)) {
|
|
|
+ int copy = min_t(int, SKB_MAX_ORDER(0, 0), end - start);
|
|
|
struct sk_buff *nskb;
|
|
|
- unsigned int header = skb_headroom(skb);
|
|
|
- int copy = SKB_MAX_ORDER(header, 0);
|
|
|
|
|
|
- /* Too big header? This can happen with IPv6. */
|
|
|
- if (copy < 0)
|
|
|
- return;
|
|
|
- if (end - start < copy)
|
|
|
- copy = end - start;
|
|
|
- nskb = alloc_skb(copy + header, GFP_ATOMIC);
|
|
|
+ nskb = alloc_skb(copy, GFP_ATOMIC);
|
|
|
if (!nskb)
|
|
|
return;
|
|
|
|
|
|
- skb_set_mac_header(nskb, skb_mac_header(skb) - skb->head);
|
|
|
- skb_set_network_header(nskb, (skb_network_header(skb) -
|
|
|
- skb->head));
|
|
|
- skb_set_transport_header(nskb, (skb_transport_header(skb) -
|
|
|
- skb->head));
|
|
|
- skb_reserve(nskb, header);
|
|
|
- memcpy(nskb->head, skb->head, header);
|
|
|
memcpy(nskb->cb, skb->cb, sizeof(skb->cb));
|
|
|
TCP_SKB_CB(nskb)->seq = TCP_SKB_CB(nskb)->end_seq = start;
|
|
|
__skb_queue_before(list, skb, nskb);
|