Skip to contentSkip to conversation

tcp: purge write queue upon aborting the connection

PATCH In review Soheil Hassas Yeganeh 2 participants 2 messages Mar 6, 2018 – Mar 7, 2018

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 tcp: purge write queue upon aborting the connection

From: Soheil Hassas Yeganeh <[email protected]>

When the connection is aborted, there is no point in keeping the packets on the write queue until the connection is closed.

Similar to a27fd7a8ed38 ('tcp: purge write queue upon RST'), this is essential for a correct MSG_ZEROCOPY implementation, because userspace cannot call close(fd) before receiving zerocopy signals even when the connection is aborted.

Fixes f214f915e7db ("tcp: enable MSG_ZEROCOPY")
---
 net/ipv4/tcp.c       | 1 +
 net/ipv4/tcp_timer.c | 1 +
 2 files changed, 2 insertions(+)
net/ipv4/tcp.c +1 -0
index 48636aee23c3..8b8059b7af4d 100644
@@ -3566,6 +3566,7 @@ int tcp_abort(struct sock *sk, int err)
 
 	bh_unlock_sock(sk);
 	local_bh_enable();
+	tcp_write_queue_purge(sk);
 	release_sock(sk);
 	return 0;
 }
net/ipv4/tcp_timer.c +1 -0
index 71fc60f1b326..f7d944855f8e 100644
@@ -34,6 +34,7 @@ static void tcp_write_err(struct sock *sk)
 	sk->sk_err = sk->sk_err_soft ? : ETIMEDOUT;
 	sk->sk_error_report(sk);
 
+	tcp_write_queue_purge(sk);
 	tcp_done(sk);
 	__NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPABORTONTIMEOUT);
 }
Signature · 1 line
2.16.2.395.g2e18187dfd-goog
maintainer
#1 lore raw

From: Soheil Hassas Yeganeh <[email protected]>
Date: Tue, 6 Mar 2018 17:15:12 -0500

Quoted 11 lines

From: Soheil Hassas Yeganeh <[email protected]>

When the connection is aborted, there is no point in keeping the packets on the write queue until the connection is closed.

Similar to a27fd7a8ed38 ('tcp: purge write queue upon RST'), this is essential for a correct MSG_ZEROCOPY implementation, because userspace cannot call close(fd) before receiving zerocopy signals even when the connection is aborted.

Quoted 5 lines
Fixes f214f915e7db ("tcp: enable MSG_ZEROCOPY")

Applied and queued up for -stable, thanks.