diff options
Diffstat (limited to 'net/core/dev.c')
| -rw-r--r-- | net/core/dev.c | 15 | 
1 files changed, 10 insertions, 5 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index fb766d906148..11596a302a26 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1147,9 +1147,8 @@ static int dev_alloc_name_ns(struct net *net,  	return ret;  } -static int dev_get_valid_name(struct net *net, -			      struct net_device *dev, -			      const char *name) +int dev_get_valid_name(struct net *net, struct net_device *dev, +		       const char *name)  {  	BUG_ON(!net); @@ -1165,6 +1164,7 @@ static int dev_get_valid_name(struct net *net,  	return 0;  } +EXPORT_SYMBOL(dev_get_valid_name);  /**   *	dev_change_name - change name of a device @@ -1948,8 +1948,12 @@ again:  		goto again;  	}  out_unlock: -	if (pt_prev) -		pt_prev->func(skb2, skb->dev, pt_prev, skb->dev); +	if (pt_prev) { +		if (!skb_orphan_frags_rx(skb2, GFP_ATOMIC)) +			pt_prev->func(skb2, skb->dev, pt_prev, skb->dev); +		else +			kfree_skb(skb2); +	}  	rcu_read_unlock();  }  EXPORT_SYMBOL_GPL(dev_queue_xmit_nit); @@ -3892,6 +3896,7 @@ static u32 netif_receive_generic_xdp(struct sk_buff *skb,  		__skb_pull(skb, off);  	else if (off < 0)  		__skb_push(skb, -off); +	skb->mac_header += off;  	switch (act) {  	case XDP_REDIRECT:  |