mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-04 06:54:27 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			22 lines
		
	
	
		
			679 B
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			22 lines
		
	
	
		
			679 B
		
	
	
	
		
			Diff
		
	
	
	
	
	
--- a/include/linux/skbuff.h
 | 
						|
+++ b/include/linux/skbuff.h
 | 
						|
@@ -1850,12 +1850,15 @@ static inline int skb_clone_writable(con
 | 
						|
 static inline int __skb_cow(struct sk_buff *skb, unsigned int headroom,
 | 
						|
 			    int cloned)
 | 
						|
 {
 | 
						|
+	unsigned int alloc_headroom = headroom;
 | 
						|
 	int delta = 0;
 | 
						|
 
 | 
						|
 	if (headroom < NET_SKB_PAD)
 | 
						|
-		headroom = NET_SKB_PAD;
 | 
						|
-	if (headroom > skb_headroom(skb))
 | 
						|
-		delta = headroom - skb_headroom(skb);
 | 
						|
+		alloc_headroom = NET_SKB_PAD;
 | 
						|
+	if (headroom > skb_headroom(skb) ||
 | 
						|
+	    (cloned && alloc_headroom > skb_headroom(skb))) {
 | 
						|
+		delta = alloc_headroom - skb_headroom(skb);
 | 
						|
+	}
 | 
						|
 
 | 
						|
 	if (delta || cloned)
 | 
						|
 		return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD), 0,
 |