From 75e169d06a8b802529999efd88bb3ce1caf823c6 Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Thu, 18 Apr 2019 21:58:42 +0200 Subject: [PATCH] fixup: squashfs limits number of dirents to 256 The kernel implementation BAILS if a directory header is followed by more than a hard-coded maximum of entries (currently 256). Signed-off-by: David Oberhollenzer --- sqfs/meta.c | 3 +++ sqfs/squashfs.h | 1 + 2 files changed, 4 insertions(+) diff --git a/sqfs/meta.c b/sqfs/meta.c index 6d8402e..8402597 100644 --- a/sqfs/meta.c +++ b/sqfs/meta.c @@ -41,6 +41,9 @@ static int write_dir(meta_writer_t *dm, node_t *node) count += 1; } + if (count > SQFS_MAX_DIR_ENT) + count = SQFS_MAX_DIR_ENT; + hdr.count = htole32(count - 1); hdr.start_block = htole32(c->inode_ref >> 16); hdr.inode_number = htole32(c->inode_num); diff --git a/sqfs/squashfs.h b/sqfs/squashfs.h index e0906e4..0869bee 100644 --- a/sqfs/squashfs.h +++ b/sqfs/squashfs.h @@ -10,6 +10,7 @@ #define SQFS_META_BLOCK_SIZE 8192 #define SQFS_DEFAULT_BLOCK_SIZE 131072 #define SQFS_DEVBLK_SIZE 4096 +#define SQFS_MAX_DIR_ENT 256 typedef struct { uint32_t magic;