vfs: Is mounted should be testing mnt_ns for NULL or error.
A bug was introduced with the is_mounted helper function in commit f7a99c5 Author: Al Viro <email@example.com> Date: Sat Jun 9 00:59:08 2012 -0400 get rid of ->mnt_longterm it's enough to set ->mnt_ns of internal vfsmounts to something distinct from all struct mnt_namespace out there; then we can just use the check for ->mnt_ns != NULL in the fast path of mntput_no_expire() Signed-off-by: Al Viro <firstname.lastname@example.org> The intent was to test if the real_mount(vfsmount)->mnt_ns was NULL_OR_ERR but the code is actually testing real_mount(vfsmount) and always returning true. The result is d_absolute_path returning paths it should be hiding. Cc: email@example.com Signed-off-by: "Eric W. Biederman" <firstname.lastname@example.org> Signed-off-by: Al Viro <email@example.com>
|@@ -74,7 +74,7 @@ static inline int mnt_has_parent(struct mount *mnt)|
|static inline int is_mounted(struct vfsmount *mnt)|
|/* neither detached nor internal? */|
|- return !IS_ERR_OR_NULL(real_mount(mnt));|
|+ return !IS_ERR_OR_NULL(real_mount(mnt)->mnt_ns);|
|extern struct mount *__lookup_mnt(struct vfsmount *, struct dentry *);|