mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 13:34:27 -04: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,
 |