public inbox for linux-fsdevel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] aio: Fix null ptr deref in aio_complete() wakeup
@ 2024-03-31 21:52 Kent Overstreet
  2024-04-01  8:39 ` Christian Brauner
  2024-04-01 16:40 ` Mitchell Augustin
  0 siblings, 2 replies; 3+ messages in thread
From: Kent Overstreet @ 2024-03-31 21:52 UTC (permalink / raw)
  To: Christian Brauner, Linus Torvalds
  Cc: linux-fsdevel, Mitchell Augustin, Kent Overstreet, linux-stable

list_del_init_careful() needs to be the last access to the wait queue
entry - it effectively unlocks access.

Previously, finish_wait() would see the empty list head and skip taking
the lock, and then we'd return - but the completion path would still
attempt to do the wakeup after the task_struct pointer had been
overwritten.

Fixes: 71eb6b6b0ba9 fs/aio: obey min_nr when doing wakeups
Cc: linux-stable@vger.kernel.org
Link: https://lore.kernel.org/linux-fsdevel/CAHTA-ubfwwB51A5Wg5M6H_rPEQK9pNf8FkAGH=vr=FEkyRrtqw@mail.gmail.com/
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
---
 fs/aio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/aio.c b/fs/aio.c
index 9cdaa2faa536..0f4f531c9780 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -1202,8 +1202,8 @@ static void aio_complete(struct aio_kiocb *iocb)
 		spin_lock_irqsave(&ctx->wait.lock, flags);
 		list_for_each_entry_safe(curr, next, &ctx->wait.head, w.entry)
 			if (avail >= curr->min_nr) {
-				list_del_init_careful(&curr->w.entry);
 				wake_up_process(curr->w.private);
+				list_del_init_careful(&curr->w.entry);
 			}
 		spin_unlock_irqrestore(&ctx->wait.lock, flags);
 	}
-- 
2.43.0


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

end of thread, other threads:[~2024-04-01 16:40 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-31 21:52 [PATCH] aio: Fix null ptr deref in aio_complete() wakeup Kent Overstreet
2024-04-01  8:39 ` Christian Brauner
2024-04-01 16:40 ` Mitchell Augustin

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