public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] locking/rwsem: Fix logic error in rwsem_del_waiter()
@ 2026-03-14 18:26 Andrei Vagin
  2026-03-16 11:51 ` Peter Zijlstra
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Andrei Vagin @ 2026-03-14 18:26 UTC (permalink / raw)
  To: Matthew Wilcox (Oracle), Peter Zijlstra
  Cc: Ingo Molnar, Will Deacon, Boqun Feng, Waiman Long, linux-kernel,
	Andrei Vagin, syzbot+3d2ff92c67127d337463

Commit 1ea4b473504b ("locking/rwsem: Remove the list_head from struct
rw_semaphore") introduced a logic error in rwsem_del_waiter().

The root cause of this issue is an inconsistency in the return values of
__rwsem_del_waiter() and rwsem_del_waiter(). Specifically,
__rwsem_del_waiter() returns true when the wait list becomes empty,
whereas rwsem_del_waiter() is supposed to return true if the wait list
is NOT empty.

This caused a null pointer dereference in rwsem_mark_wake() because it
was being called when sem->first_waiter was NULL.

Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Reported-by: syzbot+3d2ff92c67127d337463@syzkaller.appspotmail.com
Tested-by: syzbot+3d2ff92c67127d337463@syzkaller.appspotmail.com
Fixes: 1ea4b473504b ("locking/rwsem: Remove the list_head from struct rw_semaphore")
Signed-off-by: Andrei Vagin <avagin@google.com>
---
 kernel/locking/rwsem.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
index ba4cb74de064..bf647097369c 100644
--- a/kernel/locking/rwsem.c
+++ b/kernel/locking/rwsem.c
@@ -370,7 +370,7 @@ bool __rwsem_del_waiter(struct rw_semaphore *sem, struct rwsem_waiter *waiter)
 {
 	if (list_empty(&waiter->list)) {
 		sem->first_waiter = NULL;
-		return true;
+		return false;
 	}
 
 	if (sem->first_waiter == waiter) {
@@ -379,7 +379,7 @@ bool __rwsem_del_waiter(struct rw_semaphore *sem, struct rwsem_waiter *waiter)
 	}
 	list_del(&waiter->list);
 
-	return false;
+	return true;
 }
 
 /*
-- 
2.53.0.851.ga537e3e6e9-goog


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2026-03-18 20:31 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-14 18:26 [PATCH] locking/rwsem: Fix logic error in rwsem_del_waiter() Andrei Vagin
2026-03-16 11:51 ` Peter Zijlstra
     [not found] ` <025cdbad-99e1-4342-9f37-2564c555a8d1@redhat.com>
2026-03-16 17:49   ` Waiman Long
2026-03-16 19:04     ` Waiman Long
2026-03-17 21:23       ` Andrei Vagin
2026-03-17 23:39         ` Waiman Long
2026-03-18  8:02 ` [tip: locking/core] " tip-bot2 for Andrei Vagin
2026-03-18 16:49   ` Andrei Vagin
2026-03-18 17:15     ` Waiman Long
2026-03-18 20:31     ` Peter Zijlstra

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox