Messages in this thread |  | | From | Jann Horn <> | | Date | Mon, 9 Mar 2026 17:50:36 +0100 | | Subject | Re: [PATCH RFC v2 00/23] fs,kthread: start all kthreads in nullfs |
| |
On Fri, Mar 6, 2026 at 12:30 AM Christian Brauner <brauner@kernel.org> wrote: > The places that need to perform lookup in init's filesystem state may > use scoped_with_init_fs() which will temporarily override the caller's > fs_struct with init's fs_struct.
One small concern I have about the overall approach is that the use of scoped_with_init_fs() in non-kernel tasks reminds me a _little_ bit of the set_fs(KERNEL_DS) mechanism that was removed a few years ago: There is state in the task that controls whether some argument is interpreted as a user-supplied, untrusted value or a kernel-supplied value that is interpreted in some more privileged scope. I think there were occasionally security issues where userspace-supplied pointers were accidentally accessed under KERNEL_DS, allowing userspace to cause accesses to arbitrary kernel addresses - in particular, performance interrupts could occur in KERNEL_DS sections and attempt to access userspace stack memory, see <https://project-zero.issues.chromium.org/42452355>.
I think switching task_struct::fs is much less problematic - path walks shouldn't happen in IRQ context or such, scoped_with_init_fs() will likely only be used when accessing paths that unprivileged userspace has no influence over, and VFS operations normally don't operate on multiple logically unrelated file paths; but it means we'll have to keep in mind that filesystem handlers for some operations like lookup/open can run with weird task_struct::fs.
To be clear, I think what you're doing is fine; it's just something to keep in mind.
|  |