FAILED: patch "[PATCH] statmount: don't call path_put() under namespace semaphore" failed to apply to 6.12-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.12-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-6.12.y
git checkout FETCH_HEAD
git cherry-pick -x e8c84e2082e69335f66c8ade4895e80ec270d7c4
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2025101533-mutt-routing-a332@gregkh' --subject-prefix 'PATCH 6.12.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From e8c84e2082e69335f66c8ade4895e80ec270d7c4 Mon Sep 17 00:00:00 2001
From: Christian Brauner <[email protected]>
Date: Fri, 19 Sep 2025 17:03:51 +0200
Subject: [PATCH] statmount: don't call path_put() under namespace semaphore
Massage statmount() and make sure we don't call path_put() under the namespace semaphore. If we put the last reference we're fscked.
fs/namespace.c +3 -5
@@ -5708,7 +5708,6 @@ static int grab_requested_root(struct mnt_namespace *ns, struct path *root)static int do_statmount (struct kstatmount *s,u64 mnt_id,u64 mnt_ns_id,struct mnt_namespace *ns) { - struct path root __free(path_put) = {};struct mount *m;int err;
@@ -5720,7 +5719,7 @@ static int do_statmount(struct kstatmount *s, u64 mnt_id, u64 mnt_ns_id,if (!s->mnt)return -ENOENT ; - err =grab_requested_root (ns, &root); + err =grab_requested_root (ns, &s->root);if (err)return err;
@@ -5729,7 +5728,7 @@ static int do_statmount(struct kstatmount *s, u64 mnt_id, u64 mnt_ns_id,* mounts to show users. */ m =real_mount (s->mnt); -if (!is_path_reachable (m, m->mnt.mnt_root, &root) && +if (!is_path_reachable (m, m->mnt.mnt_root, &s->root) && !ns_capable_noaudit (ns->user_ns,CAP_SYS_ADMIN ))return -EPERM ;
@@ -5737,8 +5736,6 @@ static int do_statmount(struct kstatmount *s, u64 mnt_id, u64 mnt_ns_id,if (err)return err; - s->root = root; -/* * Note that mount properties in mnt->mnt_flags, mnt->mnt_idmap * can change concurrently as we only hold the read-side of the
@@ -5960,6 +5957,7 @@ SYSCALL_DEFINE4(statmount, const struct mnt_id_req __user *, req,if (!ret) ret =copy_statmount_to_user (ks);kvfree (ks->seq.buf); +path_put (&ks->root);if (retry_statmount (ret, &seq_size)) goto retry;return ret;
Sasha Levin
maintainerPATCH 1/1 statmount: don't call path_put() under namespace semaphore
From: Christian Brauner <[email protected]>
[ Upstream commit e8c84e2082e69335f66c8ade4895e80ec270d7c4 ]
Massage statmount() and make sure we don't call path_put() under the namespace semaphore. If we put the last reference we're fscked.
--- fs/namespace.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
fs/namespace.c +3 -5
@@ -5200,7 +5200,6 @@ static int grab_requested_root(struct mnt_namespace *ns, struct path *root)static int do_statmount (struct kstatmount *s,u64 mnt_id,u64 mnt_ns_id,struct mnt_namespace *ns) { - struct path root __free(path_put) = {};struct mount *m;int err;
@@ -5212,7 +5211,7 @@ static int do_statmount(struct kstatmount *s, u64 mnt_id, u64 mnt_ns_id,if (!s->mnt)return -ENOENT ; - err =grab_requested_root (ns, &root); + err =grab_requested_root (ns, &s->root);if (err)return err;
@@ -5221,15 +5220,13 @@ static int do_statmount(struct kstatmount *s, u64 mnt_id, u64 mnt_ns_id,* mounts to show users. */ m =real_mount (s->mnt); -if (!is_path_reachable (m, m->mnt.mnt_root, &root) && +if (!is_path_reachable (m, m->mnt.mnt_root, &s->root) && !ns_capable_noaudit (ns->user_ns,CAP_SYS_ADMIN ))return -EPERM ; err =security_sb_statfs (s->mnt->mnt_root);if (err)return err; - - s->root = root;if (s->mask &STATMOUNT_SB_BASIC )statmount_sb_basic (s);
@@ -5406,6 +5403,7 @@ SYSCALL_DEFINE4(statmount, const struct mnt_id_req __user *, req,if (!ret) ret =copy_statmount_to_user (ks);kvfree (ks->seq.buf); +path_put (&ks->root);if (retry_statmount (ret, &seq_size)) goto retry;return ret;
Signature · 1 line
2.51.0