diff options
Diffstat (limited to 'net/core/dev.c')
| -rw-r--r-- | net/core/dev.c | 5 | 
1 files changed, 3 insertions, 2 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index d7fe32c946c..89e33a5d4d9 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2134,7 +2134,8 @@ static bool can_checksum_protocol(netdev_features_t features, __be16 protocol)  static netdev_features_t harmonize_features(struct sk_buff *skb,  	__be16 protocol, netdev_features_t features)  { -	if (!can_checksum_protocol(features, protocol)) { +	if (skb->ip_summed != CHECKSUM_NONE && +	    !can_checksum_protocol(features, protocol)) {  		features &= ~NETIF_F_ALL_CSUM;  		features &= ~NETIF_F_SG;  	} else if (illegal_highdma(skb->dev, skb)) { @@ -3322,7 +3323,7 @@ ncls:  	if (pt_prev) {  		if (unlikely(skb_orphan_frags(skb, GFP_ATOMIC))) -			ret = -ENOMEM; +			goto drop;  		else  			ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev);  	} else {  |