FAILED: patch "[PATCH] nvmet: fix a use-after-free" failed to apply to 4.9-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.9-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]>.
Possible dependencies:
6a02a61e81c2 ("nvmet: fix a use-after-free")a5448fdc469d ("nvmet: introduce target-side trace")76574f37bf4c ("nvmet: add interface to update error-log page") 872d26a391da ("nvmet-tcp: add NVMe over TCP target driver") cb019da3dabf ("nvmet: use unlikely for req status check") e6a622fd6d66 ("nvmet: support fabrics sq flow control") 55eb942eda2c ("nvmet: add buffered I/O support for file backed ns") d5eff33ee6f8 ("nvmet: add simple file backed ns support") 618cff4285dc ("nvmet: remove duplicate NULL initialization for req->ns") e929f06d9eaa ("nvmet: constify struct nvmet_fabrics_ops") 4c6526858810 ("nvmet: don't return "any" ip address in discovery log page") 423b4487fb23 ("nvmet: release a ns reference in nvmet_req_uninit if needed")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 6a02a61e81c231cc5c680c5dbf8665275147ac52 Mon Sep 17 00:00:00 2001
From: Bart Van Assche <[email protected]>
Date: Fri, 12 Aug 2022 14:03:17 -0700
Subject: [PATCH] nvmet: fix a use-after-free
Fix the following use-after-free complaint triggered by blktests nvme/004:
BUG: KASAN: user-memory-access in blk_mq_complete_request_remote+0xac/0x350 Read of size 4 at addr 0000607bd1835943 by task kworker/13:1/460 Workqueue: nvmet-wq nvme_loop_execute_work [nvme_loop] Call Trace: show_stack+0x52/0x58 dump_stack_lvl+0x49/0x5e print_report.cold+0x36/0x1e2 kasan_report+0xb9/0xf0 __asan_load4+0x6b/0x80 blk_mq_complete_request_remote+0xac/0x350 nvme_loop_queue_response+0x1df/0x275 [nvme_loop] __nvmet_req_complete+0x132/0x4f0 [nvmet] nvmet_req_complete+0x15/0x40 [nvmet] nvmet_execute_io_connect+0x18a/0x1f0 [nvmet] nvme_loop_execute_work+0x20/0x30 [nvme_loop] process_one_work+0x56e/0xa70 worker_thread+0x2d1/0x640 kthread+0x183/0x1c0 ret_from_fork+0x1f/0x30
drivers/nvme/target/core.c +4 -2
@@ -735,6 +735,8 @@ static void nvmet_set_error(struct nvmet_req *req, u16 status)static void __nvmet_req_complete (struct nvmet_req *req,u16 status) { +struct nvmet_ns *ns = req->ns; +if (!req->sq->sqhd_disabled)nvmet_update_sq_head (req); req->cqe->sq_id =cpu_to_le16 (req->sq->qid);
@@ -745,9 +747,9 @@ static void __nvmet_req_complete(struct nvmet_req *req, u16 status)trace_nvmet_req_complete (req); -if (req->ns) -nvmet_put_namespace (req->ns); req->ops->queue_response (req); +if (ns) +nvmet_put_namespace (ns); }void nvmet_req_complete (struct nvmet_req *req,u16 status)