On Mon, Jul 4, 2022 at 1:24 PM Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > The mount point check should go around the "check dentry mount point", > but it's a separate issue from the whole "we are now jumping to a > different dentry, we should check that the previous dentry hasn't > changed". Maybe it doesn't really matter, because we never actually end up dereferencing the previous dentry (exactly since we're following the mount point on it). It feels like the sequence point checks are basically tied to the "we're looking at the inode that the dentry pointed to", and because the mount-point traversal doesn't need to look at the inode, the sequence point check also isn't done. But it feels wrong to traverse a dentry under RCU - even if we don't then look at the inode itself - without having verified that the dentry is still valid. Yes, the d_seq lock protects against the inode going away (aka "unlink()") and that cannot happen when it's a mount-point. But it _also_ ends up changing for __d_move() when the name of the dentry changes. And I think that name change is relevant even to "look up a mount point", exactly because we used that name to look up the dentry in the first place, so if the name is changing, we shouldn't traverse that mount point. But I may have just confused myself terminally here. Linus