On Wed, 2024-12-11 at 13:11 +0100, Miklos Szeredi wrote:
Commit 1fa08aece425 ("nsfs: convert to path_from_stashed() helper") reused nsfs dentry's d_fsdata, which no longer contains a pointer to proc_ns_operations.
Fix the remaining use in is_mnt_ns_file().
Fixes: 1fa08aece425 ("nsfs: convert to path_from_stashed() helper") Cc: stable@vger.kernel.org # v6.9 Signed-off-by: Miklos Szeredi mszeredi@redhat.com
Came across this while getting the mnt_ns in fsnotify_mark(), tested the fix in that context. I don't have a test for mainline, though.
fs/namespace.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/fs/namespace.c b/fs/namespace.c index 23e81c2a1e3f..6eec7794f707 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -2055,9 +2055,15 @@ SYSCALL_DEFINE1(oldumount, char __user *, name) static bool is_mnt_ns_file(struct dentry *dentry) {
- struct ns_common *ns;
- /* Is this a proxy for a mount namespace? */
- return dentry->d_op == &ns_dentry_operations &&
dentry->d_fsdata == &mntns_operations;
- if (dentry->d_op != &ns_dentry_operations)
return false;
- ns = d_inode(dentry)->i_private;
- return ns->ops == &mntns_operations;
} struct ns_common *from_mnt_ns(struct mnt_namespace *mnt)
Took me a min to figure out how i_private gets set, but this looks correct.
Reviewed-by: Jeff Layton jlayton@kernel.org