From: Tamir Awad <tamir@auth.ink>
To: Kuniyuki Iwashima <kuniyu@google.com>
Cc: Sasha Levin <sashal@kernel.org>,
stable@vger.kernel.org, lee@kernel.org, netdev@vger.kernel.org,
Rodrigo Zaiden <rodrigo.zaiden@canonical.com>
Subject: Re: [PATCH 5.15.y] af_unix: Clear oob_skb in scan_inflight()
Date: Tue, 27 Oct 2026 03:57:32 +0200 [thread overview]
Message-ID: <bb79cd2c-0edc-4e78-9b20-5f3ec976f1ac@auth.ink> (raw)
In-Reply-To: <CAAVpQUBA89A5qjL85pavgcYCpQ9jWFiiQXs9eBbHT+zAX1nC4Q@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 37 bytes --]
I included the patch as a file below.
[-- Attachment #2: af_unix-5.15.y-patch.txt --]
[-- Type: text/plain, Size: 2781 bytes --]
From 58f7f0cf9495d4b74cff8015bd609a7e594718c5 Mon Sep 17 00:00:00 2001
From: Kuniyuki Iwashima <kuniyu@amazon.com>
Date: Mon, 3 Mar 2025 19:01:49 -0800
Subject: [PATCH 5.15.y] af_unix: Clear oob_skb in scan_inflight()
unix_gc() accesses oob_skb after dropping sk_receive_queue.lock. This
can race with queue_oob(). Clear oob_skb in scan_inflight() while the
lock is held.
This resends Kuniyuki Iwashima's March 2025 fix for the old GC. The
code diff is unchanged.
On 5.15.223, the reproducer panicked three unpatched QEMU guests. Three
patched guests completed 8,000 rounds each without a kernel warning.
Both builds used the same config and guest image. An instrumented run
traced the harness's failed racing sends to EPIPE and ECONNRESET and
confirmed all 8,000 iterations reached the race.
Fixes: 314001f0bf92 ("af_unix: Add OOB support")
Link: https://lore.kernel.org/all/20250304030149.82265-1-kuniyu@amazon.com/
Reported-by: Lei Lu <llfamsec@gmail.com>
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Signed-off-by: Tamir Awad <security@auth.ink>
---
net/unix/garbage.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/net/unix/garbage.c b/net/unix/garbage.c
index d2fc795..a733d0d 100644
--- a/net/unix/garbage.c
+++ b/net/unix/garbage.c
@@ -102,13 +102,14 @@ static void scan_inflight(struct sock *x, void (*func)(struct unix_sock *),
/* Process the descriptors of this socket */
int nfd = UNIXCB(skb).fp->count;
struct file **fp = UNIXCB(skb).fp->fp;
+ struct unix_sock *u;
while (nfd--) {
/* Get the socket the fd matches if it indeed does so */
struct sock *sk = unix_get_socket(*fp++);
if (sk) {
- struct unix_sock *u = unix_sk(sk);
+ u = unix_sk(sk);
/* Ignore non-candidates, they could
* have been added to the queues after
@@ -122,6 +123,13 @@ static void scan_inflight(struct sock *x, void (*func)(struct unix_sock *),
}
}
if (hit && hitlist != NULL) {
+#if IS_ENABLED(CONFIG_AF_UNIX_OOB)
+ u = unix_sk(x);
+ if (u->oob_skb) {
+ WARN_ON_ONCE(skb_unref(u->oob_skb));
+ u->oob_skb = NULL;
+ }
+#endif
__skb_unlink(skb, &x->sk_receive_queue);
__skb_queue_tail(hitlist, skb);
}
@@ -299,17 +307,9 @@ void unix_gc(void)
* which are creating the cycle(s).
*/
skb_queue_head_init(&hitlist);
- list_for_each_entry(u, &gc_candidates, link) {
+ list_for_each_entry(u, &gc_candidates, link)
scan_children(&u->sk, inc_inflight, &hitlist);
-#if IS_ENABLED(CONFIG_AF_UNIX_OOB)
- if (u->oob_skb) {
- kfree_skb(u->oob_skb);
- u->oob_skb = NULL;
- }
-#endif
- }
-
/* not_cycle_list contains those sockets which do not make up a
* cycle. Restore these to the inflight list.
*/
--
2.56.0.windows.2
prev parent reply other threads:[~2026-10-27 1:57 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-23 15:00 [PATCH 5.15.y] af_unix: Clear oob_skb in scan_inflight() Tamir Awad
2026-10-24 20:11 ` Sasha Levin
2026-10-24 20:31 ` Tamir Awad
2026-10-25 23:29 ` Sasha Levin
[not found] ` <4ADFAF9F-7A76-4897-9374-914E5A384D8F@auth.ink>
2026-10-25 23:55 ` Tamir Awad
2026-10-27 1:55 ` Kuniyuki Iwashima
2026-10-27 1:57 ` Tamir Awad [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bb79cd2c-0edc-4e78-9b20-5f3ec976f1ac@auth.ink \
--to=tamir@auth.ink \
--cc=kuniyu@google.com \
--cc=lee@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=rodrigo.zaiden@canonical.com \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox