Skip to content

Commit 16ae6aa

Browse files
yuchungchengdavem330
authored andcommitted
tcp: ignore Fast Open on repair mode
The TCP repair sequence of operation is to first set the socket in repair mode, then inject the TCP stats into the socket with repair socket options, then call connect() to re-activate the socket. The connect syscall simply returns and set state to ESTABLISHED mode. As a result Fast Open is meaningless for TCP repair. However allowing sendto() system call with MSG_FASTOPEN flag half-way during the repair operation could unexpectedly cause data to be sent, before the operation finishes changing the internal TCP stats (e.g. MSS). This in turn triggers TCP warnings on inconsistent packet accounting. The fix is to simply disallow Fast Open operation once the socket is in the repair mode. Reported-by: syzbot <[email protected]> Signed-off-by: Yuchung Cheng <[email protected]> Reviewed-by: Neal Cardwell <[email protected]> Reviewed-by: Eric Dumazet <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent cc2180a commit 16ae6aa

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

net/ipv4/tcp.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1204,7 +1204,8 @@ int tcp_sendmsg_locked(struct sock *sk, struct msghdr *msg, size_t size)
12041204
uarg->zerocopy = 0;
12051205
}
12061206

1207-
if (unlikely(flags & MSG_FASTOPEN || inet_sk(sk)->defer_connect)) {
1207+
if (unlikely(flags & MSG_FASTOPEN || inet_sk(sk)->defer_connect) &&
1208+
!tp->repair) {
12081209
err = tcp_sendmsg_fastopen(sk, msg, &copied_syn, size);
12091210
if (err == -EINPROGRESS && copied_syn > 0)
12101211
goto out;

0 commit comments

Comments
 (0)