[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210913223850.660578-1-kuba@kernel.org>
Date: Mon, 13 Sep 2021 15:38:50 -0700
From: Jakub Kicinski <kuba@...nel.org>
To: eric.dumazet@...il.com
Cc: willemb@...gle.com, netdev@...r.kernel.org,
Jakub Kicinski <kuba@...nel.org>
Subject: [RFC net] net: stream: don't purge sk_error_queue without holding its lock
sk_stream_kill_queues() can be called when there are still
outstanding skbs to transmit. Those skbs may try to queue
notifications to the error queue (e.g. timestamps).
If sk_stream_kill_queues() purges the queue without taking
its lock the queue may get corrupted.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Jakub Kicinski <kuba@...nel.org>
---
Sending as an RFC for review, compile-tested only.
Seems far more likely that I'm missing something than that
this has been broken forever and nobody noticed :S
---
net/core/stream.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/core/stream.c b/net/core/stream.c
index 4f1d4aa5fb38..7c585088f394 100644
--- a/net/core/stream.c
+++ b/net/core/stream.c
@@ -196,7 +196,7 @@ void sk_stream_kill_queues(struct sock *sk)
__skb_queue_purge(&sk->sk_receive_queue);
/* Next, the error queue. */
- __skb_queue_purge(&sk->sk_error_queue);
+ skb_queue_purge(&sk->sk_error_queue);
/* Next, the write queue. */
WARN_ON(!skb_queue_empty(&sk->sk_write_queue));
--
2.31.1
Powered by blists - more mailing lists