From: Al Viro <viro@zeniv.linux.org.uk>
To: Christian Brauner <brauner@kernel.org>
Cc: linux-fsdevel@vger.kernel.org
Subject: Re: [BUG][RFC] broken use of __lookup_mnt() in path_overmounted()
Date: Sun, 1 Jun 2025 18:40:24 +0100 [thread overview]
Message-ID: <20250601174024.GF3574388@ZenIV> (raw)
In-Reply-To: <20250531205700.GD3574388@ZenIV>
On Sat, May 31, 2025 at 09:57:00PM +0100, Al Viro wrote:
> One possibility is to wrap the use of __lookup_mnt() into a sample-and-recheck
> loop there; for the call of path_overmounted() in finish_automount() it'll
> give the right behaviour.
OK, that's definitely the right thing to do, whatever we end up doing
with checks in do_move_mount().
So the rules become:
Mount hash lookup (__lookup_mnt()) requires mount_lock - either
holding its spinlock component, or seqretry on its seqcount component.
If we are not holding the spinlock side of mount_lock, we must
be under rcu_read_lock() at least for the duration of lookup.
Result is safe to dereference as long as
1) mount_lock is still held or
2) rcu_read_lock() is still held or
3) namespace_sem had been held since before the lookup *AND*
parent's refcount remains positive. This covers only the continued safety
of access to the result of lookup; we still must've satisfied the rules
above for the lookup itself.
Acquiring a reference to result in cases (1) and (3) is safe; in case (2)
it must be done with __legitimize_mnt(result, seq), with seq being a value of
mount_lock seqcount component sampled *BEFORE* the lookup.
That's pretty close to the rules for the rest of mount tree walking...
Complications wrt namespace_sem come from dissolving of lazy-umounted
trees; stuck children get detached when parent's refcount drops to zero.
That happens outside of namespace_sem and I don't see any sane way to
change that.
next prev parent reply other threads:[~2025-06-01 17:40 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-31 20:57 [BUG][RFC] broken use of __lookup_mnt() in path_overmounted() Al Viro
2025-06-01 17:40 ` Al Viro [this message]
2025-06-02 9:17 ` Christian Brauner
2025-06-19 2:35 ` Al Viro
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250601174024.GF3574388@ZenIV \
--to=viro@zeniv.linux.org.uk \
--cc=brauner@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.