public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [PATCH] squashfs: Fix sqfsls errors when root is a ldir
@ 2021-12-15  1:53 Campbell Suter
  2021-12-15 11:20 ` Miquel Raynal
  2022-01-28 23:36 ` Tom Rini
  0 siblings, 2 replies; 3+ messages in thread
From: Campbell Suter @ 2021-12-15  1:53 UTC (permalink / raw)
  To: u-boot; +Cc: Joao Marcos Costa, Miquel Raynal, Thomas Petazzoni

Previously, if root had more than 256 files or otherwise needed to be an
ldir, sqfsls would emit the error 'Inode not found.' which was caused by
code in sqfs_search_dir assuming it was a regular directory inode.

Signed-off-by: Campbell Suter <campbell@snapit.group>
---

  fs/squashfs/sqfs.c | 16 +++++++++++++---
  1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/fs/squashfs/sqfs.c b/fs/squashfs/sqfs.c
index e2d91c654c..4d7bf76fa3 100644
--- a/fs/squashfs/sqfs.c
+++ b/fs/squashfs/sqfs.c
@@ -482,13 +482,20 @@ static int sqfs_search_dir(struct squashfs_dir_stream *dirs, char **token_list,
  
  	/* Initialize squashfs_dir_stream members */
  	dirs->table += SQFS_DIR_HEADER_SIZE;
-	dirs->size = get_unaligned_le16(&dir->file_size) - SQFS_DIR_HEADER_SIZE;
+	if (le16_to_cpu(dirs->i_dir.inode_type) == SQFS_DIR_TYPE)
+		dirs->size = get_unaligned_le16(&dir->file_size);
+	else
+		dirs->size = get_unaligned_le32(&ldir->file_size);
+	dirs->size -= SQFS_DIR_HEADER_SIZE;
  	dirs->entry_count = dirs->dir_header->count + 1;
  
  	/* No path given -> root directory */
  	if (!strcmp(token_list[0], "/")) {
  		dirs->table = &dirs->dir_table[offset];
-		memcpy(&dirs->i_dir, dir, sizeof(*dir));
+		if (le16_to_cpu(dirs->i_dir.inode_type) == SQFS_DIR_TYPE)
+			memcpy(&dirs->i_dir, dir, sizeof(*dir));
+		else
+			memcpy(&dirs->i_ldir, ldir, sizeof(*ldir));
  		return 0;
  	}
  
@@ -608,7 +615,10 @@ static int sqfs_search_dir(struct squashfs_dir_stream *dirs, char **token_list,
  		}
  
  		dirs->table += SQFS_DIR_HEADER_SIZE;
-		dirs->size = get_unaligned_le16(&dir->file_size);
+		if (le16_to_cpu(dirs->i_dir.inode_type) == SQFS_DIR_TYPE)
+			dirs->size = get_unaligned_le16(&dir->file_size);
+		else
+			dirs->size = get_unaligned_le32(&ldir->file_size);
  		dirs->entry_count = dirs->dir_header->count + 1;
  		dirs->size -= SQFS_DIR_HEADER_SIZE;
  		free(dirs->entry);
-- 
2.33.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-01-28 23:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-12-15  1:53 [PATCH] squashfs: Fix sqfsls errors when root is a ldir Campbell Suter
2021-12-15 11:20 ` Miquel Raynal
2022-01-28 23:36 ` Tom Rini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox