From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C6B26347BDC; Wed, 11 Mar 2026 21:56:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266174; cv=none; b=RXQqPec/4VK7JOuKRb/VNrJBgExPb4mhPvEotdmtzujsuQzmcqPxV2MeBK3Buku4bzzyNH1HdjDQAPQhBRzka7cx+6ea8c90RDszGpIfuuwzdvZFOvsNvTekujTRceL1w7BN1Sb2stGsSesm6AOyeO/QpBRQIflq/TJYR9j7JVM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266174; c=relaxed/simple; bh=RqPfgxPamFr6lqnt39EHhN5Z6xIcw2+kX2pEDF2HePg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QDbQ3rClhWcN416Gfo7/0LMeNKI9WPRR5cTEjQAsANmIxP+tXZexWmMUv3fItFWmjq2CNZtKBNcimTTaqOIzEU61G5raBer1O5UBbdva6uNMAoosQ7/Bz/7JwSNi/lLzzf2dV5PNBf5vpAB2vTNbsZsP2hsoJT1nitRyR3xSe8s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RR7cDe8s; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="RR7cDe8s" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CF043C4CEF7; Wed, 11 Mar 2026 21:56:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266174; bh=RqPfgxPamFr6lqnt39EHhN5Z6xIcw2+kX2pEDF2HePg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=RR7cDe8sIoV7Mr9xozdCtxpRNbXFZR9o2LjH8/r4P+06X7ee6nQ4FLEXunljXi0pQ f6olV49eAEfBJOP3SMWPBMGO+mhjtMBkUKXzA42MDQALBtvhkWnUqLUmYYqYusTmLz WDHYBcYkVCjVdWPzPo7hhgqYWa7KTe0IlfeRUoxXOm0dNcHKC1zRrEZNSU20m5EG0U 3t0a47XeRaVY5C4jb0Oeqp9XTG6B99vhzfawmZOD+RdcLRKNaBM+/tt5tAjp5GzHCu 2UBu98VBb9i752LUTbpVbb2sgILk2WoF9Z0IBx+z0a+mIooWl24Vvv8hKDjpcw27o1 Wi62iM29MLePg== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:44 +0100 Subject: [PATCH RFC v3 01/26] fs: add switch_fs_struct() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-1-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=2582; i=brauner@kernel.org; h=from:subject:message-id; bh=RqPfgxPamFr6lqnt39EHhN5Z6xIcw2+kX2pEDF2HePg=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPJj+rFNsU46X1u/XJi8M5tDLFy/O60gOmI148/el TV/Tsyw7yhlYRDjYpAVU2RxaDcJl1vOU7HZKFMDZg4rE8gQBi5OAZjIld0M/3SEXea33vEo/fRz /8/Zi0on33nl0XF4Z4SJy0tj81U2ircY/ooE/5h31z+qcbWd9by3CqaxAuK/vb9Xzki9eeRYvgz 7b2YA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Don't open-code the guts of replacing current's fs struct. Signed-off-by: Christian Brauner --- fs/fs_struct.c | 18 ++++++++++++++++++ include/linux/fs_struct.h | 2 ++ kernel/fork.c | 22 ++++++---------------- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/fs/fs_struct.c b/fs/fs_struct.c index 394875d06fd6..c441586537e7 100644 --- a/fs/fs_struct.c +++ b/fs/fs_struct.c @@ -147,6 +147,24 @@ int unshare_fs_struct(void) } EXPORT_SYMBOL_GPL(unshare_fs_struct); =20 +struct fs_struct *switch_fs_struct(struct fs_struct *new_fs) +{ + struct fs_struct *fs; + + scoped_guard(task_lock, current) { + fs =3D current->fs; + read_seqlock_excl(&fs->seq); + current->fs =3D new_fs; + if (--fs->users) + new_fs =3D NULL; + else + new_fs =3D fs; + read_sequnlock_excl(&fs->seq); + } + + return new_fs; +} + /* to be mentioned only in INIT_TASK */ struct fs_struct init_fs =3D { .users =3D 1, diff --git a/include/linux/fs_struct.h b/include/linux/fs_struct.h index 0070764b790a..ade459383f92 100644 --- a/include/linux/fs_struct.h +++ b/include/linux/fs_struct.h @@ -40,6 +40,8 @@ static inline void get_fs_pwd(struct fs_struct *fs, struc= t path *pwd) read_sequnlock_excl(&fs->seq); } =20 +struct fs_struct *switch_fs_struct(struct fs_struct *new_fs); + extern bool current_chrooted(void); =20 static inline int current_umask(void) diff --git a/kernel/fork.c b/kernel/fork.c index 65113a304518..67e57ee44548 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -3123,7 +3123,7 @@ static int unshare_fd(unsigned long unshare_flags, st= ruct files_struct **new_fdp */ int ksys_unshare(unsigned long unshare_flags) { - struct fs_struct *fs, *new_fs =3D NULL; + struct fs_struct *new_fs =3D NULL; struct files_struct *new_fd =3D NULL; struct cred *new_cred =3D NULL; struct nsproxy *new_nsproxy =3D NULL; @@ -3198,23 +3198,13 @@ int ksys_unshare(unsigned long unshare_flags) if (new_nsproxy) switch_task_namespaces(current, new_nsproxy); =20 - task_lock(current); + if (new_fs) + new_fs =3D switch_fs_struct(new_fs); =20 - if (new_fs) { - fs =3D current->fs; - read_seqlock_excl(&fs->seq); - current->fs =3D new_fs; - if (--fs->users) - new_fs =3D NULL; - else - new_fs =3D fs; - read_sequnlock_excl(&fs->seq); - } - - if (new_fd) + if (new_fd) { + guard(task_lock)(current); swap(current->files, new_fd); - - task_unlock(current); + } =20 if (new_cred) { /* Install the new user namespace */ --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9430731F9A3; Wed, 11 Mar 2026 21:56:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266177; cv=none; b=JkwCmOIm57pmC815Wd1k1uHH+ZSzPWO3uF26eFfmUhEspmlljMwL4A+073XsYnMC715fcH3K7dcFx9SfC3rCJP9CP+9K9defERFSMflMTdymOJrpz6uPtiD9+w9cq7qxmWbVhceUeUQndKmPBjT22oDPsywt40pNoE0GJExZc0k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266177; c=relaxed/simple; bh=PLrJo7pAFoBlfQ7T9p5ztHY4D+o6TOQ9sANou7DEIh0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OW/07IbJAtJzbDZCGIlrLTmd3lT5S//3evegl8WspdbQNMF3a42g+zPAO8EjUOrzmL4zsRX0DW+qvNtYhBRewNlc6udRNE1jzt4WI8qrkaycdSP7nEgsK9Hj4MiuRYhoEH/WiQrQOV5ZavCac+YC1Bu9cgN1toyHGJXQXz8J5m4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Zw6BmCQg; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Zw6BmCQg" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 270A8C2BC9E; Wed, 11 Mar 2026 21:56:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266177; bh=PLrJo7pAFoBlfQ7T9p5ztHY4D+o6TOQ9sANou7DEIh0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Zw6BmCQg5vchEkSaG7M0Ca+nLTgp0kz3WHf6qF+LM0jtEKvTYBtjEjcj7y3bBSrVP D+RAyoFli7wrtZ3us8Axx3KsNJlhfI2ftBqf7IL6brFKkBju216J3oXLxp3g/B6JsR GLFk0gONl3CBwVIAKt7TaqomqbZJgBtjAVBgvMRyJZTNzxf38oTLYlWTHmTnxTRkco tn16yPOl6Bb+yOepzIfEwEnGIZPd3COTEmkrdr+paBXEteFSdUmjHYqpnz5MSabfJ/ kTySTK24/CO4Tc9shyUPf2TQaqyYoKl7Rh7VFvsoYtw/8+HiTGyXBJK9jPEvXLn8o7 ayCN0NUng7JbA== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:45 +0100 Subject: [PATCH RFC v3 02/26] fs: notice when init abandons fs sharing Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-2-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=2264; i=brauner@kernel.org; h=from:subject:message-id; bh=PLrJo7pAFoBlfQ7T9p5ztHY4D+o6TOQ9sANou7DEIh0=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPJj6rI7oXYhJ7qdZRa0JTW8/PWl4+yJfXEZrbZR9 4SYftUkdZSyMIhxMciKKbI4tJuEyy3nqdhslKkBM4eVCWQIAxenAExk3U2G/zGHn7xQ2suyvuKX 5M87qYaKxb+rzn1l3KN0eCfv3QZm99+MDLPUYutL5urKLrgarN/70qnVcY16ucLVv2cNj546ZeJ 7lgMA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 PID 1 may choose to stop sharing fs_struct state with us. Either via unshare(CLONE_FS) or unshare(CLONE_NEWNS). Of course, PID 1 could have chosen to create arbitrary process trees that all share fs_struct state via CLONE_FS. This is a strong statement: We only care about PID 1 aka the thread-group leader so subthread's fs_struct state doesn't matter. PID 1 unsharing fs_struct state is a bug. PID 1 relies on various kthreads to be able to perform work based on its fs_struct state. Breaking that contract sucks for both sides. So just don't bother with extra work for this. No sane init system should ever do this. Signed-off-by: Christian Brauner --- fs/fs_struct.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/fs/fs_struct.c b/fs/fs_struct.c index c441586537e7..fcecf209f1a9 100644 --- a/fs/fs_struct.c +++ b/fs/fs_struct.c @@ -147,6 +147,30 @@ int unshare_fs_struct(void) } EXPORT_SYMBOL_GPL(unshare_fs_struct); =20 +/* + * PID 1 may choose to stop sharing fs_struct state with us. + * Either via unshare(CLONE_FS) or unshare(CLONE_NEWNS). Of + * course, PID 1 could have chosen to create arbitrary process + * trees that all share fs_struct state via CLONE_FS. This is a + * strong statement: We only care about PID 1 aka the thread-group + * leader so subthread's fs_struct state doesn't matter. + * + * PID 1 unsharing fs_struct state is a bug. PID 1 relies on + * various kthreads to be able to perform work based on its + * fs_struct state. Breaking that contract sucks for both sides. + * So just don't bother with extra work for this. No sane init + * system should ever do this. + */ +static inline void validate_fs_switch(struct fs_struct *old_fs) +{ + if (likely(current->pid !=3D 1)) + return; + /* @old_fs may be dangling but for comparison it's fine */ + if (old_fs !=3D &init_fs) + return; + pr_warn("VFS: Pid 1 stopped sharing filesystem state\n"); +} + struct fs_struct *switch_fs_struct(struct fs_struct *new_fs) { struct fs_struct *fs; @@ -162,6 +186,7 @@ struct fs_struct *switch_fs_struct(struct fs_struct *ne= w_fs) read_sequnlock_excl(&fs->seq); } =20 + validate_fs_switch(fs); return new_fs; } =20 --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D7BE343D64; Wed, 11 Mar 2026 21:56:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266181; cv=none; b=EY3eIyaHIL2krle89QX9MNwUb0TIFxZ/BvwWcru7Y+KQrkOxWi37Tzyh8DdsupsvRgRhhNsLcbr+lZbfwSxkSkxx8wTbNm096lKyUw2tZ9wKa2HK90UP5vRQ/KcFCZmiiDx8IWfRK+ur4atfjPNrfw5gj4qsP/SbKtdZIb6vsH8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266181; c=relaxed/simple; bh=pKcYYv5NzsH6Tds8Fh0T0OgLaCOFJ6HHiCfJSN8HVgE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bY3LT8xMngJAV13D57msN2bCLoNoN83liKS9w2Juik+ah8Qw3x2VmuyEJiqXmdmiUu+hl5/n2NksRa3r9tAcrBcGVmmJVvS/o0PdUIHoaQ3nF+iKSTZ10cRvKSGzAM3BiaDVEvl0zgbpPjj4coHXFghyeemJQ3wX3RhcMtK91XY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VNfOjvfE; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="VNfOjvfE" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A6E9CC116C6; Wed, 11 Mar 2026 21:56:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266179; bh=pKcYYv5NzsH6Tds8Fh0T0OgLaCOFJ6HHiCfJSN8HVgE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=VNfOjvfE0wg36JHYun7b1fJFgnLtzkecGrA2uhh5yulE1FfE3OB1haPn1jCom3Wc/ h1yPSjjOwj6Yfybeabwxd4RFRv4DtP6lsBu7FBC9FTpH+/HYnWoZTRVln3BbRcFa8U ClomA7/ytZuWkb1MVpHpDCSn/XWcYAEmuc/8ebJItBV6KA/R/EIWjdJKDHFM/4+4E4 l0iwa/4m7tPv08rRbhRYJfExYMIN4MCRKhsp8IuoaiRXbW/Ybdu2rxaEL+k3raALAo 4uDbnR1JmEW2dn1Qf5v2kQw7IjBX1lp31zQWba3W6M4VmI02ilKgC8DpazHLxUyZfQ c3re3zgQp8Zaw== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:46 +0100 Subject: [PATCH RFC v3 03/26] fs: add scoped_with_init_fs() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-3-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=1637; i=brauner@kernel.org; h=from:subject:message-id; bh=pKcYYv5NzsH6Tds8Fh0T0OgLaCOFJ6HHiCfJSN8HVgE=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPIj/sej38sSNqvmRDLxqe/aL/P/5uPLfFLSvxJ1N 2Zr/r9+rqOUhUGMi0FWTJHFod0kXG45T8Vmo0wNmDmsTCBDGLg4BWAiiSmMDK9V+7r1U3f9jFZO mnDg2BRD1kRbBoG1TNskF6hdSpKvm87wV76lWH2b9PKiNn7bG0cdE/oCv+zeWJie8z1JQzoraZk eGwA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Similar to scoped_with_kernel_creds() allow a temporary override of current->fs to serve the few places where lookup is performed from kthread context or needs init's filesytem state. Signed-off-by: Christian Brauner --- include/linux/fs_struct.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/include/linux/fs_struct.h b/include/linux/fs_struct.h index ade459383f92..e11d0e57168f 100644 --- a/include/linux/fs_struct.h +++ b/include/linux/fs_struct.h @@ -6,6 +6,7 @@ #include #include #include +#include =20 struct fs_struct { int users; @@ -49,4 +50,34 @@ static inline int current_umask(void) return current->fs->umask; } =20 +/* + * Temporarily use userspace_init_fs for path resolution in kthreads. + * Callers should use scoped_with_init_fs() which automatically + * restores the original fs_struct at scope exit. + */ +static inline struct fs_struct *__override_init_fs(void) +{ + struct fs_struct *fs; + + fs =3D current->fs; + WRITE_ONCE(current->fs, fs); + return fs; +} + +static inline void __revert_init_fs(struct fs_struct *revert_fs) +{ + VFS_WARN_ON_ONCE(current->fs !=3D revert_fs); + WRITE_ONCE(current->fs, revert_fs); +} + +DEFINE_CLASS(__override_init_fs, + struct fs_struct *, + __revert_init_fs(_T), + __override_init_fs(), void) + +#define scoped_with_init_fs() \ + scoped_class(__override_init_fs, __UNIQUE_ID(label)) + +void __init init_userspace_fs(void); + #endif /* _LINUX_FS_STRUCT_H */ --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 711E0347BDC; Wed, 11 Mar 2026 21:56:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266182; cv=none; b=IYN+F0Hv9AZD1+AWWdsxPYHcB6ntH+k0n1d6fe8AwNdzJKdumW26yCZfz8lTXkNQovJdMFb6Af2aSr/xqvSRuUwiUQ8DD8jE2GfxuByzmtOnSTwPXX/y61h7X3R6qVeNWftBN9nNIIq8IKYXoN5Q7Oc3qk6iXIylx6POkMoCzXg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266182; c=relaxed/simple; bh=j7e3iXOLmmu7kPvsU/SibJ+EPIB2J0TPHCvmtCZW1QE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=G+tahGKyHWLWBh881maFy/coEd5v12MacxAmeD2TUkw8kEy9iZIoIs3QMTtVdLjFv8WFlMltNPev1cgehBfh3iENFOA2Fhh9d44VzyUI6B40ondWWrzmPvDlYOv4pcUbVxtDw8AQY/k55mR0VUhFTZvfKTd+T8AG3B+dX9bZ0sE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NgqBDjn+; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NgqBDjn+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2C21AC4CEF7; Wed, 11 Mar 2026 21:56:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266182; bh=j7e3iXOLmmu7kPvsU/SibJ+EPIB2J0TPHCvmtCZW1QE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=NgqBDjn+aBwucRwPLJiRR29A6ln0vdYesKJezje574G7EMzS29hAtqSn9aaFRAlhE AyEc8UGm8C2k0b+d1Xgt5q8Es6yZqdu/FSlYL8IvaUkqQ4vE9q0kxfoQNGPHvnumR7 loJU1MOpcD7sZYYkoBvtaZ8bqxRtCA5UTYmxMMaAU4Et+ozDYIMHVo54QZZkpDF9FQ 78Vrg1y+4+kdH8ZPqOAq3e+0VXXuXKF9+/MZ9Q9fGmlQcYBNjgolXqB9DXuZRizj5A rDBwb24C3fnOT/qYg3P7cfRqh5p4oZurzJVSK+W04mQDfNc8uGFtcQ1s9QUYA0Sycr jm+1SJrPrrDOQ== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:47 +0100 Subject: [PATCH RFC v3 04/26] fs: add real_fs to track task's actual fs_struct Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-4-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=6818; i=brauner@kernel.org; h=from:subject:message-id; bh=j7e3iXOLmmu7kPvsU/SibJ+EPIB2J0TPHCvmtCZW1QE=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPKDWeMqQ2BztaOMGv8Ch6BD/YU5qvMT9xVNedpQz stxt6O1o5SFQYyLQVZMkcWh3SRcbjlPxWajTA2YOaxMIEMYuDgFYCJ8axgZXuj8Vwzli2cv+Hs0 +vpDtyXBtkF3ovQCopd0xZz0PXxvHsM/9bKs0r3X5v3bI2d5ZeXjHKH0trkP5n2+Gxz+gEFJ4+V yNgA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add a real_fs field to task_struct that always mirrors the fs field. This lays the groundwork for distinguishing between a task's permanent fs_struct and one that is temporarily overridden via scoped_with_init_fs(). When a kthread temporarily overrides current->fs for path lookup, we need to know the original fs_struct for operations like exit_fs() and unshare_fs_struct() that must operate on the real, permanent fs. For now real_fs is always equal to fs. It is maintained alongside fs in all the relevant paths: exit_fs(), unshare_fs_struct(), switch_fs_struct(), and copy_fs(). Signed-off-by: Christian Brauner --- fs/fs_struct.c | 11 ++++++++--- fs/proc/array.c | 4 ++-- fs/proc/base.c | 8 ++++---- fs/proc_namespace.c | 4 ++-- include/linux/sched.h | 1 + init/init_task.c | 1 + kernel/fork.c | 8 +++++++- kernel/kcmp.c | 2 +- 8 files changed, 26 insertions(+), 13 deletions(-) diff --git a/fs/fs_struct.c b/fs/fs_struct.c index fcecf209f1a9..c03a574ed65a 100644 --- a/fs/fs_struct.c +++ b/fs/fs_struct.c @@ -61,7 +61,7 @@ void chroot_fs_refs(const struct path *old_root, const st= ruct path *new_root) read_lock(&tasklist_lock); for_each_process_thread(g, p) { task_lock(p); - fs =3D p->fs; + fs =3D p->real_fs; if (fs) { int hits =3D 0; write_seqlock(&fs->seq); @@ -89,12 +89,13 @@ void free_fs_struct(struct fs_struct *fs) =20 void exit_fs(struct task_struct *tsk) { - struct fs_struct *fs =3D tsk->fs; + struct fs_struct *fs =3D tsk->real_fs; =20 if (fs) { int kill; task_lock(tsk); read_seqlock_excl(&fs->seq); + tsk->real_fs =3D NULL; tsk->fs =3D NULL; kill =3D !--fs->users; read_sequnlock_excl(&fs->seq); @@ -126,7 +127,7 @@ struct fs_struct *copy_fs_struct(struct fs_struct *old) =20 int unshare_fs_struct(void) { - struct fs_struct *fs =3D current->fs; + struct fs_struct *fs =3D current->real_fs; struct fs_struct *new_fs =3D copy_fs_struct(fs); int kill; =20 @@ -135,8 +136,10 @@ int unshare_fs_struct(void) =20 task_lock(current); read_seqlock_excl(&fs->seq); + VFS_WARN_ON_ONCE(fs !=3D current->fs); kill =3D !--fs->users; current->fs =3D new_fs; + current->real_fs =3D new_fs; read_sequnlock_excl(&fs->seq); task_unlock(current); =20 @@ -177,8 +180,10 @@ struct fs_struct *switch_fs_struct(struct fs_struct *n= ew_fs) =20 scoped_guard(task_lock, current) { fs =3D current->fs; + VFS_WARN_ON_ONCE(fs !=3D current->real_fs); read_seqlock_excl(&fs->seq); current->fs =3D new_fs; + current->real_fs =3D new_fs; if (--fs->users) new_fs =3D NULL; else diff --git a/fs/proc/array.c b/fs/proc/array.c index f447e734612a..10d792b8f170 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c @@ -168,8 +168,8 @@ static inline void task_state(struct seq_file *m, struc= t pid_namespace *ns, cred =3D get_task_cred(p); =20 task_lock(p); - if (p->fs) - umask =3D p->fs->umask; + if (p->real_fs) + umask =3D p->real_fs->umask; if (p->files) max_fds =3D files_fdtable(p->files)->max_fds; task_unlock(p); diff --git a/fs/proc/base.c b/fs/proc/base.c index 4c863d17dfb4..28067e77b820 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -210,8 +210,8 @@ static int get_task_root(struct task_struct *task, stru= ct path *root) int result =3D -ENOENT; =20 task_lock(task); - if (task->fs) { - get_fs_root(task->fs, root); + if (task->real_fs) { + get_fs_root(task->real_fs, root); result =3D 0; } task_unlock(task); @@ -225,8 +225,8 @@ static int proc_cwd_link(struct dentry *dentry, struct = path *path) =20 if (task) { task_lock(task); - if (task->fs) { - get_fs_pwd(task->fs, path); + if (task->real_fs) { + get_fs_pwd(task->real_fs, path); result =3D 0; } task_unlock(task); diff --git a/fs/proc_namespace.c b/fs/proc_namespace.c index 5c555db68aa2..036356c0a55b 100644 --- a/fs/proc_namespace.c +++ b/fs/proc_namespace.c @@ -254,13 +254,13 @@ static int mounts_open_common(struct inode *inode, st= ruct file *file, } ns =3D nsp->mnt_ns; get_mnt_ns(ns); - if (!task->fs) { + if (!task->real_fs) { task_unlock(task); put_task_struct(task); ret =3D -ENOENT; goto err_put_ns; } - get_fs_root(task->fs, &root); + get_fs_root(task->real_fs, &root); task_unlock(task); put_task_struct(task); =20 diff --git a/include/linux/sched.h b/include/linux/sched.h index a7b4a980eb2f..5c7b9df92ebb 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1179,6 +1179,7 @@ struct task_struct { unsigned long last_switch_time; #endif /* Filesystem information: */ + struct fs_struct *real_fs; struct fs_struct *fs; =20 /* Open file information: */ diff --git a/init/init_task.c b/init/init_task.c index 5c838757fc10..7d0b4a5927eb 100644 --- a/init/init_task.c +++ b/init/init_task.c @@ -152,6 +152,7 @@ struct task_struct init_task __aligned(L1_CACHE_BYTES) = =3D { RCU_POINTER_INITIALIZER(cred, &init_cred), .comm =3D INIT_TASK_COMM, .thread =3D INIT_THREAD, + .real_fs =3D &init_fs, .fs =3D &init_fs, .files =3D &init_files, #ifdef CONFIG_IO_URING diff --git a/kernel/fork.c b/kernel/fork.c index 67e57ee44548..154703cf7d3d 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -1593,6 +1593,8 @@ static int copy_mm(u64 clone_flags, struct task_struc= t *tsk) static int copy_fs(u64 clone_flags, struct task_struct *tsk) { struct fs_struct *fs =3D current->fs; + + VFS_WARN_ON_ONCE(current->fs !=3D current->real_fs); if (clone_flags & CLONE_FS) { /* tsk->fs is already what we want */ read_seqlock_excl(&fs->seq); @@ -1605,7 +1607,7 @@ static int copy_fs(u64 clone_flags, struct task_struc= t *tsk) read_sequnlock_excl(&fs->seq); return 0; } - tsk->fs =3D copy_fs_struct(fs); + tsk->real_fs =3D tsk->fs =3D copy_fs_struct(fs); if (!tsk->fs) return -ENOMEM; return 0; @@ -3152,6 +3154,10 @@ int ksys_unshare(unsigned long unshare_flags) if (unshare_flags & CLONE_NEWNS) unshare_flags |=3D CLONE_FS; =20 + /* No unsharing with overriden fs state */ + VFS_WARN_ON_ONCE(unshare_flags & (CLONE_NEWNS | CLONE_FS) && + current->fs !=3D current->real_fs); + err =3D check_unshare_flags(unshare_flags); if (err) goto bad_unshare_out; diff --git a/kernel/kcmp.c b/kernel/kcmp.c index 7c1a65bd5f8d..76476aeee067 100644 --- a/kernel/kcmp.c +++ b/kernel/kcmp.c @@ -186,7 +186,7 @@ SYSCALL_DEFINE5(kcmp, pid_t, pid1, pid_t, pid2, int, ty= pe, ret =3D kcmp_ptr(task1->files, task2->files, KCMP_FILES); break; case KCMP_FS: - ret =3D kcmp_ptr(task1->fs, task2->fs, KCMP_FS); + ret =3D kcmp_ptr(task1->real_fs, task2->real_fs, KCMP_FS); break; case KCMP_SIGHAND: ret =3D kcmp_ptr(task1->sighand, task2->sighand, KCMP_SIGHAND); --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 165EE358391; Wed, 11 Mar 2026 21:56:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266185; cv=none; b=d8dzB/MmKpLrT/5DH5+kkfar9lkMKSnFq5JaAt0vsG/Nm6q844M6p9QhH/Boo2TJEnIG5NeecF7dnnRVt5tFcz26dD3AJcKog4ePRtUVklf78W6KX7wNQD+Hdzx4uXlO/u0COqII4km2eI+iz/K+W0X3DznnosFP2Nli+cvfj7s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266185; c=relaxed/simple; bh=B0NYuzCQAj5Kjb+OWFqH1w8NZrUFILRd9e7nO/6Q1Ts=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DcDmE7hElxmSAOTdFzrdvsdNRqAieyriTviW1DGh8EUwEUzi87wDBc8e8A3hO4mtmY7YFuMOAYRkyJRsMnNpx1haNGC3Dg7aE1G69ab+bod/NymSnRt6I5+BJq4/OAO7kv4ZU48yWvRWCanl2RNKs5GJ2SfWRUC3MKD9D8Q71TQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XQV0omNU; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="XQV0omNU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7E6BAC19425; Wed, 11 Mar 2026 21:56:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266184; bh=B0NYuzCQAj5Kjb+OWFqH1w8NZrUFILRd9e7nO/6Q1Ts=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=XQV0omNUuZI1XYykhvNavz2oHXVZADm0YN55T275eVLrWwJqHscPrvzRw/zAmapmT KsEXgSaWptvTSoqTfzoz+MHmXssm3SSfh3ISSLKofhTsaYtdSnfa5TkLXOuOl82VTD vRZXqZ7EnbzfzOzXSvn0jSwJxvIbM0t/f7XkDRpHgma0oYwne0y+MQPSffQ0h4h3Gp hwBfsCQqoSiI9HzANt12w94N428rfesRIFWpu2Nb8l7lHn5yJm4nTB1ZJ67DT7WZwv TDxcLtRO67FO5y91OvvXX7QBqpl27Vz7lGpo1mXR08uWFuD/lD7oyDowN95hd1kL1g vclgK5j+H1tWQ== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:48 +0100 Subject: [PATCH RFC v3 05/26] fs: make userspace_init_fs a dynamically-initialized pointer Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-5-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=6000; i=brauner@kernel.org; h=from:subject:message-id; bh=B0NYuzCQAj5Kjb+OWFqH1w8NZrUFILRd9e7nO/6Q1Ts=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPJj5vnJjG8uvXJXWBnhe+FhyfN5Sve3fmg8rRmuZ rjVwe7Zno5SFgYxLgZZMUUWh3aTcLnlPBWbjTI1YOawMoEMYeDiFICJfElh+CvWpBsjNvfRSqHn Pi6mZnX1p9N7laeyPlyr6vMkvXHn6lsMPxltQ4VMPRRjipfNvaHeudY33qW28p1fJbtBpt2dqRd eMwEA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Change userspace_init_fs from a declared-but-unused extern struct to a dynamically initialized pointer. Add init_userspace_fs() which is called early in kernel_init() (PID 1) to record PID 1's fs_struct as the canonical userspace filesystem state. Wire up __override_init_fs() and __revert_init_fs() to actually swap current->fs to/from userspace_init_fs. Previously these were no-ops that stored current->fs back to itself. Fix nullfs_userspace_init() to compare against userspace_init_fs instead of &init_fs. When PID 1 unshares its filesystem state, revert userspace_init_fs to init_fs's root (nullfs) so that stale filesystem state is not silently inherited by kworkers and usermodehelpers. At this stage PID 1's fs still points to rootfs (set by init_mount_tree), so userspace_init_fs points to rootfs and scoped_with_init_fs() is functionally equivalent to its previous no-op behavior. Signed-off-by: Christian Brauner --- fs/fs_struct.c | 48 +++++++++++++++++++++++++++++++++++++++++++= +++- include/linux/fs_struct.h | 15 ++++++++------- include/linux/init_task.h | 1 + init/main.c | 3 +++ 4 files changed, 59 insertions(+), 8 deletions(-) diff --git a/fs/fs_struct.c b/fs/fs_struct.c index c03a574ed65a..f44e43ce6d93 100644 --- a/fs/fs_struct.c +++ b/fs/fs_struct.c @@ -8,6 +8,7 @@ #include #include #include "internal.h" +#include "mount.h" =20 /* * Replace the fs->{rootmnt,root} with {mnt,dentry}. Put the old values. @@ -163,15 +164,34 @@ EXPORT_SYMBOL_GPL(unshare_fs_struct); * fs_struct state. Breaking that contract sucks for both sides. * So just don't bother with extra work for this. No sane init * system should ever do this. + * + * On older kernels if PID 1 unshared its filesystem state with us the + * kernel simply used the stale fs_struct state implicitly pinning + * anything that PID 1 had last used. Even if PID 1 might've moved on to + * some completely different fs_struct state and might've even unmounted + * the old root. + * + * This has hilarious consequences: Think continuing to dump coredump + * state into an implicitly pinned directory somewhere. Calling random + * binaries in the old rootfs via usermodehelpers. + * + * Be aggressive about this: We simply reject operating on stale + * fs_struct state by reverting to nullfs. Every kworker that does + * lookups after this point will fail. Every usermodehelper call will + * fail. Tough luck but let's be kind and emit a warning to userspace. */ static inline void validate_fs_switch(struct fs_struct *old_fs) { + might_sleep(); + if (likely(current->pid !=3D 1)) return; /* @old_fs may be dangling but for comparison it's fine */ - if (old_fs !=3D &init_fs) + if (old_fs !=3D userspace_init_fs) return; pr_warn("VFS: Pid 1 stopped sharing filesystem state\n"); + set_fs_root(userspace_init_fs, &init_fs.root); + set_fs_pwd(userspace_init_fs, &init_fs.root); } =20 struct fs_struct *switch_fs_struct(struct fs_struct *new_fs) @@ -201,3 +221,29 @@ struct fs_struct init_fs =3D { .seq =3D __SEQLOCK_UNLOCKED(init_fs.seq), .umask =3D 0022, }; + +struct fs_struct *userspace_init_fs __ro_after_init; +EXPORT_SYMBOL_GPL(userspace_init_fs); + +void __init init_userspace_fs(void) +{ + struct mount *m; + struct path root; + + /* Move PID 1 from nullfs into the initramfs. */ + m =3D topmost_overmount(current->nsproxy->mnt_ns->root); + root.mnt =3D &m->mnt; + root.dentry =3D root.mnt->mnt_root; + + VFS_WARN_ON_ONCE(current->pid !=3D 1); + + set_fs_root(current->fs, &root); + set_fs_pwd(current->fs, &root); + + /* Hold a reference for the global pointer. */ + read_seqlock_excl(¤t->fs->seq); + current->fs->users++; + read_sequnlock_excl(¤t->fs->seq); + + userspace_init_fs =3D current->fs; +} diff --git a/include/linux/fs_struct.h b/include/linux/fs_struct.h index e11d0e57168f..97eef8d3863d 100644 --- a/include/linux/fs_struct.h +++ b/include/linux/fs_struct.h @@ -17,6 +17,7 @@ struct fs_struct { } __randomize_layout; =20 extern struct kmem_cache *fs_cachep; +extern struct fs_struct *userspace_init_fs; =20 extern void exit_fs(struct task_struct *); extern void set_fs_root(struct fs_struct *, const struct path *); @@ -57,17 +58,17 @@ static inline int current_umask(void) */ static inline struct fs_struct *__override_init_fs(void) { - struct fs_struct *fs; + struct fs_struct *old_fs; =20 - fs =3D current->fs; - WRITE_ONCE(current->fs, fs); - return fs; + old_fs =3D current->fs; + WRITE_ONCE(current->fs, userspace_init_fs); + return old_fs; } =20 -static inline void __revert_init_fs(struct fs_struct *revert_fs) +static inline void __revert_init_fs(struct fs_struct *old_fs) { - VFS_WARN_ON_ONCE(current->fs !=3D revert_fs); - WRITE_ONCE(current->fs, revert_fs); + VFS_WARN_ON_ONCE(current->fs !=3D userspace_init_fs); + WRITE_ONCE(current->fs, old_fs); } =20 DEFINE_CLASS(__override_init_fs, diff --git a/include/linux/init_task.h b/include/linux/init_task.h index a6cb241ea00c..61536be773f5 100644 --- a/include/linux/init_task.h +++ b/include/linux/init_task.h @@ -24,6 +24,7 @@ =20 extern struct files_struct init_files; extern struct fs_struct init_fs; +extern struct fs_struct *userspace_init_fs; extern struct nsproxy init_nsproxy; =20 #ifndef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE diff --git a/init/main.c b/init/main.c index 1cb395dd94e4..5ccc642a5aa7 100644 --- a/init/main.c +++ b/init/main.c @@ -102,6 +102,7 @@ #include #include #include +#include #include #include #include @@ -1574,6 +1575,8 @@ static int __ref kernel_init(void *unused) { int ret; =20 + init_userspace_fs(); + /* * Wait until kthreadd is all set-up. */ --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 75C391E7660; Wed, 11 Mar 2026 21:56:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266189; cv=none; b=EXQ4aQWYn0n4Ru5OyRzd/+7apVfEL1NQJ7SN8ou3erbaKy1UcEaSMYx0xYfSoNZ7AmY2HVxWHNa64F+KzWA+nIhd3XWPBTGS9IaoAEKqD5dLQ75qFu6J7BnDQUmoCsIH4KL8xrTpK+vrEy/6kDgRkx3v2ZZEtp/nhj8Tpi3zu48= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266189; c=relaxed/simple; bh=jsmYqEfin/W6QXrJh5f/89X3/kJ/bACDGoIAjq0LjVg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=X7b8Xi7K4WOBc013iqobARK17gOqXH2MYZzeFxv89M8rXoLYauxLZEdrAMgx57lVz/XNeT4MPmGleVy89FF57SH0n250ZiyLmlcQbor1X5G+VKRO1qXtAvX+wI35q3vOewIAJLyeaAdeXblCidx6URVzkBs8Ngjf6Qt0iwoqxR8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=EJiGUF3S; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="EJiGUF3S" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 265F3C4CEF7; Wed, 11 Mar 2026 21:56:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266187; bh=jsmYqEfin/W6QXrJh5f/89X3/kJ/bACDGoIAjq0LjVg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=EJiGUF3SEHU4DAbeLJypwaCzpwL8keAHscr6VgIJrRQmk6QBXBA950wk45PCagNNh hgYFvKrKNhcwKMpE4r8XBkVhB+FHiFMYabw3fmceN04OBC9wHRx4q2bSa2YZ4UUhQF 2IdZctwNME6439wSjTmkp+b5RnBeeJU6mPQcMPIbLP3zilXlmA/MhXEsJtfmFS1EtH dvsYiUe2d86US+0hnSTWsZ2Nb+TDy0DrC4YYcmyQT6fMjpI0NwwK7Azp3Ir6I9/xL1 xMSZnqXy3urPua3UKbYDPue8kZoSJb80P4TY62G15WpJ2vP/69gweu5VJVhk3Nh6vJ 7ojonbWBEkm9A== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:49 +0100 Subject: [PATCH RFC v3 06/26] rnbd: use scoped_with_init_fs() for block device open Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-6-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=1270; i=brauner@kernel.org; h=from:subject:message-id; bh=jsmYqEfin/W6QXrJh5f/89X3/kJ/bACDGoIAjq0LjVg=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPJD46zwgeP1CY5Gd0828T/I3MFqsGbBZ9fJIeZsG wQ+99zm6ihlYRDjYpAVU2RxaDcJl1vOU7HZKFMDZg4rE8gQBi5OAZjI7ruMDH3vnY52/tldf3PK vg39p7UDHKV0Pq7qyVj5V92yK9dU6SLD/4Ad5zSWWRj8rW1iiuUvfu8l91SM7UTz5DkJe6ucjjh EMAIA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Use scoped_with_init_fs() to temporarily override current->fs for the bdev_file_open_by_path() call so the path lookup happens in init's filesystem context. process_msg_open() =E2=86=90 rnbd_srv_rdma_ev() =E2=86=90 RDMA completion c= allback =E2=86=90 ib_cq_poll_work() =E2=86=90 kworker (InfiniBand completion workqueue) Signed-off-by: Christian Brauner --- drivers/block/rnbd/rnbd-srv.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/block/rnbd/rnbd-srv.c b/drivers/block/rnbd/rnbd-srv.c index 10e8c438bb43..79c9a5fb418f 100644 --- a/drivers/block/rnbd/rnbd-srv.c +++ b/drivers/block/rnbd/rnbd-srv.c @@ -11,6 +11,7 @@ =20 #include #include +#include =20 #include "rnbd-srv.h" #include "rnbd-srv-trace.h" @@ -734,7 +735,8 @@ static int process_msg_open(struct rnbd_srv_session *sr= v_sess, goto reject; } =20 - bdev_file =3D bdev_file_open_by_path(full_path, open_flags, NULL, NULL); + scoped_with_init_fs() + bdev_file =3D bdev_file_open_by_path(full_path, open_flags, NULL, NULL); if (IS_ERR(bdev_file)) { ret =3D PTR_ERR(bdev_file); pr_err("Opening device '%s' on session %s failed, failed to open the blo= ck device, err: %pe\n", --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E499535DA79; Wed, 11 Mar 2026 21:56:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266190; cv=none; b=UC3oypvAcF1774SbqtizApIU4oXYLtT+cTu2a/4ZO78ax7HgtSvYQahYKW4j/upAaxUCSXnwySiNe7yaBtymGGXdy1hYyR1UWW6ASb/WBa713zDlJaE1lp5thrgMOnmswzPaWtXjtbUiNJxehiizgebuH5NElmnt6v6ZCK/7YoI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266190; c=relaxed/simple; bh=GZsbB5/oS0c6lwFJZSOuaHi3hJ1zBvMulcElef7p9ak=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iNHe5AbFiTww4ChbLivJUX87aWJk0I7rc5T7WPyDAuUgXVwaT5YrD0SxPR/PGHW7LdnWdQUx/TDKBO0JMwZN+CEpFPADPGQM1CcnpxjARwrqNP7wXup66WSZZbhRzFBIYfJI7Bb3fiklXC/uBFIjsQ7hRFJppDreI2JycVeHYRo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lRyL9HrN; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lRyL9HrN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C3540C19425; Wed, 11 Mar 2026 21:56:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266189; bh=GZsbB5/oS0c6lwFJZSOuaHi3hJ1zBvMulcElef7p9ak=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=lRyL9HrNFUbvelzoMtvBgwrXbzdVp7NhK7M9PGD9SiP5pFvL84sTNqT+lqivvPZFp 1x8+XEdWUSHoWQoK8b6bhx40BMHJ2qKve3v2zxjQdOOleh5pO2r1gRVpZXTctdGNJZ D3gEGVATpGwqcf3dyx41ROJ0F0Zs2icMNiMb5J3kGcVjL5kQsO/X/yEMGv1UBMoiZy f7pDoRRSqIezvSI23mthcFTYC5aWMLFKwRyBmNxBbR+LIk5Mdy8MUAJ2/xp6Hb4g0J utOiuKFzmzYExcS6j1L+eeN0qN9uHQN/H4nIvDA8wIZap22TiXibpdAiNbJqLaZzH7 ht0iQt/MvtyZQ== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:50 +0100 Subject: [PATCH RFC v3 07/26] crypto: ccp: use scoped_with_init_fs() for SEV file access Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-7-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=1507; i=brauner@kernel.org; h=from:subject:message-id; bh=GZsbB5/oS0c6lwFJZSOuaHi3hJ1zBvMulcElef7p9ak=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPJj4hy+x0YL1rEGVcZqW33/WbbRI7UhkN8s2dNc5 3PPnelzO0pZGMS4GGTFFFkc2k3C5ZbzVGw2ytSAmcPKBDKEgYtTACby4QnDH45tFZx3lpxKe/lU esUs5vhM/qzubp9LThpvJvfG6C+228nI8KCEdceOqxuOGrRmmSXGzOFcfvSlf0PF7OiWbvWf6i9 +8AMA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Replace the manual init_task root retrieval with scoped_with_init_fs() to temporarily override current->fs. This allows using the simpler filp_open() instead of the init_root() + file_open_root() pattern. open_file_as_root() =E2=86=90 sev_read_init_ex_file() / sev_write_init_ex_f= ile() =E2=86=90 sev_platform_init() =E2=86=90 __sev_guest_init() =E2=86=90 KVM io= ctl =E2=80=94 user process context Needs init's root because the SEV init_ex file path should resolve against the real root, not a KVM user's chroot. Signed-off-by: Christian Brauner --- drivers/crypto/ccp/sev-dev.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c index 096f993974d1..4320054da0f6 100644 --- a/drivers/crypto/ccp/sev-dev.c +++ b/drivers/crypto/ccp/sev-dev.c @@ -260,20 +260,16 @@ static int sev_cmd_buffer_len(int cmd) =20 static struct file *open_file_as_root(const char *filename, int flags, umo= de_t mode) { - struct path root __free(path_put) =3D {}; - - task_lock(&init_task); - get_fs_root(init_task.fs, &root); - task_unlock(&init_task); - CLASS(prepare_creds, cred)(); if (!cred) return ERR_PTR(-ENOMEM); =20 cred->fsuid =3D GLOBAL_ROOT_UID; =20 - scoped_with_creds(cred) - return file_open_root(&root, filename, flags, mode); + scoped_with_init_fs() { + scoped_with_creds(cred) + return filp_open(filename, flags, mode); + } } =20 static int sev_read_init_ex_file(void) --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F3601E7660; Wed, 11 Mar 2026 21:56:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266192; cv=none; b=Jx/G4X54WJb2n+/2sdcftxL2rZlp1yXs0CL+8sXqreuv+mIj/Pu8uwr0EnCLDW0ICWxes5sUScAkFNyf4Ct5sLtvyVsxOJKfcGNPvp0BOZ6xKqoSg43tDYvpzVdgwWuhjkqobXFCeer+esxQQAnCymdFLF8UZ16SNrmwlZT5Exw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266192; c=relaxed/simple; bh=BkzEXSS/aDyD/0RcykK+9iDod6MNEZ0v8zFBHEaX1Bk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nl8PoztYT5qNv6ni3Vo08zV7u0gl2W/+ZbC+pRt8hwExJrXL4g6jlEAkth+KVMtVxSbOPbB8JyM5pyVme6kNyHojKOQvsoGy7Eq/akTEhggC6u9wmy6B7rLv3CGCldlt6U8bQJnMzu76exU1G3/Mj1XVHHm6B3mHmZqqbXPGkdg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZwCnWaPv; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZwCnWaPv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 43F8FC19425; Wed, 11 Mar 2026 21:56:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266192; bh=BkzEXSS/aDyD/0RcykK+9iDod6MNEZ0v8zFBHEaX1Bk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ZwCnWaPvq5AHnnngvOsk11RmYjzfguwpJSnN3uwM/0P9IE9Om4MvP4mbegmWi3A6Z F6BaB5xOU7AG14zApLiU6T+iOFSK+Dle1iHWwEGYFXAp04XRlBFFolS7JQJglhG/Y/ EJTUABKDCWEagg5Ff+8OokgzhRDiyZ0/Bzn/I9FGhh3sx1QwjRj3tLDP1dQwltn1WX DN/3MeHium5ZIWWNncv5K7C93pgm0PHV7Mk0nvwd9FSI9UL78zn3LlA5T7ME7cIKAt ccXS2RfnK9Cr+b3LG1fOImPE2EzS/eHYRDCRvqba7tklN5njOrZlFA6CTghBz4vf8/ HzOGmRzw5G2TQ== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:51 +0100 Subject: [PATCH RFC v3 08/26] scsi: target: use scoped_with_init_fs() for ALUA metadata Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-8-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=1383; i=brauner@kernel.org; h=from:subject:message-id; bh=BkzEXSS/aDyD/0RcykK+9iDod6MNEZ0v8zFBHEaX1Bk=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPIjI85+V+n7/SEbJsveixCX53tntn9DWF+CXK/UJ MGXdziyOkpZGMS4GGTFFFkc2k3C5ZbzVGw2ytSAmcPKBDKEgYtTACaiysTIsCdy2sN/c8r4D1iZ PGdadGTG7v+rV3Rrz/KXiPJMUUuczcjwP2OP0+1/CnPXSPB/EYyJ0//xV8H2VTWr33pzP5sQo5s WXAA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Use scoped_with_init_fs() to temporarily override current->fs for the filp_open() call in core_alua_write_tpg_metadata() so the path lookup happens in init's filesystem context. core_alua_write_tpg_metadata() =E2=86=90 core_alua_update_tpg_primary_metad= ata() =E2=86=90 core_alua_do_transition_tg_pt() =E2=86=90 target_queued_submit_wo= rk() =E2=86=90 kworker (target submission workqueue) Signed-off-by: Christian Brauner --- drivers/target/target_core_alua.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/target/target_core_alua.c b/drivers/target/target_core= _alua.c index 10250aca5a81..fde88642a43a 100644 --- a/drivers/target/target_core_alua.c +++ b/drivers/target/target_core_alua.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include =20 @@ -856,10 +857,13 @@ static int core_alua_write_tpg_metadata( unsigned char *md_buf, u32 md_buf_len) { - struct file *file =3D filp_open(path, O_RDWR | O_CREAT | O_TRUNC, 0600); + struct file *file; loff_t pos =3D 0; int ret; =20 + scoped_with_init_fs() + file =3D filp_open(path, O_RDWR | O_CREAT | O_TRUNC, 0600); + if (IS_ERR(file)) { pr_err("filp_open(%s) for ALUA metadata failed\n", path); return -ENODEV; --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 026353382F7; Wed, 11 Mar 2026 21:56:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266197; cv=none; b=EKwRvC8Lkd/F7w+oGezB3fsEWEEMiE6ilOSR9dg3Ftm+s4Z/IQzWBz4aZcRvjBHt0oZiJTqz5Sh2ai+eBtEkw9jxzFp7U6HgGY+h02XLAzqO8866UWD1bLBMnnLRqbcTlu7JzGhMMjlmydsGSx+fo432jxnVkvzVut+TO8rdrl0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266197; c=relaxed/simple; bh=mTnIonLZYMjXHvkplxKLW57Mj6daBEBoDy+9bwPX4hU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UbdoOplns/JjsRKY3zfTcStxtKEZHC79zABgQUFrFHNIb8EFELyLKMMD8s3aTGAOrj8FrKR0yB1VHiJ6+6J+A7v6gqpADDB5QAHQpqwBPfq1noAFW2MGG7abH1OMzC5lbbGc4NBpA0ITXGK9OKYORfyIbYcVFqFENeKLu5jtmVM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eXZM/JSY; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="eXZM/JSY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 96FDFC4CEF7; Wed, 11 Mar 2026 21:56:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266194; bh=mTnIonLZYMjXHvkplxKLW57Mj6daBEBoDy+9bwPX4hU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=eXZM/JSY2ts0xm1eJPI7BqangtZR1Y/4o5RysaRXL09Y7a4IHos3H0ylY0WIFAyhV 08isPlgNxorrz5r+wFLnvZ/BtLuB48RfB1xhv0F+NWrU2DZ8Ky4t+zS9Grq4wz53Cu 0YJURVpmBwNLfMAX5/jRZCymyDv27rnpXn1+S8hWSZihpM4dbkC8ie2kFiXiZd1ZS0 YMoSVGKwqMwssYZoGRFjLKmi821eNEF+ja7va6f0uiaeHXd8Ma6Wd1tjhi3/mdSOVP gWU4lMRMV2RGmecVQBFxGz3PLvjImYsoRug/rYK1Jy8MZqdpucx/mgduTdSunvXPU6 F37YP6QaPTH8g== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:52 +0100 Subject: [PATCH RFC v3 09/26] scsi: target: use scoped_with_init_fs() for APTPL metadata Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-9-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=1199; i=brauner@kernel.org; h=from:subject:message-id; bh=mTnIonLZYMjXHvkplxKLW57Mj6daBEBoDy+9bwPX4hU=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPKj8Ux107V/2c9ucTJmSfcYCx1rCI3dxuHLUMHoa G97qku4o5SFQYyLQVZMkcWh3SRcbjlPxWajTA2YOaxMIEMYuDgFYCLBxowMT+Vkvh3fWndK74f8 G8eG6LqrTM3KPlsfbRLdXZfy3YZ7CcM/HTHrCMmJCWxFu1Yd3l59PpK3UJQjuuzLo8zyw4uUGhU 4AQ== X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Use scoped_with_init_fs() to temporarily override current->fs for the filp_open() call in __core_scsi3_write_aptpl_to_file() so the path lookup happens in init's filesystem context. __core_scsi3_write_aptpl_to_file() =E2=86=90 core_scsi3_update_and_write_ap= tpl() =E2=86=90 PR command handlers =E2=86=90 target_queued_submit_work() =E2=86= =90 kworker Signed-off-by: Christian Brauner --- drivers/target/target_core_pr.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_p= r.c index f88e63aefcd8..2a030f119b24 100644 --- a/drivers/target/target_core_pr.c +++ b/drivers/target/target_core_pr.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include =20 @@ -1969,7 +1970,8 @@ static int __core_scsi3_write_aptpl_to_file( if (!path) return -ENOMEM; =20 - file =3D filp_open(path, flags, 0600); + scoped_with_init_fs() + file =3D filp_open(path, flags, 0600); if (IS_ERR(file)) { pr_err("filp_open(%s) for APTPL metadata" " failed\n", path); --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 14150355F39; Wed, 11 Mar 2026 21:56:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266197; cv=none; b=lzBHesQpL71JC/GLFG6E2A9F1/j2uwqRSZmOURtC3E/9XdGFZhrAUJ797B9LB/+WRKJsfUjtThgDhXtpIXnCCoYaM+IA/TqfqBPWNnwqLGJMnkpz8FubM6eaimui5+ytgCDcmklcYmCzgJBg6f+xnqpIASuDk0P+vLcC5CBjDjk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266197; c=relaxed/simple; bh=tqh5LkBF8hJuRKX1E/HzPe/YDkw6eJT1HDZFcFDFrFw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=u3KU8nvp24Vng536HSTkc8soRC/eG2GDasqo3qyGTw3rhTe5s1Y77SSSfRWrTFjNNJinGhJar3ESsiZ0FMmK/cGUxVqCFGyioapIKelpbQfNo79lFD/7WmAillXVJEqurm598l5az26gdcOTtL8tTW7ZKKjYFPOsTCc7YBS3ZX0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TD/wbbVz; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="TD/wbbVz" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 12B2CC116C6; Wed, 11 Mar 2026 21:56:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266197; bh=tqh5LkBF8hJuRKX1E/HzPe/YDkw6eJT1HDZFcFDFrFw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=TD/wbbVzBn8sLLlguUJj8XlWCLIXet+fB2T4biypOXorcb2fQ9MKVpHA5UuN85S+E RusnHyTA7r+SBMqJv7nwbEKj4330JNM+BJ0pzE8qULO+NK2D3TNW1psVyZmmVEWMJB E2hrhte5fAjc6L3NENsqyEb+EnDh7t6Z86J+0llqIKxerVdGAtKHDFpAkuN2fxC0/7 jUqgQ6KRo7Dis9M6BiNx3dToMtffJXDHcOBsPUNGP8Ng2gqVEA32LfW80n3kJh66Nl Ebfa52lrgw9KRWiFDlCpApO3n5G1yRteTVzIX1GyQyeH/b7ZrfbNKyzkD9GtYiGcVL yd0xHJvofN85A== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:53 +0100 Subject: [PATCH RFC v3 10/26] btrfs: use scoped_with_init_fs() for update_dev_time() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-10-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=1460; i=brauner@kernel.org; h=from:subject:message-id; bh=tqh5LkBF8hJuRKX1E/HzPe/YDkw6eJT1HDZFcFDFrFw=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPJjl++mh/y6bZedk3usJ/srqpeXnFx/+Lbu1B/RJ +ZWuGrUd5SyMIhxMciKKbI4tJuEyy3nqdhslKkBM4eVCWQIAxenAEzk3muGf4qHo64xtbbxmeTl Oazk1PvevWKuPNdcyyOzfVO+TPapmMrwP33a+5hbYSuvuv9xvP0ybsqyjQYLL266sfUS865JR8q cUlgB X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 update_dev_time() can be called from both kthread and process context. Use scoped_with_init_fs() to temporarily override current->fs for the kern_path() call when running in kthread context so the path lookup happens in init's filesystem context. update_dev_time() =E2=86=90 btrfs_scratch_superblocks() =E2=86=90 btrfs_dev_replace_finishing() =E2=86=90 btrfs_dev_replace_kthread() =E2=86=90 kthread (kthread_run) Also called from ioctl (user process). Signed-off-by: Christian Brauner --- fs/btrfs/volumes.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 648bb09fc416..b42e93c8e5b1 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -12,6 +12,7 @@ #include #include #include +#include #include "misc.h" #include "disk-io.h" #include "extent-tree.h" @@ -2119,8 +2120,16 @@ static int btrfs_add_dev_item(struct btrfs_trans_han= dle *trans, static void update_dev_time(const char *device_path) { struct path path; + int err; =20 - if (!kern_path(device_path, LOOKUP_FOLLOW, &path)) { + if (tsk_is_kthread(current)) { + scoped_with_init_fs() + err =3D kern_path(device_path, LOOKUP_FOLLOW, &path); + } else { + err =3D kern_path(device_path, LOOKUP_FOLLOW, &path); + } + + if (!err) { vfs_utimes(&path, NULL); path_put(&path); } --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A108336922D; Wed, 11 Mar 2026 21:56:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266199; cv=none; b=I4ESwIsdzQA962FkCoU5TQuUar0Yvx1qzBa6RkgedX77Ngb2m36S4lzkhasSjPC9rPXPf4FWJ1aZtOXrmNAd1hCu9CBdMAeRK4a1E1vSJCUh6mpBefsXv8ma10modnkOrDLf/W9YqUZomcNB8mTJDc7zL6ANKcu71JJWw+jtVlY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266199; c=relaxed/simple; bh=aJXunCWUMwo/RoSO3Pr5eSrF9qPQim1AZ9jP0b2ptO0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nydrLjF2VkIdlJsmmWVMPxEazPnurJjUvJ3tU8r8lRuuT7TmDmv7QhO66YNblEMzdgUJwoiKq61zoH3iX58apgKXP8DAMFKyD/5xgTT866w1KFnFAWxAh6XDNNklMyHAFZT2m4BhAvsPONylDfRTft9XuU4SwaZ485l/z/Uoqlo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TJp2G6OT; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="TJp2G6OT" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6795DC116C6; Wed, 11 Mar 2026 21:56:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266199; bh=aJXunCWUMwo/RoSO3Pr5eSrF9qPQim1AZ9jP0b2ptO0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=TJp2G6OTzu/6nnsaqW4Cz+osmsS4bx7y5wQT0CzW3JUItLgwURYj/ZO/YtUrLGcYb pN+8FYiVWfJan9bAsg2nBoP1857W9wLMqnCyLeLpk00HektiL1PszGYa4phbPTO0gG US/3+xX59eGPmsGcK8hsIRmwvrB+9W2wlAjA9rtXKDPdLj4WhnD/OtJ/c5BkccBu5y j7SOVfyKrhSwRwPPJeiSGPrnt2GmKndHMm6GroQFs07egwDT70xPvZ9ktPedV161VQ Tkfi2+43vjK9CLbjZLN3k7Pq4PEAMpmxdsLg3OsTxLGjamr65ICazCDl4sikZ67Bge 2CT/9Fu6tTgSQ== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:54 +0100 Subject: [PATCH RFC v3 11/26] coredump: use scoped_with_init_fs() for coredump path resolution Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-11-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=1539; i=brauner@kernel.org; h=from:subject:message-id; bh=aJXunCWUMwo/RoSO3Pr5eSrF9qPQim1AZ9jP0b2ptO0=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPIz3nvqV949z8u8VZa9rNqX1LiI50vJvKWPNcOuH Xhu2JlR2lHKwiDGxSArpsji0G4SLrecp2KzUaYGzBxWJpAhDFycAjCRib8Y/jtVF/KskWiaXnl1 5YkQh4W1J+ze/J5y7O3UuBlH/XK/mi5lZLhurzdRIGD6zne5E66pvdhx+27F0Sc7TE+xTvVn0Wa 6JMMEAA== X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Use scoped_with_init_fs() to temporarily override current->fs for the filp_open() call so the coredump path lookup happens in init's filesystem context. This replaces the init_root() + file_open_root() pattern with the simpler scoped override. coredump_file() =E2=86=90 do_coredump() =E2=86=90 vfs_coredump() =E2=86=90 = get_signal() =E2=80=94 runs as the crashing userspace process Uses init's root to prevent a chrooted/user-namespaced process from controlling where suid coredumps land. Not a kthread, but intentionally needs init's fs for security. Signed-off-by: Christian Brauner --- fs/coredump.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/fs/coredump.c b/fs/coredump.c index 29df8aa19e2e..7428349f10bf 100644 --- a/fs/coredump.c +++ b/fs/coredump.c @@ -919,15 +919,10 @@ static bool coredump_file(struct core_name *cn, struc= t coredump_params *cprm, * with a fully qualified path" rule is to control where * coredumps may be placed using root privileges, * current->fs->root must not be used. Instead, use the - * root directory of init_task. + * root directory of PID 1. */ - struct path root; - - task_lock(&init_task); - get_fs_root(init_task.fs, &root); - task_unlock(&init_task); - file =3D file_open_root(&root, cn->corename, open_flags, 0600); - path_put(&root); + scoped_with_init_fs() + file =3D filp_open(cn->corename, open_flags, 0600); } else { file =3D filp_open(cn->corename, open_flags, 0600); } --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DAB33372B27; Wed, 11 Mar 2026 21:56:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266201; cv=none; b=oxIr/6T32tRxJKwLcCOOmaZ9wUEj5KKwVAKpwql73hObLkWGcGzQB4EhDS77kJSIY3n6yb+njB7cv+6uqwKPFKg8SML4l41kfb+2iG3LVKEF1U8Xovi4dp58RQeO9CIG+0qVMbLU32vs/9KyE/Jdiwy/MxyPntLxaiPBSOCewXw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266201; c=relaxed/simple; bh=zF8twvQogD362sFS14b9O2jvMAhbKYrV4VTnG9w1uzA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ayWC9wfkwMd7dgkAd0H5plTySwNXFtwczoSq/sGZDaEquY1qzPoPXppNglOPyV9Fsd06sspFgOMdR2s9eG/3TDV8EoB0n8KdPkAf2SXfrpN46eru+89mVx8+8u0+rOeFFDbFQhrM3mpaU/sAQZOfQFOZn1E5nogkn4LlEywLjxo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZCZz5TVc; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZCZz5TVc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B8FB8C2BC86; Wed, 11 Mar 2026 21:56:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266201; bh=zF8twvQogD362sFS14b9O2jvMAhbKYrV4VTnG9w1uzA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ZCZz5TVcWcRBijz2utA3RK1DZ5lMmeGItFtw9J9cZClS9xldRaguzBOSxVPsYA3N4 jVDANawiZ99N8wDbn1nPI+Z4TypPcuO/fvzfQwzcXEIVtSwOd0XwXRy66pn9hCEB+M niNaXO+eviXNYaY8HuZkUbC4WC4Lr8GEe+fZyGh34AQ/mrZr3smS1UVs2ajCVQdS9D JROF440QT1BoTao64/vBFR/UZ8wR44c/esUeHwESXig6VFFsj8DveWPkzLGe1XwdDT X2vJ3k7GIYJzfZZIJcxigNLBakYHHqm30htut4l/swvsfIfqiZlYBMpoXFC8B8PgYr aoPLVMrZVwsnw== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:55 +0100 Subject: [PATCH RFC v3 12/26] fs: use scoped_with_init_fs() for kernel_read_file_from_path_initns() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-12-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=1325; i=brauner@kernel.org; h=from:subject:message-id; bh=zF8twvQogD362sFS14b9O2jvMAhbKYrV4VTnG9w1uzA=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPKz+9hn5is9M1TjI4PEa49uNuDyNpS/9Oe47AedJ YuX1YlpdpSyMIhxMciKKbI4tJuEyy3nqdhslKkBM4eVCWQIAxenAExkrz7Dfz+LNVY1mvPmcC86 fu67hyVH5IfogH5fh8+T9RjTFxzdPovhf+KdB1n3TDRb95hHfnsvmHJmHeeXTJ9Tlj12R6p9Gh9 H8AIA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Replace the manual init_task root retrieval with scoped_with_init_fs() to temporarily override current->fs. This allows using the simpler filp_open() instead of the init_root() + file_open_root() pattern. kernel_read_file_from_path_initns() =E2=86=90 fw_get_filesystem_firmware() = =E2=86=90 _request_firmware() =E2=86=90 request_firmware_work_func() =E2=86=90 kworke= r (async firmware loading) Also called synchronously from request_firmware() which can be user or kthread context. Signed-off-by: Christian Brauner --- fs/kernel_read_file.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/fs/kernel_read_file.c b/fs/kernel_read_file.c index de32c95d823d..9c2ba9240083 100644 --- a/fs/kernel_read_file.c +++ b/fs/kernel_read_file.c @@ -150,18 +150,13 @@ ssize_t kernel_read_file_from_path_initns(const char = *path, loff_t offset, enum kernel_read_file_id id) { struct file *file; - struct path root; ssize_t ret; =20 if (!path || !*path) return -EINVAL; =20 - task_lock(&init_task); - get_fs_root(init_task.fs, &root); - task_unlock(&init_task); - - file =3D file_open_root(&root, path, O_RDONLY, 0); - path_put(&root); + scoped_with_init_fs() + file =3D filp_open(path, O_RDONLY, 0); if (IS_ERR(file)) return PTR_ERR(file); =20 --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5528537703C; Wed, 11 Mar 2026 21:56:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266204; cv=none; b=Ar8+tzxgm7Ei0DAI3NUOLRzAQQtt4fqsfm51CQ3ILQYmv+1JEJx+z7PeF2cHV2590JhhKPR+2VkXhQxYfkVSpUIQUBcNweTIN67/6jcq0HU/mCHKijtvezifWfEjV1SZKic+Pacowp+mex2xBvYEPOGdFmYmjbZ1WS5ebjzkpOI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266204; c=relaxed/simple; bh=2kDcoaN93XMP+vh/JKpvMv+7AMIQDdbFl8rAi3BOMms=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZjFM14Xd/YEMN/2LWReySZ4etXBe8QR/xKAglVFAbaCGE8p/O2HMJNhDkuBNqMkj6SdOQqdfcQ1JvxplPtYDr2B3FF0QkgXM72+ZqUnAHRRsdCw1xjl4vlR6NfLVnKvftwkLD1buwVasrCPoIseicuUlNO7N7P+xXaXhyf1vw6A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cAArF1Pb; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cAArF1Pb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4A051C2BC9E; Wed, 11 Mar 2026 21:56:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266204; bh=2kDcoaN93XMP+vh/JKpvMv+7AMIQDdbFl8rAi3BOMms=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=cAArF1PbGZuSnQswuvYbB3OR1KhNuB/zaf9snndRZfXzJgJsAO43T3q6voxYqqyF4 G/QcMcAe12ThawkYiL8ayYgdO/Pt37HxWSjzJERxeMD/YZhv92esJQvLraIyVsqJ+o qKtiTSlp0lCa6n9qgIYIXOgpFBWr5FSeOJzCSzXNf7GgjVcoIC/T/A67Int3VHSQVA IBrevnsO7QUd82Qb38YZuhFMPmMXdRW3I9sHW+018C5khHwLeJY1gpWfpK6Fox5NgL n+xgoaRBvUE6AGYChBAFn1UTnT/gdrY7wVP9sLPZw5DNJtycDhN95zXhSItNCG00lT hFtKII85p4e8A== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:56 +0100 Subject: [PATCH RFC v3 13/26] ksmbd: use scoped_with_init_fs() for share path resolution Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-13-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=1232; i=brauner@kernel.org; h=from:subject:message-id; bh=2kDcoaN93XMP+vh/JKpvMv+7AMIQDdbFl8rAi3BOMms=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPIzwSSvbPXaqQxnDXfZBSTobNZf1n5OdIn2ESOvx bZmkbxsHaUsDGJcDLJiiiwO7Sbhcst5KjYbZWrAzGFlAhnCwMUpABOJvczIsOYgZ9OxE5Wrjqy/ uWpSsd/cc7duTmcSyHy9dWNDnHZi3l1GhmWSLxLvpEe3XOf8JFNiH9PQJv3rQY5tT33ac00dz5l hfAA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Use scoped_with_init_fs() to temporarily override current->fs for the kern_path() call in share_config_request() so the share path lookup happens in init's filesystem context. All ksmbd paths =E2=86=90 SMB command handlers =E2=86=90 handle_ksmbd_work(= ) =E2=86=90 workqueue =E2=86=90 ksmbd_conn_handler_loop() =E2=86=90 kthread Signed-off-by: Christian Brauner --- fs/smb/server/mgmt/share_config.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/smb/server/mgmt/share_config.c b/fs/smb/server/mgmt/share_c= onfig.c index 53f44ff4d376..4535566abef2 100644 --- a/fs/smb/server/mgmt/share_config.c +++ b/fs/smb/server/mgmt/share_config.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include =20 @@ -189,7 +190,8 @@ static struct ksmbd_share_config *share_config_request(= struct ksmbd_work *work, goto out; } =20 - ret =3D kern_path(share->path, 0, &share->vfs_path); + scoped_with_init_fs() + ret =3D kern_path(share->path, 0, &share->vfs_path); ksmbd_revert_fsids(work); if (ret) { ksmbd_debug(SMB, "failed to access '%s'\n", --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 498EB3659E7; Wed, 11 Mar 2026 21:56:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266207; cv=none; b=itevtw9hiXF+gOz4sFMzovjnnO+SAoyPaqofg1VsVvwgcrAeJXu7FHuCp1UsXTNRiwRjSRc4cXxqTfuZAHWYKUuiSNGUvgtE/h2oMiJyCdrioG25ApjIpVRXG9L/7qPXx/lPJ+XZ+cc8ypevb1GEBkt7SpABQ9QoAe0qnqawC3U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266207; c=relaxed/simple; bh=l6PdqSMlvF3b2b9R+GwUvIJev9lUgXCwT4zIDcHSxvE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ak/mP7pXeT3Qi+Sh+3Yg2cGM0GZqlk8yoGqfq2Tc3Ev+pIEsXgZWEzwvLcC5IoxZcGJO/x3eOI9tc1UGd/s0MMBrPmecagypTkOnh7Mt2Gg41Ytzfs4HcjsUv3/dUYNF2VOYKf07A8QMAYIlYOLWd+lVj6Z6xIsZ4o+B/rLf+bU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dJL2IbRc; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dJL2IbRc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C0678C4CEF7; Wed, 11 Mar 2026 21:56:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266206; bh=l6PdqSMlvF3b2b9R+GwUvIJev9lUgXCwT4zIDcHSxvE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=dJL2IbRcDFTppjakvK5yst/K0WaqT9HIxUXfcTIyUxaWlsTf4VRBJjrDojq7bm9el 30B+o04xDww1YDJJXiKEoYMHUWyRKMLHEtwheTfWJ5U7C6fxnMk6Uqwu8AZRg3Aidr P8plsRybg1pcsxS+sHXxvWSN5hEtBoCi+ec9uRft2hGwAoeBKJZ0FdHe54vHvm4GG2 3C8QMYhNA+Y2dYfHaWw0IU+hvXwI5GNIafERxSCLzrRUVb04n1Ltuzq5iiPAX3B2x+ KEQfXkaXhDjM4IEGjluHdLaKNmoa/ppt81A0zILMdO3WvSxXgtqnx9udWXlRC9XzHc dMnVPg4EKiXiQ== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:57 +0100 Subject: [PATCH RFC v3 14/26] ksmbd: use scoped_with_init_fs() for filesystem info path lookup Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-14-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=1195; i=brauner@kernel.org; h=from:subject:message-id; bh=l6PdqSMlvF3b2b9R+GwUvIJev9lUgXCwT4zIDcHSxvE=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPLT0nWl5qRfkd1fWzv2nS/onCK6/Z/fWc/HAkx1c 6umdswt6ShlYRDjYpAVU2RxaDcJl1vOU7HZKFMDZg4rE8gQBi5OAZjIOxdGhk3zvtis0OD93xDO /PrPI5E7nentkwpufhB9uH4pi4+5wxqGf4ap28V3mV/dHTxRxdow6x5Xv6yucdicYw3X2v8UHrk /gQUA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Use scoped_with_init_fs() to temporarily override current->fs for the kern_path() call in smb2_get_info_filesystem() so the share path lookup happens in init's filesystem context. All ksmbd paths =E2=86=90 SMB command handlers =E2=86=90 handle_ksmbd_work(= ) =E2=86=90 workqueue =E2=86=90 ksmbd_conn_handler_loop() =E2=86=90 kthread Signed-off-by: Christian Brauner --- fs/smb/server/smb2pdu.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c index 743c629fe7ec..0667b0b663cd 100644 --- a/fs/smb/server/smb2pdu.c +++ b/fs/smb/server/smb2pdu.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -5463,7 +5464,8 @@ static int smb2_get_info_filesystem(struct ksmbd_work= *work, if (!share->path) return -EIO; =20 - rc =3D kern_path(share->path, LOOKUP_NO_SYMLINKS, &path); + scoped_with_init_fs() + rc =3D kern_path(share->path, LOOKUP_NO_SYMLINKS, &path); if (rc) { pr_err("cannot create vfs path\n"); return -EIO; --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 565F62FFF8F; Wed, 11 Mar 2026 21:56:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266209; cv=none; b=GF3oUFS6k/yKHHGQDOnuSCv8Wr6dCnupwI7EQ5slZtyPPcednJJQYJHlD5CUmEG9H4DzeFMG84ORsUQTKwcTHvNV0pYq/ScIh3uRdmz82nDPAGU706m9xYS8HPku5nMRYRV+IguRXW1o6ft1lhDEsGB9FgxqCj8VBYGc50ZQ+hw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266209; c=relaxed/simple; bh=wU9SxeJzZju+/xFBYvuJFjoOiP1dhPkfgSD6zYZdtUQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=T3vyA/RWlF+7nagkZZUzeaOdhlyiGH8fyL0ulVlppagSEenEyWtdDFx716PLQTSNhSGyhzMAnjlr1Bc8mdytI/HNMut2ZBY7r2p030MU1Gyp9TP8SOxJohi0qtUAFErpOPhrxLytnX1k62yR3AoyBg10M+9S+q4G5dvIDEynBxk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WBqUNdbU; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="WBqUNdbU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3CFC1C19425; Wed, 11 Mar 2026 21:56:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266209; bh=wU9SxeJzZju+/xFBYvuJFjoOiP1dhPkfgSD6zYZdtUQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=WBqUNdbUP+eSSqeWnUJG7pVi6qXE+L1hb4RuJfr51ki9y6HCUJay9eOtfkWxnsG9f 9iNXLq4JnudTFxxFhuTYdRvspnIRVEmvR/im6ZsUGmRteOiQ7SCZB+vKEq5+BOFBlk fHYu4s7U4DsiikhE5cX4rfRJCkjKpjAvN8iIDINRf9MJMpcJb/OtI9ohPxw7+JBhlN dGsIWtyNV7gbgk1wOTnj95+QGx3Wf+FDcai4yTfZXlw3xfchlVtrkJ1/O9yN8g+NRG aBRzwtlLptxKN+hkUBljHWNrdDFe8siAubdmFU5q+zy/LwFwEbMhU9JHAzWA5/cLMQ tjYbLCnM1+avw== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:58 +0100 Subject: [PATCH RFC v3 15/26] ksmbd: use scoped_with_init_fs() for VFS path operations Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-15-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=2156; i=brauner@kernel.org; h=from:subject:message-id; bh=wU9SxeJzZju+/xFBYvuJFjoOiP1dhPkfgSD6zYZdtUQ=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPKz6aLnT91nu7/sjDmxlclxfYfg/GNFrv6N2X7B0 afzLr7711HKwiDGxSArpsji0G4SLrecp2KzUaYGzBxWJpAhDFycAjCRuB2MDNuSpj9srPtb7JGy 45jq7JR7YS+qimdv3XQ3Raslu5Tjvwsjw9ScNG+Gkqq7v55OVfP6rBsh8/mYm97pvhnyGQsYqjc c4gQA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Use scoped_with_init_fs() to temporarily override current->fs for path lookups in ksmbd VFS helpers: - ksmbd_vfs_path_lookup(): wrap vfs_path_parent_lookup() - ksmbd_vfs_link(): wrap kern_path() for old path resolution - ksmbd_vfs_kern_path_create(): wrap start_creating_path() This ensures path lookups happen in init's filesystem context. All ksmbd paths =E2=86=90 SMB command handlers =E2=86=90 handle_ksmbd_work(= ) =E2=86=90 workqueue =E2=86=90 ksmbd_conn_handler_loop() =E2=86=90 kthread Signed-off-by: Christian Brauner --- fs/smb/server/vfs.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/fs/smb/server/vfs.c b/fs/smb/server/vfs.c index d08973b288e5..4b537e169160 100644 --- a/fs/smb/server/vfs.c +++ b/fs/smb/server/vfs.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -67,9 +68,10 @@ static int ksmbd_vfs_path_lookup(struct ksmbd_share_conf= ig *share_conf, } =20 CLASS(filename_kernel, filename)(pathname); - err =3D vfs_path_parent_lookup(filename, flags, - path, &last, &type, - root_share_path); + scoped_with_init_fs() + err =3D vfs_path_parent_lookup(filename, flags, + path, &last, &type, + root_share_path); if (err) return err; =20 @@ -622,7 +624,8 @@ int ksmbd_vfs_link(struct ksmbd_work *work, const char = *oldname, if (ksmbd_override_fsids(work)) return -ENOMEM; =20 - err =3D kern_path(oldname, LOOKUP_NO_SYMLINKS, &oldpath); + scoped_with_init_fs() + err =3D kern_path(oldname, LOOKUP_NO_SYMLINKS, &oldpath); if (err) { pr_err("cannot get linux path for %s, err =3D %d\n", oldname, err); @@ -1258,7 +1261,8 @@ struct dentry *ksmbd_vfs_kern_path_create(struct ksmb= d_work *work, if (!abs_name) return ERR_PTR(-ENOMEM); =20 - dent =3D start_creating_path(AT_FDCWD, abs_name, path, flags); + scoped_with_init_fs() + dent =3D start_creating_path(AT_FDCWD, abs_name, path, flags); kfree(abs_name); return dent; } --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AE08138D011; Wed, 11 Mar 2026 21:56:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266211; cv=none; b=RQ69SMEnTTQeiyDjnLG/S7VuEUDGexgmL9o2H6S4nuVpgzNTjBbVzDZv4V+e0JWEqVwceHVyNLwaASphFzPTXiQbGarpDKtbJ2GyCUP+uxkwgyJBTD1INTPWRFpWnpUGUOW0aBmkChAbhgaai1XMgc2hgTO5uImGTsV0Dqafvsk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266211; c=relaxed/simple; bh=k7fCly/aiwsbj3pgXjTBxZbf7C11W0fJ4pfAC6OMiro=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=psOQGoDTun0tuOJ8YpIyDh3Lzru0nlRRAMCUdgtIRYfsdOcQlgDQ8ICR0Yfh/v0i6hsU8M0dVPdct/+ICwv1NdOQ2QLsNC3azkUIzTffj8EfbO8S0f9ShH3Y00L2YY7O71F0JsgiwNntHuf9g0JzubMzs0+FhkIMfsPMDYadf/M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BK5ysSza; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="BK5ysSza" Received: by smtp.kernel.org (Postfix) with ESMTPSA id ABD68C2BC86; Wed, 11 Mar 2026 21:56:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266211; bh=k7fCly/aiwsbj3pgXjTBxZbf7C11W0fJ4pfAC6OMiro=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=BK5ysSzaYqOzO5ZFPrZI6QeP/Z0Fs1Eci4fsqA6DMnAaOyNVjvz/G7KY0+lHWLQdW Q2MeG0ndikt6QvzQsoFF9wEH9qU4PBmoLpctJmdWTluxc0tQjd0Q2Ipc1NVNOeFeO/ s3j7j1I4C+SOg6VsblfGd0uzt+vZKqC4DUdzagGUK/jqtkyD98Snq2pJvHBH1fe+4t J7PRYuiK6qlzInR/vfGD1aTjWtc8BlOomK9tailMOk1pLXSkWeJUP9SxU0SgRDFCDD eueFddewdQiOwPxfIokMoUyWlb3obgEYQT+afQuskSaVBfud1pO4IcrHAsniQcUSWE eVtEi8pXd+k4w== From: Christian Brauner Date: Wed, 11 Mar 2026 22:43:59 +0100 Subject: [PATCH RFC v3 16/26] pnfs/blocklayout: use scoped_with_init_fs() for SCSI device lookup Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-16-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=3216; i=brauner@kernel.org; h=from:subject:message-id; bh=k7fCly/aiwsbj3pgXjTBxZbf7C11W0fJ4pfAC6OMiro=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPJT0650WUwNwxUuruaDs7P6pm5dlPSjP+CJbTeT+ nfpDRonOkpZGMS4GGTFFFkc2k3C5ZbzVGw2ytSAmcPKBDKEgYtTACYyLZLhf8Ie4T/6Pf/KI2Yr Tljt+4n97syQSaxiSQdP+Zw1Pnjn5HeG/znCgh0RiiU7Dvluqm2/uulZU6iZrPhFFe4JiTtd7y2 4ygoA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 bl_open_path() resolves pNFS block device paths under /dev/disk/by-id/ via bdev_file_open_by_path() -> lookup_bdev() -> kern_path(). This path resolution uses current->fs->root. With kthreads now starting in nullfs, this fails when the call originates from writeback kworker context because current->fs->root points at the empty nullfs. The full callchain from kworker is: wb_workfn [kworker writeback callback] ... nfs_writepages [address_space_operations.writepag= es] nfs_do_writepage nfs_pageio_add_request ... bl_pg_init_write [nfs_pageio_ops.pg_init] pnfs_generic_pg_init_write pnfs_update_layout nfs4_proc_layoutget [synchronous RPC] pnfs_layout_process bl_alloc_lseg bl_alloc_extent bl_find_get_deviceid bl_alloc_deviceid_node bl_parse_deviceid bl_parse_scsi bl_open_path bdev_file_open_by_path lookup_bdev kern_path <- current->fs->root bl_open_path() can also be reached from userspace process context (e.g. open, read, write syscalls via pnfs_update_layout). In that case current->fs must not be overridden as the path should resolve against the calling process's filesystem root. Add a tsk_is_kthread() conditional in bl_open_path() to only apply scoped_with_init_fs() in kthread context. Signed-off-by: Christian Brauner --- fs/nfs/blocklayout/dev.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/fs/nfs/blocklayout/dev.c b/fs/nfs/blocklayout/dev.c index cc6327d97a91..eed960839608 100644 --- a/fs/nfs/blocklayout/dev.c +++ b/fs/nfs/blocklayout/dev.c @@ -4,6 +4,7 @@ */ #include #include +#include #include #include #include @@ -363,21 +364,27 @@ static struct file * bl_open_path(struct pnfs_block_volume *v, const char *prefix) { struct file *bdev_file; - const char *devname; + const char *devname __free(kfree) =3D NULL; =20 devname =3D kasprintf(GFP_KERNEL, "/dev/disk/by-id/%s%*phN", prefix, v->scsi.designator_len, v->scsi.designator); if (!devname) return ERR_PTR(-ENOMEM); =20 - bdev_file =3D bdev_file_open_by_path(devname, BLK_OPEN_READ | BLK_OPEN_WR= ITE, + if (tsk_is_kthread(current)) { + scoped_with_init_fs() + bdev_file =3D bdev_file_open_by_path(devname, + BLK_OPEN_READ | BLK_OPEN_WRITE, NULL, NULL); + } else { + bdev_file =3D bdev_file_open_by_path(devname, + BLK_OPEN_READ | BLK_OPEN_WRITE, NULL, NULL); + } if (IS_ERR(bdev_file)) { dprintk("failed to open device %s (%ld)\n", devname, PTR_ERR(bdev_file)); } =20 - kfree(devname); return bdev_file; } =20 --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 03EAE38E113; Wed, 11 Mar 2026 21:56:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266214; cv=none; b=glNlElyg44pXzzMS2NkBef8EO7BgNEWRKWbeiGlxlxd4v/Fkv9LmJb/zkYhV0iQl87KqNAffV44fHYV+2JPKMRF5kzU3YnN0HFYQnE6A+44etlP3crcVoskx9Z4vdfR9v1WG2qS2ubRVFnI5UiKFPP05GVPd+xDaMHWywi1r2us= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266214; c=relaxed/simple; bh=ct4MC2RNc9/k+XVDf4PqnJGPg0ODKqXqu8HrTiNpPn0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tXUKIj9N0RZ38ox/80vV2MuMFTDbz/gdV9ODP71eafyljC9dvBgB9coPjaqaWn+R3cP3depgrh46GhJ8MJzvzUlRSEKXlYTa2XLFg7faCxH1k6jcVupdfVIssdrtEuTGXPGplttDLuTwBPSCOt3AeOn8vZukIDDI+FYmS09MEYw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TbtXavPf; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="TbtXavPf" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0FF5CC4CEF7; Wed, 11 Mar 2026 21:56:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266213; bh=ct4MC2RNc9/k+XVDf4PqnJGPg0ODKqXqu8HrTiNpPn0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=TbtXavPfIftSKdivO5+bsHWgEPSmeCwKToS+5KpoYBQqpNEBQq0MYzdzGkMy5wVvl R0zxhMl6da0JSwv1b3C2AQUoBvAGsSxzBXtEkhAh75n02GZUu0zFJcWJGIGcFl++XH mTI5sOX58ESL5L34E0XMe1GbeVFBzrwrfBCl0OZazbReEixEEtPWbTJCvondd578WV HhwyQ62uh5TlBZZUdg7BaZDjph3zS8KsSWGxOv3g4M/jzHf3u6eBpfYhxurbtne52h 8SeQrfLzh2kcUmaOt8C4gCUbdp8g6reBBReE6w+NmBUEnDT/8H/wGtScZkn2+8yftt Fii/DlFgQU+ng== From: Christian Brauner Date: Wed, 11 Mar 2026 22:44:00 +0100 Subject: [PATCH RFC v3 17/26] initramfs: use scoped_with_init_fs() for rootfs unpacking Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-17-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=2422; i=brauner@kernel.org; h=from:subject:message-id; bh=ct4MC2RNc9/k+XVDf4PqnJGPg0ODKqXqu8HrTiNpPn0=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPJThseJZc9xqQC97JR7RenTDi4TuT4t9rLO5wut6 WrPQg2+dpSyMIhxMciKKbI4tJuEyy3nqdhslKkBM4eVCWQIAxenAExEeyfD/zKdn1WbkgUC9Tv3 M70pjZjnEF0n+atj7sd5fVp/Pvpc3cbwv2BjjKHDxcv8JcXrDy69xDO74tttuxZf2cQ/whIKqr4 JHAA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Extract the initramfs unpacking code into a separate unpack_initramfs() function and wrap its invocation from do_populate_rootfs() with scoped_with_init_fs(). This ensures all file operations during initramfs unpacking (including filp_open() calls in do_name() and populate_initrd_image()) happen in init's filesystem context. Note that security_initramfs_populated() needs the scope as well since it does use current->fs to derive the initramfs superblock. do_populate_rootfs() =E2=86=90 async_schedule_domain() =E2=86=90 kworker (a= sync workqueue) May also run synchronously from PID 1 in case async workqueue is considered full. Overriding in that case is fine as well. Signed-off-by: Christian Brauner --- init/initramfs.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/init/initramfs.c b/init/initramfs.c index 139baed06589..3faa2045b9cf 100644 --- a/init/initramfs.c +++ b/init/initramfs.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -715,7 +716,7 @@ static void __init populate_initrd_image(char *err) } #endif /* CONFIG_BLK_DEV_RAM */ =20 -static void __init do_populate_rootfs(void *unused, async_cookie_t cookie) +static void __init unpack_initramfs(async_cookie_t cookie) { /* Load the built in initramfs */ char *err =3D unpack_to_rootfs(__initramfs_start, __initramfs_size); @@ -723,7 +724,7 @@ static void __init do_populate_rootfs(void *unused, asy= nc_cookie_t cookie) panic_show_mem("%s", err); /* Failed to decompress INTERNAL initramfs */ =20 if (!initrd_start || IS_ENABLED(CONFIG_INITRAMFS_FORCE)) - goto done; + return; =20 if (IS_ENABLED(CONFIG_BLK_DEV_RAM)) printk(KERN_INFO "Trying to unpack rootfs image as initramfs...\n"); @@ -738,9 +739,14 @@ static void __init do_populate_rootfs(void *unused, as= ync_cookie_t cookie) printk(KERN_EMERG "Initramfs unpacking failed: %s\n", err); #endif } +} =20 -done: - security_initramfs_populated(); +static void __init do_populate_rootfs(void *unused, async_cookie_t cookie) +{ + scoped_with_init_fs() { + unpack_initramfs(cookie); + security_initramfs_populated(); + } =20 /* * If the initrd region is overlapped with crashkernel reserved region, --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 98A3438F65A; Wed, 11 Mar 2026 21:56:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266216; cv=none; b=Ep8X8POzU+0LiKZe4aS5BwdsiMPv+2Z50zn2C63F/tfol8x9sqwtq3T+WQI9dJUuRFQBnOuV3yAAkO2YFfvF/2cVyYJILFVCakwCcHpLu/OfyjN7/MpxQwQ6nR3sMb6mZeXXkdygMV73q4Am2+uU1Wdlff2aCXtzt4htKPOvftE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266216; c=relaxed/simple; bh=GaVed/uXlUfN2mfqqpnSHi/Y3WP/E0BQOp7hhIxY23E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nLqBkT/O2eGRgaxtM9PwYn5Xgepdndm0pe66WFqrXc5QB6+hQYVpNAIhDjHo+B4BCMKZU2S4I7rSaotfs86Bndm6i9HTuYUNDNaQGJrE9WcLNOGGGiJVMSzY2GpGWSfQMBN0XViNTtaQG1uEi+fpdaOGYo9Cf3/5JcbUpiUdv4k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=iO1G7PMX; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="iO1G7PMX" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 58DF1C4CEF7; Wed, 11 Mar 2026 21:56:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266216; bh=GaVed/uXlUfN2mfqqpnSHi/Y3WP/E0BQOp7hhIxY23E=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=iO1G7PMX+8xhBjofPl5+LptdsrV3MX1HYjDSSiv028qt287fcvXV8obq/IXGx84Ya 3/NqHLhbL0Ub7JgJSF7J00e5cSnWLCp6NL3NdTOIf26UhbSQEMDIm1Av8lAVnIDtPR cGMhvgKBNlDwUBN8d8RFSHg8w01CSjgb5/1vm1dzHSncMMztnJxJNEw9+QIv0UV9Mm csVfL7rlHQ0ZyHn87TOarXnQQP7zi5ucOl6ajHXK7kdUABAgkQEfOLv2UVxIBNFQ81 Q9BPTTdg6q/CuPw2CN0AI13vWUmeL52p1xkdcfUsVKS2iOIXIurFn0xcHR/Zde6njA Je3TfMzomZr5w== From: Christian Brauner Date: Wed, 11 Mar 2026 22:44:01 +0100 Subject: [PATCH RFC v3 18/26] af_unix: use scoped_with_init_fs() for coredump socket lookup Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-18-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=1717; i=brauner@kernel.org; h=from:subject:message-id; bh=GaVed/uXlUfN2mfqqpnSHi/Y3WP/E0BQOp7hhIxY23E=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPIz/dWDjR+L5xzQE5Gb/8i2xykyXd7B6tXipJhY+ 6r+sJagjlIWBjEuBlkxRRaHdpNwueU8FZuNMjVg5rAygQxh4OIUgImsymH47/A7P+EIm8SiZRUf ciZYbO4zXvXE/E6ve4z0yvy/q7tWH2JkOF/3c6a+l4K4/T6ZKNZdB/W+y+zWC1fMP7a7I/fr4qe J7AA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Use scoped_with_init_fs() to temporarily override current->fs for the coredump unix socket path resolution. This replaces the init_root() + vfs_path_lookup() pattern with scoped_with_init_fs() + kern_path(). The old code used LOOKUP_BENEATH to confine the lookup beneath init's root. This is dropped because the coredump socket path is absolute and resolved from root (where ".." is a no-op), and LOOKUP_NO_SYMLINKS already blocks any symlink-based escape. LOOKUP_BENEATH was redundant in this context. unix_find_bsd(SOCK_COREDUMP) =E2=86=90 coredump_sock_connect() =E2=86=90 do= _coredump() =E2=80=94 same crashing userspace process Same security rationale as coredump. Signed-off-by: Christian Brauner --- net/unix/af_unix.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 3756a93dc63a..64b56b3d0aee 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -1198,17 +1198,12 @@ static struct sock *unix_find_bsd(struct sockaddr_u= n *sunaddr, int addr_len, unix_mkname_bsd(sunaddr, addr_len); =20 if (flags & SOCK_COREDUMP) { - struct path root; - - task_lock(&init_task); - get_fs_root(init_task.fs, &root); - task_unlock(&init_task); - - scoped_with_kernel_creds() - err =3D vfs_path_lookup(root.dentry, root.mnt, sunaddr->sun_path, - LOOKUP_BENEATH | LOOKUP_NO_SYMLINKS | - LOOKUP_NO_MAGICLINKS, &path); - path_put(&root); + scoped_with_init_fs() { + scoped_with_kernel_creds() + err =3D kern_path(sunaddr->sun_path, + LOOKUP_NO_SYMLINKS | + LOOKUP_NO_MAGICLINKS, &path); + } if (err) goto fail; } else { --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A172D3909BE; Wed, 11 Mar 2026 21:56:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266218; cv=none; b=kKU6/qm3rbN3d1Ay+M9TXoc/r5L+3843vzOu9eBR6vIOk2SrBCTUXb94qnY8OS/5pC/PBYF0XKDo93HuPPnGj22EpqtA/1vXQvealzYIAj7Mvv4ow1CB5Vsy+dwkvFMTLlvMsH751sBFVoJfdvOWlT6wmLH6TLgMvk5GJoStF/o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266218; c=relaxed/simple; bh=cEPoxGsNVeZpiXD7WHSwi6VwLjjrPPIdV4amCA7QCoA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DWbgYf7OqE4odYZw7Vx64uLCetfy39ZGNWW+HC3x8CP3I+8GQlGzkKbJf9eCko98CR+MIneXlmABSBE/odSxRq9ltsYamjghqjGgYD8K5w2x0LxU5mUCRRzZzT/ickkUn+jpgaOosb1MW2V8kD0+TesMkOvsDUpewxqhy79hMWI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BQ+VwBgx; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="BQ+VwBgx" Received: by smtp.kernel.org (Postfix) with ESMTPSA id ACBBEC116C6; Wed, 11 Mar 2026 21:56:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266218; bh=cEPoxGsNVeZpiXD7WHSwi6VwLjjrPPIdV4amCA7QCoA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=BQ+VwBgx7ibv2Swk9+UTOvu2r4XXKwqGZelQr4EYxRsXw9RkaPgkFK0T9Mffht7TD X4FBmKqmiwaPTqPrQ6gMpXTl6nGWX98V8YuHh6lfIjDLqB4L7o19t/qfmYMBJ0vakh mFS6wWiFGb5fh+5ioiYj2+9Zpv5wPS6gV7vVRpOvTSUqTFLr3ykxQFOUrN0rpF9C4t eUZgTGkfFD8MHPdbH67z8O+vv01dKknGjAzj+uHR7IMbTl3MfS6BT68XzhyNJcGjD8 S4mwj9AlQ5uppuAE+eecSf0pKWxKoq9G8nsqsKG/wFySdH4R2bepaT+ngTCPi1OaCi R4sEjV+YtM9tQ== From: Christian Brauner Date: Wed, 11 Mar 2026 22:44:02 +0100 Subject: [PATCH RFC v3 19/26] fs: stop sharing fs_struct between init_task and pid 1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-19-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=1574; i=brauner@kernel.org; h=from:subject:message-id; bh=cEPoxGsNVeZpiXD7WHSwi6VwLjjrPPIdV4amCA7QCoA=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPLTfYWmx/Yju7K49WW+MCzS/Jy+IDD/aMbWyzY3f ypq9uc+6yhlYRDjYpAVU2RxaDcJl1vOU7HZKFMDZg4rE8gQBi5OAZhI4w6GP9we9vdZ10xMPdK3 bu1v6bqNFdNbZsWWJhxMT3+aufdE72+G/07twVs7//+avfP+qU1HYk/Z3cqPV9sb5ZP+NXJ744J dwuwA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Spawn kernel_init (PID 1) via kernel_clone() directly instead of user_mode_thread(), without CLONE_FS. This gives PID 1 its own private copy of init_task's fs_struct rather than sharing it. This is a prerequisite for isolating kthreads in nullfs: when init_task's fs is later pointed at nullfs, PID 1 must not share it or init_userspace_fs() would modify init_task's fs as well, defeating the isolation. At this stage PID 1 still gets rootfs (a private copy rather than a shared reference), so there is no functional change. Signed-off-by: Christian Brauner --- init/main.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/init/main.c b/init/main.c index 5ccc642a5aa7..6633d4bea52b 100644 --- a/init/main.c +++ b/init/main.c @@ -714,6 +714,11 @@ static __initdata DECLARE_COMPLETION(kthreadd_done); =20 static noinline void __ref __noreturn rest_init(void) { + struct kernel_clone_args init_args =3D { + .flags =3D (CLONE_VM | CLONE_UNTRACED), + .fn =3D kernel_init, + .fn_arg =3D NULL, + }; struct task_struct *tsk; int pid; =20 @@ -723,7 +728,7 @@ static noinline void __ref __noreturn rest_init(void) * the init task will end up wanting to create kthreads, which, if * we schedule it before we create kthreadd, will OOPS. */ - pid =3D user_mode_thread(kernel_init, NULL, CLONE_FS); + pid =3D kernel_clone(&init_args); /* * Pin init on the boot CPU. Task migration is not properly working * until sched_init_smp() has been run. It will set the allowed --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4819D391E5C; Wed, 11 Mar 2026 21:57:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266221; cv=none; b=KJKAO71ahSCPWld/Xc3pXSRo05B1r396yQU+hNbPYrHLMobl9Vz5nZTNAaHysrz7SnyvHBYcJQ2q2d6zD9UUkK3nOOME1aQSMkgpHch8ESyvsUIenZq+E+K5yRCETuyD27ZVu//eiim5RV0Z+cseN4b0KGJXKtL/kyhtfvM1d1g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266221; c=relaxed/simple; bh=2u79D1NrEAVE1PW8puRWthwb+bEwcxesCsBnDajL7O4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OZoxb7h9fg0gsyAdKqyDkuFv5gLTu79NfSj18eODUmi1rU7bb/f4hxs3UOSBkPRWEobJxVIXKcI+Lgb0a2jC1LW5qpNny5FzQMWg78k1o4B/Jy1CzFbeYx06hBTzw1FDI5ZdGWwuuqom+R/kxpnm1vWwJm6va1ZnWpmDa5vs5Bk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ONGgoDpr; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ONGgoDpr" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 04B82C116C6; Wed, 11 Mar 2026 21:56:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266221; bh=2u79D1NrEAVE1PW8puRWthwb+bEwcxesCsBnDajL7O4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ONGgoDprpl3MBS/8/pvmmoLsxC9MT0EkjFFzEvQaJ/FH+7SeqDpMXXSuru3h5en3e Il2887nvqUIu4g+XLo3CkZfwU+trdf6L9lsVyauERvogKHVmqyE5NSnpO6V6E4Glk5 tyOy/3gvrmEjwe9i1LsGWsRCcZtuLtGAmkfrNm4Fj6Y+u50lW9cCfeOzw4ZXAwO8lC qt+zq04snIxZ9hiNts2S26WVUv1YP9epHkjjvNgw+Ufgf2L2db40PJWUesqGi7oyHG dpBuculIJR3ib/TOSN27G5j5a075hIqXDH800TTppOVr0BdlfPrjmod8qPTLau2PKf b5vrzBDnqXh+Q== From: Christian Brauner Date: Wed, 11 Mar 2026 22:44:03 +0100 Subject: [PATCH RFC v3 20/26] fs: add umh argument to struct kernel_clone_args Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-20-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=3641; i=brauner@kernel.org; h=from:subject:message-id; bh=2u79D1NrEAVE1PW8puRWthwb+bEwcxesCsBnDajL7O4=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPLzdvvcACb+YvZyRjMb1bg8pQ3fap58CHHu/ynXL /29rbG8o5SFQYyLQVZMkcWh3SRcbjlPxWajTA2YOaxMIEMYuDgFYCLnLzAytK//9nnLhJnp+xKt n+b+5VPQvX6yYe2H2MkcfvPP2xy4rM3I0Gn54lzNd/2TplZbLs/eX8AQEfHn64QXi5/dv6XLefn 9fAYA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Add a umh field to struct kernel_clone_args. When set, copy_fs() copies from pid 1's fs_struct instead of the kthread's fs_struct. This ensures usermodehelper threads always get init's filesystem state regardless of their parent's (kthreadd's) fs. Usermodehelper threads are not allowed to create mount namespaces (CLONE_NEWNS), share filesystem state (CLONE_FS), or be started from a non-initial mount namespace. No usermodehelper currently does this so we don't need to worry about this restriction. Set .umh =3D 1 in user_mode_thread(). At this stage pid 1's fs points to rootfs which is the same as kthreadd's fs, so this is functionally equivalent. Signed-off-by: Christian Brauner --- include/linux/sched/task.h | 1 + kernel/fork.c | 25 +++++++++++++++++++++---- kernel/umh.c | 6 ++---- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/include/linux/sched/task.h b/include/linux/sched/task.h index 41ed884cffc9..e0c1ca8c6a18 100644 --- a/include/linux/sched/task.h +++ b/include/linux/sched/task.h @@ -31,6 +31,7 @@ struct kernel_clone_args { u32 io_thread:1; u32 user_worker:1; u32 no_files:1; + u32 umh:1; unsigned long stack; unsigned long stack_size; unsigned long tls; diff --git a/kernel/fork.c b/kernel/fork.c index 154703cf7d3d..f62b4c370f74 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -1590,11 +1590,27 @@ static int copy_mm(u64 clone_flags, struct task_str= uct *tsk) return 0; } =20 -static int copy_fs(u64 clone_flags, struct task_struct *tsk) +static int copy_fs(u64 clone_flags, struct task_struct *tsk, bool umh) { - struct fs_struct *fs =3D current->fs; + struct fs_struct *fs; + + /* + * Usermodehelper may use userspace_init_fs filesystem state but + * they don't get to create mount namespaces, share the + * filesystem state, or be started from a non-initial mount + * namespace. + */ + if (umh) { + if (clone_flags & (CLONE_NEWNS | CLONE_FS)) + return -EINVAL; + if (current->nsproxy->mnt_ns !=3D &init_mnt_ns) + return -EINVAL; + fs =3D userspace_init_fs; + } else { + fs =3D current->fs; + VFS_WARN_ON_ONCE(current->fs !=3D current->real_fs); + } =20 - VFS_WARN_ON_ONCE(current->fs !=3D current->real_fs); if (clone_flags & CLONE_FS) { /* tsk->fs is already what we want */ read_seqlock_excl(&fs->seq); @@ -2213,7 +2229,7 @@ __latent_entropy struct task_struct *copy_process( retval =3D copy_files(clone_flags, p, args->no_files); if (retval) goto bad_fork_cleanup_semundo; - retval =3D copy_fs(clone_flags, p); + retval =3D copy_fs(clone_flags, p, args->umh); if (retval) goto bad_fork_cleanup_files; retval =3D copy_sighand(clone_flags, p); @@ -2727,6 +2743,7 @@ pid_t user_mode_thread(int (*fn)(void *), void *arg, = unsigned long flags) .exit_signal =3D (flags & CSIGNAL), .fn =3D fn, .fn_arg =3D arg, + .umh =3D 1, }; =20 return kernel_clone(&args); diff --git a/kernel/umh.c b/kernel/umh.c index cffda97d961c..d3f4b308b85d 100644 --- a/kernel/umh.c +++ b/kernel/umh.c @@ -71,10 +71,8 @@ static int call_usermodehelper_exec_async(void *data) spin_unlock_irq(¤t->sighand->siglock); =20 /* - * Initial kernel threads share ther FS with init, in order to - * get the init root directory. But we've now created a new - * thread that is going to execve a user process and has its own - * 'struct fs_struct'. Reset umask to the default. + * Usermodehelper threads get a copy of userspace init's + * fs_struct. Reset umask to the default. */ current->fs->umask =3D 0022; =20 --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6993736493F; Wed, 11 Mar 2026 21:57:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266223; cv=none; b=WzND2f102+7ejD9FxsTN11Di5fQC66j33mUa6pnZEOT/PI4dxvt2NMdx7ho7mAOotz6Aarn65cHkP0Qi+cHsooupyIgUpg5ihkzigVOnwtbmzH8/UuhM7Kb9ddxoqjI8UAfSov8dRWCX8Nnw65uPojafrd6bxNy+Bitgu6O3AU8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266223; c=relaxed/simple; bh=mGo5vgPxXKHRdLRU9ukAme3eIep7Ijcwdt87UtWZBEM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dlncJYDCQkb5YpbLN/6SoOeE2nllH34eVzj5h+e/5UIRgublWKbSaYn0O+X3dIwhDBhmPestIVaLk/kdNDE0u0mOmpipVhdR4PO7Z+qdHtFvtTwYoaTm7elB7jMAobfeKpIlLj6OJl5sVPU748LE1WzMxAAWMAmgS9L94tdCiLw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=k41r6gxK; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="k41r6gxK" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6B220C2BC9E; Wed, 11 Mar 2026 21:57:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266223; bh=mGo5vgPxXKHRdLRU9ukAme3eIep7Ijcwdt87UtWZBEM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=k41r6gxKuRdpEeIuyFgrm3Gogs3TDNQh9fcKon0zj1xJIdMJr6/0xl2fJtKIt8VZV WfNgJOg3n2YmASOzKUBHmuCyCM/KqQRH9y7E9vFrZDBsqEPxKeeeR+sNpVamB7c/0Q f0tNlPpNx+FUZsoQ0KfnGWtHut0Thuw9Zs1lwMqqjzPIcmdENk5Djd31Je5Jyi+DKq Mc7CkOUl1zsx6ZLdz3fV201XB5zYqJ1yjYq/gUyn/3wC4Bsr+c9SagmGCpav7O9xgk uchPqYIigfjfBjt9YNMp01p3O8eZks1gfhTGDK1WYnLfLP1zrYsS9i8CoWZSC7CgA8 ZSdWQHmvMpN6w== From: Christian Brauner Date: Wed, 11 Mar 2026 22:44:04 +0100 Subject: [PATCH RFC v3 21/26] fs: add kthread_mntns() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-21-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=1890; i=brauner@kernel.org; h=from:subject:message-id; bh=mGo5vgPxXKHRdLRU9ukAme3eIep7Ijcwdt87UtWZBEM=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPJTdG691hr1FJMFm9Tzsze/V+zqtlX++3AVw9RlT u6Gq8zjOkpZGMS4GGTFFFkc2k3C5ZbzVGw2ytSAmcPKBDKEgYtTACZyfhcjw5V9Wcv87n8uz7nY Jc3zeHrs74f825QimxI93rZKBS/4xMTwP3HBi/knjd/+8Vlc1CP2WmdB6u/ary6T7i7N6TQyY1O ezAwA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Allow kthreads to create a private mount namespace. Signed-off-by: Christian Brauner --- fs/namespace.c | 30 ++++++++++++++++++++++++++++++ include/linux/mount.h | 1 + 2 files changed, 31 insertions(+) diff --git a/fs/namespace.c b/fs/namespace.c index 854f4fc66469..e23d2fa7e255 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -6200,6 +6200,36 @@ static void __init init_mount_tree(void) ns_tree_add(&init_mnt_ns); } =20 +/* + * Allow to give a specific kthread a private mount namespace anchored + * in the userspace nullfs (mount id 1) so it can mount. + */ +int __init kthread_mntns(void) +{ + struct mount *m; + struct path root; + int ret; + + /* Only allowed for kthreads in the initial mount namespace. */ + VFS_WARN_ON_ONCE(!(current->flags & PF_KTHREAD)); + VFS_WARN_ON_ONCE(current->nsproxy->mnt_ns !=3D &init_mnt_ns); + + /* + * TODO: switch to creating a completely empty mount namespace + * once that series lands. + */ + ret =3D ksys_unshare(CLONE_NEWNS); + if (ret) + return ret; + + m =3D current->nsproxy->mnt_ns->root; + root.mnt =3D &m->mnt; + root.dentry =3D root.mnt->mnt_root; + set_fs_pwd(current->fs, &root); + set_fs_root(current->fs, &root); + return 0; +} + void __init mnt_init(void) { int err; diff --git a/include/linux/mount.h b/include/linux/mount.h index acfe7ef86a1b..69d61f21b548 100644 --- a/include/linux/mount.h +++ b/include/linux/mount.h @@ -106,6 +106,7 @@ int do_mount(const char *, const char __user *, extern const struct path *collect_paths(const struct path *, struct path *= , unsigned); extern void drop_collected_paths(const struct path *, const struct path *); extern void kern_unmount_array(struct vfsmount *mnt[], unsigned int num); +int __init kthread_mntns(void); =20 extern int cifs_root_data(char **dev, char **opts); =20 --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C88CB37417C; Wed, 11 Mar 2026 21:57:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266225; cv=none; b=qjtiYd8uTrkv+ynas5lbzkTOOeKouKlw1hwGpOwBs47gV/UB3qniZcL7LHb1a2Oha4IJKN0xjYbzZ6kUJOOtYMthnuyoLhfTeq+I2vP56ecV8bupxGgQYBcKQWprQHcazMpYawuGqDH+d7siz9iXLlJpkJTLdS/ZR3hm1XSIm68= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266225; c=relaxed/simple; bh=LEkYCP2B26VM04U/Xfgf30JgLqLChdLWXV57GkA2dNs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OKuTEJ8lHnLwE2g+Sam6IuokufWD5TiQvroOdL2DliOvGInpD13zCBMebC7ihserlFCvT51sIVeumqfFEOTkkIRj+YxZMEaUwO0NeMHtEXazBf8hxCHTLI1tTO8drJ1HqbtUJB6dOwVVVk5v8SbEGS+xly4K3kzZDrfa5Dl/RKA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AKzPHBAT; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="AKzPHBAT" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B6D73C4CEF7; Wed, 11 Mar 2026 21:57:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266225; bh=LEkYCP2B26VM04U/Xfgf30JgLqLChdLWXV57GkA2dNs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=AKzPHBATsS/mL4PJnheBXkgfMRwEVUBgU9XYFk2v+qqiFhskqcja0yivodaLiIzvD ZkWBwICPGmTxMtSkDcBOu46t+XeyWK5fZss6w3o8Zk8Gzz0sVbRhNz5omx14WkdRTg Ig4nyleH/C0Hv8/OFJwfuTBPxJtNOa6KHjCsMEayRkbqW4IIthKRi+2ajVPwmYnru7 8oqGqXoEzCaIbJFGhSi2Pl4S4nSRv07nQd/ochmmwU9MvDrdl4fMtSanNTYRs6frZD dUo1KBLnymW1sM03Ilw3bMEMciT9RlxJcCEMmrPPs+IhIohIK9x/iBhqf5nW2r2TgX jkJGdNixFXa1g== From: Christian Brauner Date: Wed, 11 Mar 2026 22:44:05 +0100 Subject: [PATCH RFC v3 22/26] devtmpfs: create private mount namespace Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-22-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=792; i=brauner@kernel.org; h=from:subject:message-id; bh=LEkYCP2B26VM04U/Xfgf30JgLqLChdLWXV57GkA2dNs=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPJTScfwXeA+tmr5OFctjcr4hq73h9wuZTz5rT9pz fbcJsbVHSUsDGJcDLJiiiwO7Sbhcst5KjYbZWrAzGFlAhnCwMUpABN5v5Dhe4bra/3P3wJ/HXzE d2KHctCdCS+2PTdya5w+SaMy/PoDVoZ/Rn0xQbMydT+xXj5vGXm31aDOqpVr+QGdNKcwA3WlPiE GAA== X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Kernel threads are located in a completely isolated nullfs mount. Make it possible for a kthread to create a private mount namespace so it can mount private filesystem instances. This is only used by devtmpfs. Signed-off-by: Christian Brauner --- drivers/base/devtmpfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/base/devtmpfs.c b/drivers/base/devtmpfs.c index b1c4ceb65026..246ac0b331fe 100644 --- a/drivers/base/devtmpfs.c +++ b/drivers/base/devtmpfs.c @@ -413,7 +413,7 @@ static noinline int __init devtmpfs_setup(void *p) { int err; =20 - err =3D ksys_unshare(CLONE_NEWNS); + err =3D kthread_mntns(); if (err) goto out; err =3D init_mount("devtmpfs", "/", "devtmpfs", DEVTMPFS_MFLAGS, NULL); --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2A27E375AB5; Wed, 11 Mar 2026 21:57:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266228; cv=none; b=jcf7sVzz13navzXojBtDDIhpS0iLoumCyYBHhubFTGigPRzTJmW/39wAJv/hGLLdJGjla96UHpB1k6w2gxb3+aez4RqNURX6fTewVm76zedgVMZI6Bpen09MDRHesW38UCgGdCNWjIlWXnA34SMYOcHsevBwc1UDLEquXgMyLR8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266228; c=relaxed/simple; bh=OfklnmmZPVz/ZNjVBmutvpLLH5yXolehLkyGmRTZNpc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NKJQtgDFgi686lDSJ1M8Pcd1eG/CwYiJH5O2RTm6QCXgCNYHyZggUUjrCEul9sOkjYK5cMpPpb7s4Y8XDK+Lv03oeB8tRi0w/sdh1OUioWZMgKczeIRNtwMxB5AqawPhNRmyPTX6c3zcvUyvJvfstzAPISd/VR9J5oRSlKMyciU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rq0tQS2N; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rq0tQS2N" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2AE96C19425; Wed, 11 Mar 2026 21:57:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266228; bh=OfklnmmZPVz/ZNjVBmutvpLLH5yXolehLkyGmRTZNpc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=rq0tQS2Nh892QmB3bDzhPMwel/vYol1iMe+ZqbM5IlaZkRQU0HjP7MJIthikxsvPT /fFWSOU6wgCcZM42CkhKuL5ZDjy708Z0nEPk1gfqMWzyaFWijG7px09bDWcyzaKW0M l/lmXMj3yZPI8Fu4nLjKd0xpW/peZ189owf+u2vLOSzHOmPOcJsHx1pyxqn0D4hA53 Uh4QAMyoymPsWzqMzQTvswi3qbwNdD2j/Z9YX0JG5plzCpgvO7yPetkhzDL9Sh730H 0v2FrUoTdPG2Ik5A6hMDHO9wWilBKCyxRUJnfZp5VolR5sWp5SlrjVI9SzS3XwMlP5 0Py2NgTeadERQ== From: Christian Brauner Date: Wed, 11 Mar 2026 22:44:06 +0100 Subject: [PATCH RFC v3 23/26] nullfs: make nullfs multi-instance Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-23-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=1392; i=brauner@kernel.org; h=from:subject:message-id; bh=OfklnmmZPVz/ZNjVBmutvpLLH5yXolehLkyGmRTZNpc=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPIzbnN0aKP51vn7C4TPWby9+bAm/Mc21+ANq2x+v 5rzV8TpQkcpC4MYF4OsmCKLQ7tJuNxynorNRpkaMHNYmUCGMHBxCsBEzioyMnx8uu6bl/rc6O1T RO6/Or3r2I3FfzT+/Xgb+fT7wRNsvMt5GRkm3OdSkzDIr/gcu/8mZ9HyVRfWTLST4mpYrfvbLam 3ppEFAA== X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Allow multiple instances of nullfs to be created. Right now we're only going to use it for kernel-internal purposes but ultimately we can allow userspace to use it too to e.g., safely overmount stuff. Signed-off-by: Christian Brauner --- fs/nullfs.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/fs/nullfs.c b/fs/nullfs.c index fdbd3e5d3d71..c6f5b9493e26 100644 --- a/fs/nullfs.c +++ b/fs/nullfs.c @@ -40,14 +40,9 @@ static int nullfs_fs_fill_super(struct super_block *s, s= truct fs_context *fc) return 0; } =20 -/* - * For now this is a single global instance. If needed we can make it - * mountable by userspace at which point we will need to make it - * multi-instance. - */ static int nullfs_fs_get_tree(struct fs_context *fc) { - return get_tree_single(fc, nullfs_fs_fill_super); + return get_tree_nodev(fc, nullfs_fs_fill_super); } =20 static const struct fs_context_operations nullfs_fs_context_ops =3D { @@ -57,9 +52,8 @@ static const struct fs_context_operations nullfs_fs_conte= xt_ops =3D { static int nullfs_init_fs_context(struct fs_context *fc) { fc->ops =3D &nullfs_fs_context_ops; - fc->global =3D true; - fc->sb_flags =3D SB_NOUSER; - fc->s_iflags =3D SB_I_NOEXEC | SB_I_NODEV; + fc->sb_flags |=3D SB_NOUSER; + fc->s_iflags |=3D SB_I_NOEXEC | SB_I_NODEV; return 0; } =20 --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B921D39184E; Wed, 11 Mar 2026 21:57:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266230; cv=none; b=nkDkINpdrOAUVfBAISZu9tLujvP76tnOcYKU//VdSc59fl/AsVri9tb66KtErX2w1H9yPa5GRUkrj9Eq89f5aOZeItsL6DqRsu3mH+vIgTgPN5wks5ve4DIcc5PoKJWKUPGLahjZKHYMHfnyU+KHnkU3UEIPBj3UjmemKZY1CEM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266230; c=relaxed/simple; bh=0vVqDulfALAa2ZKGEfk6GsJGjbD9gDlPR8IXvd/Me5s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PltMeyJY+GtBKCkKacuZzbwggr08HRJkdNbh3w3n6/nR7jVmQzUP+WGpHuLm0A9N7WTk6TALgyQyMB/OxLodbhiFJND38dUmDdYmbg6POl7MjW7mdvqGPFAqklW72I7my5GzamATSuqiQWVRYnaYGynQ6BcyRb8gEs0bulu6CFc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rCPEixEa; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rCPEixEa" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9EC42C4CEF7; Wed, 11 Mar 2026 21:57:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266230; bh=0vVqDulfALAa2ZKGEfk6GsJGjbD9gDlPR8IXvd/Me5s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=rCPEixEajOBtnHExxSSbSuskldE2eHG8P13Rs+3polFfiAkEyPueTqdU4QrixCqHP kXsm6Eb9HHg/lhvxfOKT2X05Ryu0B1/LPrUdt0jro/z3saEXgKQxxpo2Yicjn6RGc9 zO/vmSyBF29njl8/ENL1fNOLB+8FpPbU7C4ghrWumVGss6orPe2QtGw6cCwWQTyJXX 3odLtmIlPV4IZt0Last6dJv5Y17oEI4/saKoK7Vpgov44lvc5IWYRzFcgMEJDmcBoW mLxN8ovfaCgzenbHjlzlxCWT4U/sREZH9FGdA+dCvedigCxRIw2bOq/EaW3R0U/zmP fw6R3aBzjdA/w== From: Christian Brauner Date: Wed, 11 Mar 2026 22:44:07 +0100 Subject: [PATCH RFC v3 24/26] fs: start all kthreads in nullfs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-24-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=2067; i=brauner@kernel.org; h=from:subject:message-id; bh=0vVqDulfALAa2ZKGEfk6GsJGjbD9gDlPR8IXvd/Me5s=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPLzqtjj+7+FPgrXTZH41H7wYji7EyPP8/6QwM7kg kDVz/45HaUsDGJcDLJiiiwO7Sbhcst5KjYbZWrAzGFlAhnCwMUpABPpFmD4Z+0kxvLagTHhf/Iz YaWct4/fm5jH/F1yhiGG+fqLAFkNG0aGRTHX/zNc7ni3KWahxka+ryZ3L/3/yWmXceralnWC2Zv qWQE= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Point init_task's fs_struct (root and pwd) at a private nullfs instance instead of the mutable rootfs. All kthreads now start isolated in nullfs and must use scoped_with_init_fs() for any path resolution. PID 1 is moved from nullfs into the initramfs by init_userspace_fs(). Usermodehelper threads use userspace_init_fs via the umh flag in copy_fs(). All subsystems that need init's filesystem state for path resolution already use scoped_with_init_fs() from earlier commits in this series. This isolates kthreads from userspace filesystem state and makes it hard to perform filesystem operations from kthread context. Signed-off-by: Christian Brauner --- fs/namespace.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/fs/namespace.c b/fs/namespace.c index e23d2fa7e255..5d318e2e1e4a 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -6143,12 +6143,14 @@ static void __init init_mount_tree(void) struct path root; =20 /* - * We create two mounts: + * We create three mounts: * * (1) nullfs with mount id 1 * (2) mutable rootfs with mount id 2 + * (3) private nullfs for kthreads (SB_KERNMOUNT) * - * with (2) mounted on top of (1). + * with (2) mounted on top of (1). The init_task's root and pwd + * are pointed at (3) so all kthreads start isolated in nullfs. */ nullfs_mnt =3D vfs_kern_mount(&nullfs_fs_type, 0, "nullfs", NULL); if (IS_ERR(nullfs_mnt)) @@ -6188,12 +6190,14 @@ static void __init init_mount_tree(void) init_mnt_ns.nr_mounts++; } =20 + nullfs_mnt =3D kern_mount(&nullfs_fs_type); + if (IS_ERR(nullfs_mnt)) + panic("VFS: Failed to create private nullfs instance"); + root.mnt =3D nullfs_mnt; + root.dentry =3D nullfs_mnt->mnt_root; + init_task.nsproxy->mnt_ns =3D &init_mnt_ns; get_mnt_ns(&init_mnt_ns); - - /* The root and pwd always point to the mutable rootfs. */ - root.mnt =3D mnt; - root.dentry =3D mnt->mnt_root; set_fs_pwd(current->fs, &root); set_fs_root(current->fs, &root); =20 --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2CB543921D7; Wed, 11 Mar 2026 21:57:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266233; cv=none; b=S4x3hQCKSB9Dzj+fUVpFSW8MuFVIDz5M+jwergnJEXTAR3OCmDZ4+1ZKrmmKoSlKuH3yVeKy2CN3teCnYDNsC6nKxWyEVJmHtnwg+XXX2kbke4otMxdWfmJETKtChBePBj3mg0yfHJqHzrxpp+ibt1UpQzHCujUFE4WuSAqBVHc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266233; c=relaxed/simple; bh=kCGkIgebJiB/9uZM7t6zxx/Mm1pOt56U0XKiWKzIPXk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HECIrWkgDqwif4JUniWUWvJ5XR2wZ9hCHR/urkRd+iH2k5uVfGbW2WiF0CWj22RdmBaj2le95Y4toVF9EAljpS5p5ZTAX0Rtrnhkgw/sI7yWz9SjHc9+cDVpZrkVXpAMidNvu9Oc4i3JNEfZQO+ygQGnLSZyx0msX+wdY0HW070= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=IH+wBB8I; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="IH+wBB8I" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 14372C116C6; Wed, 11 Mar 2026 21:57:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266233; bh=kCGkIgebJiB/9uZM7t6zxx/Mm1pOt56U0XKiWKzIPXk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=IH+wBB8Ib4O6g8lOeQd6N3JNlsGtOFYS9NPqYT6rk+p/T93lDEM6l1rVhrCqYlqj3 9ypTreuUdcgddpT9IdmHCVtAD68BpKrnVC6kYE1VoE8+yTzjzudkpA6MBoJRYBMUAT xPhxfeeTsJjbqlx7CJnRvNWmxmcsJ0+li5gaFXjh/MCXCn7CucSqOTWqErOSMCCNZA ngtP/L7tBqqI52algdoSprCfDzT3/hqS3Fv3fWBtXAOyPBQeiTA0j+Mw33cZVCJPzB U1kIyCxo7e8GtHc8yUngC+Rnq0BVAbNPARotSg9j22AX7zakX4iPavKB/JgciDEsAc fa9OYJnOi3GFg== From: Christian Brauner Date: Wed, 11 Mar 2026 22:44:08 +0100 Subject: [PATCH RFC v3 25/26] fs: stop rewriting kthread fs structs Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-25-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=672; i=brauner@kernel.org; h=from:subject:message-id; bh=kCGkIgebJiB/9uZM7t6zxx/Mm1pOt56U0XKiWKzIPXk=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPKr5av5ezn/O5fnvt6wOE+fn9kn+q+YmMfXb5KZq +Vv3DK17ShlYRDjYpAVU2RxaDcJl1vOU7HZKFMDZg4rE8gQBi5OAZiIryojw5wmAQU+g9SHV2Qu OTK7OZyo2vW24sWTKIOF/DtW/VKR12RkOMz8ukyzKzP7qLiRaFXJxtZjYfXWi8Oy9hwKP7BaLK+ UDwA= X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 Now that we isolated kthreads filesystem state completely from userspace stop rewriting their state. Signed-off-by: Christian Brauner --- fs/fs_struct.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/fs_struct.c b/fs/fs_struct.c index f44e43ce6d93..2a98cfbedd32 100644 --- a/fs/fs_struct.c +++ b/fs/fs_struct.c @@ -61,6 +61,10 @@ void chroot_fs_refs(const struct path *old_root, const s= truct path *new_root) =20 read_lock(&tasklist_lock); for_each_process_thread(g, p) { + /* leave kthreads alone */ + if (p->flags & PF_KTHREAD) + continue; + task_lock(p); fs =3D p->real_fs; if (fs) { --=20 2.47.3 From nobody Tue Apr 7 19:54:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9B0B3392815; Wed, 11 Mar 2026 21:57:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266235; cv=none; b=TwFIk5w99iIJwQSdN+eoLp7doftqRvwfLG4zkYaOHXS9mQvIXAZOFsISYmlbv3YGsli4w3+cbM+L4rhfG2PPA10q/scgN3e0AcKUZ/9gf0DHA5JykA16JjbOqCORQuzQNXbZkTxj60JOW+eWaH05fdRU1tkBj1cXCT8tj/8ewSY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773266235; c=relaxed/simple; bh=zpm4hd+wIcjeaifr6xKhl0IkBvsmP9oA9cAqeLdt59o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=g3l7xsYI4AcfLxkf4Zgq3R+hhJW6cIGH8o62X5M+vJ8BCm6p7psatA8bhEx2s4Q/YX7Mw8KX7Wnkbsdjzfkg4lkr920p5WLSMYOPJlO9ulcN9VuY8xpdLIFGpmKOaaewLiXRKUKiboKa0A1B7DOj2Qshx9XaxLGcHFq4ne9Nr9o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QzbhvaS8; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QzbhvaS8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7A30CC4CEF7; Wed, 11 Mar 2026 21:57:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773266235; bh=zpm4hd+wIcjeaifr6xKhl0IkBvsmP9oA9cAqeLdt59o=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=QzbhvaS8OsYWWBU/u8HELtc1386UwtP4FdC0+JzbwciFLlXk/reih9u2mHYQG5E5b bwvYFe/0Ok5VNY7W4y8OyyQAqo0z2E5brbCyi3m9VNHIx0S5m6sqs3vEPW4wOKngwN qxCPfZ7Xw9f4Lp6K3XW4FcvTcPrAOHDl+cSHBFTssSKKT4nUZDvKEBmIswrjHo5gvI 0AhTa/Z9MJHyS9egNVRhqd2dJPVgMotgRY8JvDi2yinY94BL7kGjMs43Sp0KmFn62p OuyjbtC+JXkGGjwMr5QnRvrdgtsp6iSWlBOV0uZJibeMkShH/AWfYHyHWdEqiu6urh xy6M8xongzAvw== From: Christian Brauner Date: Wed, 11 Mar 2026 22:44:09 +0100 Subject: [PATCH RFC v3 26/26] fs: stop rewriting paths for PF_EXITING | PF_DUMPCORE Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260311-work-kthread-nullfs-v3-26-3dd2cbe92ad0@kernel.org> References: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> In-Reply-To: <20260311-work-kthread-nullfs-v3-0-3dd2cbe92ad0@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: Linus Torvalds , linux-kernel@vger.kernel.org, Alexander Viro , Jens Axboe , Jan Kara , Tejun Heo , Jann Horn , Christian Brauner X-Mailer: b4 0.15-dev-9fd7c X-Developer-Signature: v=1; a=openpgp-sha256; l=779; i=brauner@kernel.org; h=from:subject:message-id; bh=zpm4hd+wIcjeaifr6xKhl0IkBvsmP9oA9cAqeLdt59o=; b=owGbwMvMwCU28Zj0gdSKO4sYT6slMWRufPJr6a9V3trnzyf89/+uO6NNJVlF6pi14CeRyA4lk 4/KdvNlO0pZGMS4GGTFFFkc2k3C5ZbzVGw2ytSAmcPKBDKEgYtTACZytY/hn2LPv9ddxqwMq7nU G65fsL9zxMxPdutU/y/BVaoxe1b+2c3wT2OnyQIPbWkDhzMhGy7KN17PPbbOoKfZivfu0Rtisy+ vZwMA X-Developer-Key: i=brauner@kernel.org; a=openpgp; fpr=4880B8C9BD0E5106FC070F4F7B3C391EFEA93624 If the task is dead or dumping core stop messing with its fs struct. There's no point in doing that. Worst case it'll be stuck in a stale path until it calls exit_fs(). Signed-off-by: Christian Brauner --- fs/fs_struct.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fs/fs_struct.c b/fs/fs_struct.c index 2a98cfbedd32..34699f3b6f88 100644 --- a/fs/fs_struct.c +++ b/fs/fs_struct.c @@ -61,8 +61,7 @@ void chroot_fs_refs(const struct path *old_root, const st= ruct path *new_root) =20 read_lock(&tasklist_lock); for_each_process_thread(g, p) { - /* leave kthreads alone */ - if (p->flags & PF_KTHREAD) + if (p->flags & (PF_KTHREAD | PF_EXITING | PF_DUMPCORE)) continue; =20 task_lock(p); --=20 2.47.3