* [PATCH v2 net-next 0/4] tcp: fix tcp_poll() races
@ 2024-05-28 12:52 Eric Dumazet
2024-05-28 12:52 ` [PATCH v2 net-next 1/4] tcp: add tcp_done_with_error() helper Eric Dumazet
` (4 more replies)
0 siblings, 5 replies; 10+ messages in thread
From: Eric Dumazet @ 2024-05-28 12:52 UTC (permalink / raw)
To: David S . Miller, Jakub Kicinski, Paolo Abeni
Cc: Neal Cardwell, David Laight, netdev, eric.dumazet, Eric Dumazet
Flakes in packetdrill tests stressing epoll_wait()
were root caused to bad ordering in tcp_write_err()
Precisely, we have to call sk_error_report() after
tcp_done().
When fixing this issue, we discovered tcp_abort(),
tcp_v4_err() and tcp_v6_err() had similar issues.
Since tcp_reset() has the correct ordering,
first patch takes part of it and creates
tcp_done_with_error() helper.
v2: added @err parameter to tcp_done_with_error()
as suggested by David Laight.
Eric Dumazet (4):
tcp: add tcp_done_with_error() helper
tcp: fix race in tcp_write_err()
tcp: fix races in tcp_abort()
tcp: fix races in tcp_v[46]_err()
include/net/tcp.h | 1 +
net/ipv4/tcp.c | 8 ++------
net/ipv4/tcp_input.c | 32 +++++++++++++++++++++-----------
net/ipv4/tcp_ipv4.c | 11 +++--------
net/ipv4/tcp_timer.c | 6 +-----
net/ipv6/tcp_ipv6.c | 10 +++-------
6 files changed, 31 insertions(+), 37 deletions(-)
--
2.45.1.288.g0e0cd299f1-goog
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 net-next 1/4] tcp: add tcp_done_with_error() helper
2024-05-28 12:52 [PATCH v2 net-next 0/4] tcp: fix tcp_poll() races Eric Dumazet
@ 2024-05-28 12:52 ` Eric Dumazet
2024-05-28 15:57 ` Neal Cardwell
2024-05-28 12:52 ` [PATCH v2 net-next 2/4] tcp: fix race in tcp_write_err() Eric Dumazet
` (3 subsequent siblings)
4 siblings, 1 reply; 10+ messages in thread
From: Eric Dumazet @ 2024-05-28 12:52 UTC (permalink / raw)
To: David S . Miller, Jakub Kicinski, Paolo Abeni
Cc: Neal Cardwell, David Laight, netdev, eric.dumazet, Eric Dumazet
tcp_reset() ends with a sequence that is carefuly ordered.
We need to fix [e]poll bugs in the following patches,
it makes sense to use a common helper.
Suggested-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
---
include/net/tcp.h | 1 +
net/ipv4/tcp.c | 2 +-
net/ipv4/tcp_input.c | 32 +++++++++++++++++++++-----------
3 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/include/net/tcp.h b/include/net/tcp.h
index 060e95b331a286ad7c355be11dc03250d2944920..32815a40dea16637d2cc49d46863b532a44fbab3 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -677,6 +677,7 @@ void tcp_skb_collapse_tstamp(struct sk_buff *skb,
/* tcp_input.c */
void tcp_rearm_rto(struct sock *sk);
void tcp_synack_rtt_meas(struct sock *sk, struct request_sock *req);
+void tcp_done_with_error(struct sock *sk, int err);
void tcp_reset(struct sock *sk, struct sk_buff *skb);
void tcp_fin(struct sock *sk);
void tcp_check_space(struct sock *sk);
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 681b54e1f3a64387787738ab6495531b8abe1771..2a8f8d8676ff1d30ea9f8cd47ccf9236940eb299 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -598,7 +598,7 @@ __poll_t tcp_poll(struct file *file, struct socket *sock, poll_table *wait)
*/
mask |= EPOLLOUT | EPOLLWRNORM;
}
- /* This barrier is coupled with smp_wmb() in tcp_reset() */
+ /* This barrier is coupled with smp_wmb() in tcp_done_with_error() */
smp_rmb();
if (READ_ONCE(sk->sk_err) ||
!skb_queue_empty_lockless(&sk->sk_error_queue))
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 9c04a9c8be9dfaa0ec2437b3748284e57588b216..5aadf64e554d8009b2739613c279bbf82a05bbdd 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -4436,9 +4436,26 @@ static enum skb_drop_reason tcp_sequence(const struct tcp_sock *tp,
return SKB_NOT_DROPPED_YET;
}
+
+void tcp_done_with_error(struct sock *sk, int err)
+{
+ /* This barrier is coupled with smp_rmb() in tcp_poll() */
+ WRITE_ONCE(sk->sk_err, err);
+ smp_wmb();
+
+ tcp_write_queue_purge(sk);
+ tcp_done(sk);
+
+ if (!sock_flag(sk, SOCK_DEAD))
+ sk_error_report(sk);
+}
+EXPORT_SYMBOL(tcp_done_with_error);
+
/* When we get a reset we do this. */
void tcp_reset(struct sock *sk, struct sk_buff *skb)
{
+ int err;
+
trace_tcp_receive_reset(sk);
/* mptcp can't tell us to ignore reset pkts,
@@ -4450,24 +4467,17 @@ void tcp_reset(struct sock *sk, struct sk_buff *skb)
/* We want the right error as BSD sees it (and indeed as we do). */
switch (sk->sk_state) {
case TCP_SYN_SENT:
- WRITE_ONCE(sk->sk_err, ECONNREFUSED);
+ err = ECONNREFUSED;
break;
case TCP_CLOSE_WAIT:
- WRITE_ONCE(sk->sk_err, EPIPE);
+ err = EPIPE;
break;
case TCP_CLOSE:
return;
default:
- WRITE_ONCE(sk->sk_err, ECONNRESET);
+ err = ECONNRESET;
}
- /* This barrier is coupled with smp_rmb() in tcp_poll() */
- smp_wmb();
-
- tcp_write_queue_purge(sk);
- tcp_done(sk);
-
- if (!sock_flag(sk, SOCK_DEAD))
- sk_error_report(sk);
+ tcp_done_with_error(sk, err);
}
/*
--
2.45.1.288.g0e0cd299f1-goog
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 net-next 2/4] tcp: fix race in tcp_write_err()
2024-05-28 12:52 [PATCH v2 net-next 0/4] tcp: fix tcp_poll() races Eric Dumazet
2024-05-28 12:52 ` [PATCH v2 net-next 1/4] tcp: add tcp_done_with_error() helper Eric Dumazet
@ 2024-05-28 12:52 ` Eric Dumazet
2024-05-28 15:57 ` Neal Cardwell
2024-05-28 12:52 ` [PATCH v2 net-next 3/4] tcp: fix races in tcp_abort() Eric Dumazet
` (2 subsequent siblings)
4 siblings, 1 reply; 10+ messages in thread
From: Eric Dumazet @ 2024-05-28 12:52 UTC (permalink / raw)
To: David S . Miller, Jakub Kicinski, Paolo Abeni
Cc: Neal Cardwell, David Laight, netdev, eric.dumazet, Eric Dumazet
I noticed flakes in a packetdrill test, expecting an epoll_wait()
to return EPOLLERR | EPOLLHUP on a failed connect() attempt,
after multiple SYN retransmits. It sometimes return EPOLLERR only.
The issue is that tcp_write_err():
1) writes an error in sk->sk_err,
2) calls sk_error_report(),
3) then calls tcp_done().
tcp_done() is writing SHUTDOWN_MASK into sk->sk_shutdown,
among other things.
Problem is that the awaken user thread (from 2) sk_error_report())
might call tcp_poll() before tcp_done() has written sk->sk_shutdown.
tcp_poll() only sees a non zero sk->sk_err and returns EPOLLERR.
This patch fixes the issue by making sure to call sk_error_report()
after tcp_done().
tcp_write_err() also lacks an smp_wmb().
We can reuse tcp_done_with_error() to factor out the details,
as Neal suggested.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Eric Dumazet <edumazet@google.com>
---
net/ipv4/tcp_timer.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
index 83fe7f62f7f10ab111512a3ef15a97a04c79cb4a..3e8604ae7d06c5b010a2034e3295675a7d358f13 100644
--- a/net/ipv4/tcp_timer.c
+++ b/net/ipv4/tcp_timer.c
@@ -74,11 +74,7 @@ u32 tcp_clamp_probe0_to_user_timeout(const struct sock *sk, u32 when)
static void tcp_write_err(struct sock *sk)
{
- WRITE_ONCE(sk->sk_err, READ_ONCE(sk->sk_err_soft) ? : ETIMEDOUT);
- sk_error_report(sk);
-
- tcp_write_queue_purge(sk);
- tcp_done(sk);
+ tcp_done_with_error(sk, READ_ONCE(sk->sk_err_soft) ? : ETIMEDOUT);
__NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPABORTONTIMEOUT);
}
--
2.45.1.288.g0e0cd299f1-goog
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 net-next 3/4] tcp: fix races in tcp_abort()
2024-05-28 12:52 [PATCH v2 net-next 0/4] tcp: fix tcp_poll() races Eric Dumazet
2024-05-28 12:52 ` [PATCH v2 net-next 1/4] tcp: add tcp_done_with_error() helper Eric Dumazet
2024-05-28 12:52 ` [PATCH v2 net-next 2/4] tcp: fix race in tcp_write_err() Eric Dumazet
@ 2024-05-28 12:52 ` Eric Dumazet
2024-05-28 15:58 ` Neal Cardwell
2024-05-28 12:52 ` [PATCH v2 net-next 4/4] tcp: fix races in tcp_v[46]_err() Eric Dumazet
2024-05-30 0:30 ` [PATCH v2 net-next 0/4] tcp: fix tcp_poll() races patchwork-bot+netdevbpf
4 siblings, 1 reply; 10+ messages in thread
From: Eric Dumazet @ 2024-05-28 12:52 UTC (permalink / raw)
To: David S . Miller, Jakub Kicinski, Paolo Abeni
Cc: Neal Cardwell, David Laight, netdev, eric.dumazet, Eric Dumazet
tcp_abort() has the same issue than the one fixed in the prior patch
in tcp_write_err().
In order to get consistent results from tcp_poll(), we must call
sk_error_report() after tcp_done().
We can use tcp_done_with_error() to centralize this logic.
Fixes: c1e64e298b8c ("net: diag: Support destroying TCP sockets.")
Signed-off-by: Eric Dumazet <edumazet@google.com>
---
net/ipv4/tcp.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 2a8f8d8676ff1d30ea9f8cd47ccf9236940eb299..5fa68e7f6ddbfd325523365cb41de07d5b938e47 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -4576,14 +4576,10 @@ int tcp_abort(struct sock *sk, int err)
bh_lock_sock(sk);
if (!sock_flag(sk, SOCK_DEAD)) {
- WRITE_ONCE(sk->sk_err, err);
- /* This barrier is coupled with smp_rmb() in tcp_poll() */
- smp_wmb();
- sk_error_report(sk);
if (tcp_need_reset(sk->sk_state))
tcp_send_active_reset(sk, GFP_ATOMIC,
SK_RST_REASON_NOT_SPECIFIED);
- tcp_done(sk);
+ tcp_done_with_error(sk, err);
}
bh_unlock_sock(sk);
--
2.45.1.288.g0e0cd299f1-goog
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 net-next 4/4] tcp: fix races in tcp_v[46]_err()
2024-05-28 12:52 [PATCH v2 net-next 0/4] tcp: fix tcp_poll() races Eric Dumazet
` (2 preceding siblings ...)
2024-05-28 12:52 ` [PATCH v2 net-next 3/4] tcp: fix races in tcp_abort() Eric Dumazet
@ 2024-05-28 12:52 ` Eric Dumazet
2024-05-28 15:58 ` Neal Cardwell
2024-05-30 0:30 ` [PATCH v2 net-next 0/4] tcp: fix tcp_poll() races patchwork-bot+netdevbpf
4 siblings, 1 reply; 10+ messages in thread
From: Eric Dumazet @ 2024-05-28 12:52 UTC (permalink / raw)
To: David S . Miller, Jakub Kicinski, Paolo Abeni
Cc: Neal Cardwell, David Laight, netdev, eric.dumazet, Eric Dumazet
These functions have races when they:
1) Write sk->sk_err
2) call sk_error_report(sk)
3) call tcp_done(sk)
As described in prior patches in this series:
An smp_wmb() is missing.
We should call tcp_done() before sk_error_report(sk)
to have consistent tcp_poll() results on SMP hosts.
Use tcp_done_with_error() where we centralized the
correct sequence.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Eric Dumazet <edumazet@google.com>
---
net/ipv4/tcp_ipv4.c | 11 +++--------
net/ipv6/tcp_ipv6.c | 10 +++-------
2 files changed, 6 insertions(+), 15 deletions(-)
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 30ef0c8f5e92d301c31ea1a05f662c1fc4cf37af..158fad0cbe43d2029461f6cef3ee698c2acce528 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -611,15 +611,10 @@ int tcp_v4_err(struct sk_buff *skb, u32 info)
ip_icmp_error(sk, skb, err, th->dest, info, (u8 *)th);
- if (!sock_owned_by_user(sk)) {
- WRITE_ONCE(sk->sk_err, err);
-
- sk_error_report(sk);
-
- tcp_done(sk);
- } else {
+ if (!sock_owned_by_user(sk))
+ tcp_done_with_error(sk, err);
+ else
WRITE_ONCE(sk->sk_err_soft, err);
- }
goto out;
}
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 4c3605485b68e7c333a0144df3d685b3db9ff45d..10c804b3638a99a9ae4cf3d81bd4481ac06703f9 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -490,14 +490,10 @@ static int tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
ipv6_icmp_error(sk, skb, err, th->dest, ntohl(info), (u8 *)th);
- if (!sock_owned_by_user(sk)) {
- WRITE_ONCE(sk->sk_err, err);
- sk_error_report(sk); /* Wake people up to see the error (see connect in sock.c) */
-
- tcp_done(sk);
- } else {
+ if (!sock_owned_by_user(sk))
+ tcp_done_with_error(sk, err);
+ else
WRITE_ONCE(sk->sk_err_soft, err);
- }
goto out;
case TCP_LISTEN:
break;
--
2.45.1.288.g0e0cd299f1-goog
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 net-next 1/4] tcp: add tcp_done_with_error() helper
2024-05-28 12:52 ` [PATCH v2 net-next 1/4] tcp: add tcp_done_with_error() helper Eric Dumazet
@ 2024-05-28 15:57 ` Neal Cardwell
0 siblings, 0 replies; 10+ messages in thread
From: Neal Cardwell @ 2024-05-28 15:57 UTC (permalink / raw)
To: Eric Dumazet
Cc: David S . Miller, Jakub Kicinski, Paolo Abeni, David Laight,
netdev, eric.dumazet
On Tue, May 28, 2024 at 8:53 AM Eric Dumazet <edumazet@google.com> wrote:
>
> tcp_reset() ends with a sequence that is carefuly ordered.
>
> We need to fix [e]poll bugs in the following patches,
> it makes sense to use a common helper.
>
> Suggested-by: Neal Cardwell <ncardwell@google.com>
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> ---
Acked-by: Neal Cardwell <ncardwell@google.com>
Thanks, Eric!
neal
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 net-next 2/4] tcp: fix race in tcp_write_err()
2024-05-28 12:52 ` [PATCH v2 net-next 2/4] tcp: fix race in tcp_write_err() Eric Dumazet
@ 2024-05-28 15:57 ` Neal Cardwell
0 siblings, 0 replies; 10+ messages in thread
From: Neal Cardwell @ 2024-05-28 15:57 UTC (permalink / raw)
To: Eric Dumazet
Cc: David S . Miller, Jakub Kicinski, Paolo Abeni, David Laight,
netdev, eric.dumazet
On Tue, May 28, 2024 at 8:53 AM Eric Dumazet <edumazet@google.com> wrote:
>
> I noticed flakes in a packetdrill test, expecting an epoll_wait()
> to return EPOLLERR | EPOLLHUP on a failed connect() attempt,
> after multiple SYN retransmits. It sometimes return EPOLLERR only.
>
> The issue is that tcp_write_err():
> 1) writes an error in sk->sk_err,
> 2) calls sk_error_report(),
> 3) then calls tcp_done().
>
> tcp_done() is writing SHUTDOWN_MASK into sk->sk_shutdown,
> among other things.
>
> Problem is that the awaken user thread (from 2) sk_error_report())
> might call tcp_poll() before tcp_done() has written sk->sk_shutdown.
>
> tcp_poll() only sees a non zero sk->sk_err and returns EPOLLERR.
>
> This patch fixes the issue by making sure to call sk_error_report()
> after tcp_done().
>
> tcp_write_err() also lacks an smp_wmb().
>
> We can reuse tcp_done_with_error() to factor out the details,
> as Neal suggested.
>
> Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> ---
Acked-by: Neal Cardwell <ncardwell@google.com>
Thanks, Eric!
neal
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 net-next 3/4] tcp: fix races in tcp_abort()
2024-05-28 12:52 ` [PATCH v2 net-next 3/4] tcp: fix races in tcp_abort() Eric Dumazet
@ 2024-05-28 15:58 ` Neal Cardwell
0 siblings, 0 replies; 10+ messages in thread
From: Neal Cardwell @ 2024-05-28 15:58 UTC (permalink / raw)
To: Eric Dumazet
Cc: David S . Miller, Jakub Kicinski, Paolo Abeni, David Laight,
netdev, eric.dumazet
On Tue, May 28, 2024 at 8:53 AM Eric Dumazet <edumazet@google.com> wrote:
>
> tcp_abort() has the same issue than the one fixed in the prior patch
> in tcp_write_err().
>
> In order to get consistent results from tcp_poll(), we must call
> sk_error_report() after tcp_done().
>
> We can use tcp_done_with_error() to centralize this logic.
>
> Fixes: c1e64e298b8c ("net: diag: Support destroying TCP sockets.")
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> ---
Acked-by: Neal Cardwell <ncardwell@google.com>
Thanks, Eric!
neal
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 net-next 4/4] tcp: fix races in tcp_v[46]_err()
2024-05-28 12:52 ` [PATCH v2 net-next 4/4] tcp: fix races in tcp_v[46]_err() Eric Dumazet
@ 2024-05-28 15:58 ` Neal Cardwell
0 siblings, 0 replies; 10+ messages in thread
From: Neal Cardwell @ 2024-05-28 15:58 UTC (permalink / raw)
To: Eric Dumazet
Cc: David S . Miller, Jakub Kicinski, Paolo Abeni, David Laight,
netdev, eric.dumazet
On Tue, May 28, 2024 at 8:53 AM Eric Dumazet <edumazet@google.com> wrote:
>
> These functions have races when they:
>
> 1) Write sk->sk_err
> 2) call sk_error_report(sk)
> 3) call tcp_done(sk)
>
> As described in prior patches in this series:
>
> An smp_wmb() is missing.
> We should call tcp_done() before sk_error_report(sk)
> to have consistent tcp_poll() results on SMP hosts.
>
> Use tcp_done_with_error() where we centralized the
> correct sequence.
>
> Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> ---
Acked-by: Neal Cardwell <ncardwell@google.com>
Thanks, Eric!
neal
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 net-next 0/4] tcp: fix tcp_poll() races
2024-05-28 12:52 [PATCH v2 net-next 0/4] tcp: fix tcp_poll() races Eric Dumazet
` (3 preceding siblings ...)
2024-05-28 12:52 ` [PATCH v2 net-next 4/4] tcp: fix races in tcp_v[46]_err() Eric Dumazet
@ 2024-05-30 0:30 ` patchwork-bot+netdevbpf
4 siblings, 0 replies; 10+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-05-30 0:30 UTC (permalink / raw)
To: Eric Dumazet
Cc: davem, kuba, pabeni, ncardwell, David.Laight, netdev,
eric.dumazet
Hello:
This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Tue, 28 May 2024 12:52:49 +0000 you wrote:
> Flakes in packetdrill tests stressing epoll_wait()
> were root caused to bad ordering in tcp_write_err()
>
> Precisely, we have to call sk_error_report() after
> tcp_done().
>
> When fixing this issue, we discovered tcp_abort(),
> tcp_v4_err() and tcp_v6_err() had similar issues.
>
> [...]
Here is the summary with links:
- [v2,net-next,1/4] tcp: add tcp_done_with_error() helper
https://git.kernel.org/netdev/net-next/c/5e514f1cba09
- [v2,net-next,2/4] tcp: fix race in tcp_write_err()
https://git.kernel.org/netdev/net-next/c/853c3bd7b791
- [v2,net-next,3/4] tcp: fix races in tcp_abort()
https://git.kernel.org/netdev/net-next/c/5ce4645c23cf
- [v2,net-next,4/4] tcp: fix races in tcp_v[46]_err()
https://git.kernel.org/netdev/net-next/c/fde6f897f2a1
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2024-05-30 0:30 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-28 12:52 [PATCH v2 net-next 0/4] tcp: fix tcp_poll() races Eric Dumazet
2024-05-28 12:52 ` [PATCH v2 net-next 1/4] tcp: add tcp_done_with_error() helper Eric Dumazet
2024-05-28 15:57 ` Neal Cardwell
2024-05-28 12:52 ` [PATCH v2 net-next 2/4] tcp: fix race in tcp_write_err() Eric Dumazet
2024-05-28 15:57 ` Neal Cardwell
2024-05-28 12:52 ` [PATCH v2 net-next 3/4] tcp: fix races in tcp_abort() Eric Dumazet
2024-05-28 15:58 ` Neal Cardwell
2024-05-28 12:52 ` [PATCH v2 net-next 4/4] tcp: fix races in tcp_v[46]_err() Eric Dumazet
2024-05-28 15:58 ` Neal Cardwell
2024-05-30 0:30 ` [PATCH v2 net-next 0/4] tcp: fix tcp_poll() races patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).