FAILED: patch "[PATCH] io_uring: NULL-deref for IOSQE_{ASYNC,DRAIN}" failed to apply to 5.5-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.5-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From f1d96a8fcbbbb22d4fbc1d69eaaa678bbb0ff6e2 Mon Sep 17 00:00:00 2001
From: Pavel Begunkov <[email protected]>
Date: Fri, 13 Mar 2020 22:29:14 +0300
Subject: [PATCH] io_uring: NULL-deref for IOSQE_{ASYNC,DRAIN}
Processing links, io_submit_sqe() prepares requests, drops sqes, and passes them with sqe=NULL to io_queue_sqe(). There IOSQE_DRAIN and/or IOSQE_ASYNC requests will go through the same prep, which doesn't expect sqe=NULL and fail with NULL pointer deference.
Always do full prepare including io_alloc_async_ctx() for linked requests, and then it can skip the second preparation.
fs/io_uring.c +8 -0
@@ -4131,6 +4131,9 @@ static int io_req_defer_prep(struct io_kiocb *req, {ssize_t ret =0 ; +if (!sqe) +return 0 ; +if (io_op_defs[req->opcode].file_table) { ret =io_grab_files (req);if (unlikely (ret))
@@ -4907,6 +4910,11 @@ static bool io_submit_sqe(struct io_kiocb *req, const struct io_uring_sqe *sqe,if (sqe_flags & (IOSQE_IO_LINK |IOSQE_IO_HARDLINK )) { req->flags |=REQ_F_LINK ;INIT_LIST_HEAD (&req->link_list); + +if (io_alloc_async_ctx (req)) { + ret = -EAGAIN ; + goto err_req; + } ret =io_req_defer_prep (req, sqe);if (ret) req->flags |=REQ_F_FAIL_LINK ;
Quoted 5 lines · On 3/23/20 8:36 AM, [email protected] wrote:
The patch below does not apply to the 5.5-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Here's a tested backport, thanks for letting us know!
From f1d96a8fcbbbb22d4fbc1d69eaaa678bbb0ff6e2 Mon Sep 17 00:00:00 2001
From: Pavel Begunkov <[email protected]>
Date: Fri, 13 Mar 2020 22:29:14 +0300
Subject: [PATCH] io_uring: NULL-deref for IOSQE_{ASYNC,DRAIN}
Processing links, io_submit_sqe() prepares requests, drops sqes, and passes them with sqe=NULL to io_queue_sqe(). There IOSQE_DRAIN and/or IOSQE_ASYNC requests will go through the same prep, which doesn't expect sqe=NULL and fail with NULL pointer deference.
Always do full prepare including io_alloc_async_ctx() for linked requests, and then it can skip the second preparation.
fs/io_uring.c +8 -0
@@ -3097,6 +3097,9 @@ static int io_req_defer_prep(struct io_kiocb *req, {ssize_t ret =0 ; +if (!sqe) +return 0 ; +switch (req->opcode) {case IORING_OP_NOP :break ;
@@ -3680,6 +3683,11 @@ static bool io_submit_sqe(struct io_kiocb *req, const struct io_uring_sqe *sqe, req->flags |=REQ_F_HARDLINK ;INIT_LIST_HEAD (&req->link_list); + +if (io_alloc_async_ctx (req)) { + ret = -EAGAIN ; + goto err_req; + } ret =io_req_defer_prep (req, sqe);if (ret) req->flags |=REQ_F_FAIL_LINK ;
Signature · 1 line
Jens Axboe
Quoted 8 lines · Jens Axboe
Quoted 5 lines · On 3/23/20 8:36 AM, [email protected] wrote:
The patch below does not apply to the 5.5-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.Here's a tested backport, thanks for letting us know!
Queued up, thanks!
Signature · 2 lines
Thanks, Sasha