diff options
Diffstat (limited to 'net/core/skbuff.c')
| -rw-r--r-- | net/core/skbuff.c | 8 | 
1 files changed, 6 insertions, 2 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 80a96166df3..bfa3e7865a8 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -493,6 +493,9 @@ int skb_recycle_check(struct sk_buff *skb, int skb_size)  {  	struct skb_shared_info *shinfo; +	if (irqs_disabled()) +		return 0; +  	if (skb_is_nonlinear(skb) || skb->fclone != SKB_FCLONE_UNAVAILABLE)  		return 0; @@ -546,7 +549,7 @@ static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old)  #endif  	new->protocol		= old->protocol;  	new->mark		= old->mark; -	new->iif		= old->iif; +	new->skb_iif		= old->skb_iif;  	__nf_copy(new, old);  #if defined(CONFIG_NETFILTER_XT_TARGET_TRACE) || \      defined(CONFIG_NETFILTER_XT_TARGET_TRACE_MODULE) @@ -2701,7 +2704,8 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb)  		NAPI_GRO_CB(skb)->free = 1;  		goto done; -	} +	} else if (skb_gro_len(p) != pinfo->gso_size) +		return -E2BIG;  	headroom = skb_headroom(p);  	nskb = netdev_alloc_skb(p->dev, headroom + skb_gro_offset(p));  |