[PATCH v2 3/3] fs/squashfs: fix dirs->entry leak on inode lookup failure
Allan ELKAIM
allan.elkaim at gmail.com
Thu Jun 11 11:43:47 CEST 2026
In sqfs_search_dir(), when sqfs_find_inode() fails to locate the inode
of a directory entry just returned by sqfs_readdir_nest(), the function
returns directly while dirs->entry still holds the entry allocation,
leaking it. The bare return also bypasses the regular error path.
Free the entry and leave through the out label instead, consistent
with the other error paths in this function.
Signed-off-by: Allan ELKAIM <allan.elkaim at gmail.com>
---
Changes in v2:
- New patch, fixing a pre-existing leak of the same kind as the ones
addressed in patch 2 (suggested by Richard Genoud's review)
fs/squashfs/sqfs.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/fs/squashfs/sqfs.c b/fs/squashfs/sqfs.c
index af32d008..df988774 100644
--- a/fs/squashfs/sqfs.c
+++ b/fs/squashfs/sqfs.c
@@ -547,8 +547,12 @@ static int sqfs_search_dir(struct squashfs_dir_stream *dirs, char **token_list,
/* Get reference to inode in the inode table */
table = sqfs_find_inode(dirs->inode_table, new_inode_number,
sblk->inodes, sblk->block_size);
- if (!table)
- return -EINVAL;
+ if (!table) {
+ free(dirs->entry);
+ dirs->entry = NULL;
+ ret = -EINVAL;
+ goto out;
+ }
dir = (struct squashfs_dir_inode *)table;
/* Check for symbolic link and inode type sanity */
--
2.53.0
More information about the U-Boot
mailing list