FAILED: patch "[PATCH] fuse: wait for FR_FINISHED on abort_on_kill to prevent" failed to apply to 7.1-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 7.1-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]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-7.1.y
git checkout FETCH_HEAD
git cherry-pick -x 64b0b5cacbd2fea88001464cb712c9dfc795b26e
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026083100-flyable-tidings-a936@gregkh' --subject-prefix 'PATCH 7.1.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 64b0b5cacbd2fea88001464cb712c9dfc795b26e Mon Sep 17 00:00:00 2001
From: Rochan Avlur <[email protected]>
Date: Wed, 12 Aug 2026 20:58:36 -0700
Subject: [PATCH] fuse: wait for FR_FINISHED on abort_on_kill to prevent
use-after-free
The abort_on_kill path in request_wait_answer() calls fuse_abort_conn() and returns without waiting for FR_FINISHED. If fuse_dev_do_write() is concurrently processing the same request (FR_LOCKED set), the caller frees req->args while it is still being accessed, causing a use-after-free.
Fix this by jumping to the existing wait_event(FR_FINISHED) instead of returning early. The wait will not hang because fuse_abort_conn() ensures all requests are ended.
fs/fuse/dev.c +2 -1
@@ -724,7 +724,7 @@ static void request_wait_answer(struct fuse_req *req)if (req->args->abort_on_kill) {fuse_chan_abort (fch, false); -return ; + goto wait_for_finish; }if (test_bit (FR_URING , &req->flags))
@@ -735,6 +735,7 @@ static void request_wait_answer(struct fuse_req *req)return ; } +wait_for_finish:/* * Either request is already in userspace, or it was forced. * Wait it out.
PATCH 1/1 fuse: wait for FR_FINISHED on abort_on_kill to prevent use-after-free
The abort_on_kill path in request_wait_answer() calls fuse_abort_conn() and returns without waiting for FR_FINISHED. If fuse_dev_do_write() is concurrently processing the same request (FR_LOCKED set), the caller frees req->args while it is still being accessed, causing a use-after-free.
Fix this by jumping to the existing wait_event(FR_FINISHED) instead of returning early. The wait will not hang because fuse_abort_conn() ensures all requests are ended.
--- fs/fuse/dev.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/fuse/dev.c +2 -1
@@ -580,7 +580,7 @@ static void request_wait_answer(struct fuse_req *req)if (req->args->abort_on_kill) {fuse_abort_conn (fc); -return ; + goto wait_for_finish; }if (test_bit (FR_URING , &req->flags))
@@ -591,6 +591,7 @@ static void request_wait_answer(struct fuse_req *req)return ; } +wait_for_finish:/* * Either request is already in userspace, or it was forced. * Wait it out.
Signature · 1 line
2.45.2
Sasha Levin
maintainerRe: [PATCH 7.1.y] fuse: wait for FR_FINISHED on abort_on_kill to prevent use-after-free
Quoted 5 lines
The
abort_on_killpath inrequest_wait_answer()callsfuse_abort_conn()and returns without waiting forFR_FINISHED. Iffuse_dev_do_write()is concurrently processing the same request (FR_LOCKEDset), the caller freesreq->argswhile it is still being accessed, causing a use-after-free.
7.1.y is EOL, so I've queued your patch for 6.18 instead (it applies there unchanged); 7.2 already carries the fix. Thanks.
Signature · 2 lines
Thanks, Sasha