diff options
Diffstat (limited to 'net/ipv4/tcp_output.c')
| -rw-r--r-- | net/ipv4/tcp_output.c | 11 | 
1 files changed, 10 insertions, 1 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 8225e425725..7114031fdc7 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -435,7 +435,16 @@ int tcp_fragment(struct sock *sk, struct sk_buff *skb, u32 len, unsigned int mss  	int nsize, old_factor;  	u16 flags; -	BUG_ON(len >= skb->len); +	if (unlikely(len >= skb->len)) { +		if (net_ratelimit()) { +			printk(KERN_DEBUG "TCP: seg_size=%u, mss=%u, seq=%u, " +			       "end_seq=%u, skb->len=%u.\n", len, mss_now, +			       TCP_SKB_CB(skb)->seq, TCP_SKB_CB(skb)->end_seq, +			       skb->len); +			WARN_ON(1); +		} +		return 0; +	}  	nsize = skb_headlen(skb) - len;  	if (nsize < 0)  |