On 4/6/21 8:23 AM, Al Viro wrote: > On Tue, Apr 06, 2021 at 02:15:01PM +0000, Al Viro wrote: > >> I'm referring to the fact that your diff is with an already modified path_lookupat() >> _and_ those modifications have managed to introduce a bug your patch reverts. >> No terminate_walk() paired with that path_init() failure, i.e. path_init() is >> responsible for cleanups on its (many) failure exits... > > I can't tell without seeing the variant your diff is against, but at a guess > it had a non-trivial amount of trouble with missed rcu_read_unlock() in > cases when path_init() fails after having done rcu_read_lock(). For trivial > testcase, consider passing -1 for dfd, so that it would fail with -EBADF. > Or passing 0 for dfd and "blah" for name (assuming your stdin is not a directory). > Sure, you could handle those in path_init() (or delay grabbing rcu_read_lock() > in there, spreading it in a bunch of branches), but duplicated cleanup logics > for a bunch of failure exits is asking for trouble. Thanks for taking care of this Al, fwiw I'm (mostly) out on vacation. -- Jens Axboe