path_overmount(): avoid false negatives
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 1 Jun 2025 18:02:26 +0000 (14:02 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 7 Jun 2025 04:38:34 +0000 (00:38 -0400)
commit5f31c549382bcddbbd754c72c5433b19420d485d
tree7b6a4775bc1f26857cc6883c12f74c9c08966e07
parent1f282cdc1d219c4a557f7009e81bc792820d9d9a
path_overmount(): avoid false negatives

Holding namespace_sem is enough to make sure that result remains valid.
It is *not* enough to avoid false negatives from __lookup_mnt().  Mounts
can be unhashed outside of namespace_sem (stuck children getting detached
on final mntput() of lazy-umounted mount) and having an unrelated mount
removed from the hash chain while we traverse it may end up with false
negative from __lookup_mnt().  We need to sample and recheck the seqlock
component of mount_lock...

Bug predates the introduction of path_overmount() - it had come from
the code in finish_automount() that got abstracted into that helper.

Reviewed-by: Christian Brauner <brauner@kernel.org>
Fixes: 26df6034fdb2 ("fix automount/automount race properly")
Fixes: 6ac392815628 ("fs: allow to mount beneath top mount")
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/namespace.c