This is a note to let you know that I've just added the patch titled fs/aio: Check IOCB_AIO_RW before the struct aio_kiocb conversion to the 6.6-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: fs-aio-check-iocb_aio_rw-before-the-struct-aio_kiocb-conversion.patch and it can be found in the queue-6.6 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From 961ebd120565cb60cebe21cb634fbc456022db4a Mon Sep 17 00:00:00 2001 From: Bart Van Assche <bvanassche@xxxxxxx> Date: Mon, 4 Mar 2024 15:57:15 -0800 Subject: fs/aio: Check IOCB_AIO_RW before the struct aio_kiocb conversion From: Bart Van Assche <bvanassche@xxxxxxx> commit 961ebd120565cb60cebe21cb634fbc456022db4a upstream. The first kiocb_set_cancel_fn() argument may point at a struct kiocb that is not embedded inside struct aio_kiocb. With the current code, depending on the compiler, the req->ki_ctx read happens either before the IOCB_AIO_RW test or after that test. Move the req->ki_ctx read such that it is guaranteed that the IOCB_AIO_RW test happens first. Reported-by: Eric Biggers <ebiggers@xxxxxxxxxx> Cc: Benjamin LaHaise <ben@xxxxxxxxxxxxxxxxx> Cc: Eric Biggers <ebiggers@xxxxxxxxxx> Cc: Christoph Hellwig <hch@xxxxxx> Cc: Avi Kivity <avi@xxxxxxxxxxxx> Cc: Sandeep Dhavale <dhavale@xxxxxxxxxx> Cc: Jens Axboe <axboe@xxxxxxxxx> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> Cc: Kent Overstreet <kent.overstreet@xxxxxxxxx> Cc: stable@xxxxxxxxxxxxxxx Fixes: b820de741ae4 ("fs/aio: Restrict kiocb_set_cancel_fn() to I/O submitted via libaio") Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx> Link: https://lore.kernel.org/r/20240304235715.3790858-1-bvanassche@xxxxxxx Reviewed-by: Jens Axboe <axboe@xxxxxxxxx> Reviewed-by: Eric Biggers <ebiggers@xxxxxxxxxx> Signed-off-by: Christian Brauner <brauner@xxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- fs/aio.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) --- a/fs/aio.c +++ b/fs/aio.c @@ -590,8 +590,8 @@ static int aio_setup_ring(struct kioctx void kiocb_set_cancel_fn(struct kiocb *iocb, kiocb_cancel_fn *cancel) { - struct aio_kiocb *req = container_of(iocb, struct aio_kiocb, rw); - struct kioctx *ctx = req->ki_ctx; + struct aio_kiocb *req; + struct kioctx *ctx; unsigned long flags; /* @@ -601,9 +601,13 @@ void kiocb_set_cancel_fn(struct kiocb *i if (!(iocb->ki_flags & IOCB_AIO_RW)) return; + req = container_of(iocb, struct aio_kiocb, rw); + if (WARN_ON_ONCE(!list_empty(&req->ki_list))) return; + ctx = req->ki_ctx; + spin_lock_irqsave(&ctx->ctx_lock, flags); list_add_tail(&req->ki_list, &ctx->active_reqs); req->ki_cancel = cancel; Patches currently in stable-queue which might be from bvanassche@xxxxxxx are queue-6.6/fs-aio-check-iocb_aio_rw-before-the-struct-aio_kiocb-conversion.patch queue-6.6/revert-block-mq-deadline-use-correct-way-to-throttli.patch