On 02/26/2019 07:59 AM, Stephen Hemminger wrote:
> 
> 
> Maybe the fix is to stop TSO fragment from overwriting by doing something 
> like:
> 
> diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
> index 730bc44dbad9..5fe91d0224f6 100644
> --- a/net/ipv4/tcp_output.c
> +++ b/net/ipv4/tcp_output.c
> @@ -1856,7 +1856,7 @@ static int tso_fragment(struct sock *sk, enum tcp_queue 
> tcp_queue,
>       u8 flags;
>  
>       /* All of a TSO frame must be composed of paged data.  */
> -     if (skb->len != skb->data_len)
> +     if (skb->len != skb->data_len || skb_cloned(skb))
>               return tcp_fragment(sk, tcp_queue, skb, len, mss_now, gfp);
>  
>       buff = sk_stream_alloc_skb(sk, 0, gfp, true);
> 


tso_fragment() is only called with packets that were not yet transmit.



Reply via email to