Root/target/linux/generic/patches-3.3/654-avoid_skb_cow_realloc.patch

1--- a/include/linux/skbuff.h
2+++ b/include/linux/skbuff.h
3@@ -1850,12 +1850,15 @@ static inline int skb_clone_writable(con
4 static inline int __skb_cow(struct sk_buff *skb, unsigned int headroom,
5                 int cloned)
6 {
7+ unsigned int alloc_headroom = headroom;
8     int delta = 0;
9 
10     if (headroom < NET_SKB_PAD)
11- headroom = NET_SKB_PAD;
12- if (headroom > skb_headroom(skb))
13- delta = headroom - skb_headroom(skb);
14+ alloc_headroom = NET_SKB_PAD;
15+ if (headroom > skb_headroom(skb) ||
16+ (cloned && alloc_headroom > skb_headroom(skb))) {
17+ delta = alloc_headroom - skb_headroom(skb);
18+ }
19 
20     if (delta || cloned)
21         return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD), 0,
22

Archive Download this file



interactive