From ed6841ed173c6e4abe28867c5485b5b77261559e Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Tue, 23 Apr 2019 13:52:26 +0200 Subject: [PATCH] fix: flush SquashFS meta block if *exactely* filled Otherwise we can get really funky corner cases where an inode offset is indicated as just 1 byte after the end of a block. The unsquashfs program doesn't complain but the kernel implementation really doesn't like that. Signed-off-by: David Oberhollenzer --- lib/sqfs/meta_writer.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/sqfs/meta_writer.c b/lib/sqfs/meta_writer.c index 49b3be5..78d3c5b 100644 --- a/lib/sqfs/meta_writer.c +++ b/lib/sqfs/meta_writer.c @@ -85,5 +85,8 @@ int meta_writer_append(meta_writer_t *m, const void *data, size_t size) data = (const char *)data + diff; } + if (m->offset == (sizeof(m->data) - 2)) + return meta_writer_flush(m); + return 0; }