From: Eric Dumazet <eric.duma...@gmail.com> Date: Tue, 19 Sep 2017 10:05:57 -0700
> From: Eric Dumazet <eduma...@google.com> > > Our recent change exposed a bug in TCP Fastopen Client that syzkaller > found right away [1] > > When we prepare skb with SYN+DATA, we attempt to transmit it, > and we update socket state as if the transmit was a success. > > In socket RTX queue we have two skbs, one with the SYN alone, > and a second one containing the DATA. > > When (malicious) ACK comes in, we now complain that second one had no > skb_mstamp. > > The proper fix is to make sure that if the transmit failed, we do not > pretend we sent the DATA skb, and make it our send_head. > > When 3WHS completes, we can now send the DATA right away, without having > to wait for a timeout. > > [1] ... > Fixes: 8c72c65b426b ("tcp: update skb->skb_mstamp more carefully") > Fixes: 783237e8daf1 ("net-tcp: Fast Open client - sending SYN-data") > Signed-off-by: Eric Dumazet <eduma...@google.com> > Reported-by: Dmitry Vyukov <dvyu...@google.com> Applied, thanks Eric.