On Sun, Feb 04, 2024 at 02:17:28AM +0000, Al Viro wrote: > If lazy call of ->permission() returns a hard error, check that > try_to_unlazy() succeeds before returning it. That both makes > life easier for ->permission() instances and closes the race > in ENOTDIR handling - it is possible that positive d_can_lookup() > seen in link_path_walk() applies to the state *after* unlink() + > mkdir(), while nd->inode matches the state prior to that. > > Normally seeing e.g. EACCES from permission check in rcu pathwalk > means that with some timings non-rcu pathwalk would've run into > the same; however, running into a non-executable regular file > in the middle of a pathname would not get to permission check - > it would fail with ENOTDIR instead. > > Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx> > --- Reviewed-by: Christian Brauner <brauner@xxxxxxxxxx>