From: Darrick J. Wong Date: Mon, 29 Jul 2024 23:22:33 +0000 (-0700) Subject: xfs_repair: don't leak the rootdir inode when orphanage already exists X-Git-Tag: v6.10.0~25^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b67a805cf877525ce74031832a07f6359c04cc9b;p=thirdparty%2Fxfsprogs-dev.git xfs_repair: don't leak the rootdir inode when orphanage already exists If repair calls mk_orphanage and the /lost+found directory already exists, we need to irele the root directory before exiting the function. Fixes: 6c39a3cbda32 ("Don't trash lost+found in phase 4 Merge of master-melb:xfs-cmds:29144a by kenmcd.") Signed-off-by: Darrick J. Wong Reviewed-by: Christoph Hellwig --- diff --git a/repair/phase6.c b/repair/phase6.c index ae8935a2..e6103f76 100644 --- a/repair/phase6.c +++ b/repair/phase6.c @@ -919,8 +919,10 @@ mk_orphanage(xfs_mount_t *mp) xname.len = strlen(ORPHANAGE); xname.type = XFS_DIR3_FT_DIR; - if (libxfs_dir_lookup(NULL, pip, &xname, &ino, NULL) == 0) - return ino; + /* If the lookup of /lost+found succeeds, return the inumber. */ + error = -libxfs_dir_lookup(NULL, pip, &xname, &ino, NULL); + if (error == 0) + goto out_pip; /* * could not be found, create it @@ -1012,6 +1014,7 @@ mk_orphanage(xfs_mount_t *mp) ORPHANAGE, error); } libxfs_irele(ip); +out_pip: libxfs_irele(pip); return(ino);