Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e44c1733 authored by Soheil Hassas Yeganeh's avatar Soheil Hassas Yeganeh Committed by Greg Kroah-Hartman
Browse files

tcp: purge write queue upon aborting the connection




[ Upstream commit e05836ac07c77dd90377f8c8140bce2a44af5fe7 ]

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: f214f915 ("tcp: enable MSG_ZEROCOPY")
Signed-off-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
Signed-off-by: default avatarNeal Cardwell <ncardwell@google.com>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarYuchung Cheng <ycheng@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent dbbf2d1e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -3445,6 +3445,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;
}
+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,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);
}