Hello Samuel, Thank you.
Yes, the cleanup is already correct in other places. (Interestingly Code in 'Step 4....' A little bit below is exactly the same pattern Yet there it does clean up correctly already). I don't see other issues . On Wed, Feb 11, 2026, 11:41 PM Samuel Thibault <[email protected]> wrote: > Applied, thanks! > > Have you checked that other calls of diskfs_lookup don't have the same > issue? > > Samuel > > Milos Nikic, le mer. 11 févr. 2026 23:31:26 -0800, a ecrit: > > We don't cleanup properly fnp in case lookup fails. > > This causes goto out to try to unlock fnp which is not > > locked at all. Crash! > > Setting it to NULL fixes this. > > --- > > libdiskfs/dir-renamed.c | 7 ++++++- > > 1 file changed, 6 insertions(+), 1 deletion(-) > > > > diff --git a/libdiskfs/dir-renamed.c b/libdiskfs/dir-renamed.c > > index a0c4bc6f..df59f283 100644 > > --- a/libdiskfs/dir-renamed.c > > +++ b/libdiskfs/dir-renamed.c > > @@ -128,7 +128,12 @@ diskfs_rename_dir (struct node *fdp, struct node > *fnp, const char *fromname, > > diskfs_nrele (tmpnp); > > diskfs_drop_dirstat (fdp, tmpds); > > if (err) > > - goto out; > > + { > > + assert_backtrace (!tmpnp); > > + /* diskfs_lookup has not locked fnp then, do not unlock it. */ > > + fnp = NULL; > > + goto out; > > + } > > > > if (tnp) > > { > > -- > > 2.52.0 > > >
