diff options
Diffstat (limited to 'net/core/skbuff.c')
| -rw-r--r-- | net/core/skbuff.c | 8 | 
1 files changed, 5 insertions, 3 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 26a586007d8b..cea28d30abb5 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -5224,8 +5224,10 @@ void __skb_tstamp_tx(struct sk_buff *orig_skb,  	} else {  		skb = skb_clone(orig_skb, GFP_ATOMIC); -		if (skb_orphan_frags_rx(skb, GFP_ATOMIC)) +		if (skb_orphan_frags_rx(skb, GFP_ATOMIC)) { +			kfree_skb(skb);  			return; +		}  	}  	if (!skb)  		return; @@ -5298,7 +5300,7 @@ bool skb_partial_csum_set(struct sk_buff *skb, u16 start, u16 off)  	u32 csum_end = (u32)start + (u32)off + sizeof(__sum16);  	u32 csum_start = skb_headroom(skb) + (u32)start; -	if (unlikely(csum_start > U16_MAX || csum_end > skb_headlen(skb))) { +	if (unlikely(csum_start >= U16_MAX || csum_end > skb_headlen(skb))) {  		net_warn_ratelimited("bad partial csum: csum=%u/%u headroom=%u headlen=%u\n",  				     start, off, skb_headroom(skb), skb_headlen(skb));  		return false; @@ -5306,7 +5308,7 @@ bool skb_partial_csum_set(struct sk_buff *skb, u16 start, u16 off)  	skb->ip_summed = CHECKSUM_PARTIAL;  	skb->csum_start = csum_start;  	skb->csum_offset = off; -	skb_set_transport_header(skb, start); +	skb->transport_header = csum_start;  	return true;  }  EXPORT_SYMBOL_GPL(skb_partial_csum_set);  | 
