Skip to content

Commit fdb24a8

Browse files
plougherakpm00
authored andcommitted
Squashfs: check metadata block offset is within range
Syzkaller reports a "general protection fault in squashfs_copy_data" This is ultimately caused by a corrupted index look-up table, which produces a negative metadata block offset. This is subsequently passed to squashfs_copy_data (via squashfs_read_metadata) where the negative offset causes an out of bounds access. The fix is to check that the offset is within range in squashfs_read_metadata. This will trap this and other cases. Link: https://lkml.kernel.org/r/[email protected] Fixes: f400e12 ("Squashfs: cache operations") Reported-by: [email protected] Closes: https://lore.kernel.org/all/[email protected]/ Signed-off-by: Phillip Lougher <[email protected]> Cc: Christian Brauner <[email protected]> Cc: <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
1 parent 319d0bf commit fdb24a8

1 file changed

Lines changed: 3 additions & 0 deletions

File tree

fs/squashfs/cache.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,9 @@ int squashfs_read_metadata(struct super_block *sb, void *buffer,
344344
if (unlikely(length < 0))
345345
return -EIO;
346346

347+
if (unlikely(*offset < 0 || *offset >= SQUASHFS_METADATA_SIZE))
348+
return -EIO;
349+
347350
while (length) {
348351
entry = squashfs_cache_get(sb, msblk->block_cache, *block, 0);
349352
if (entry->error) {

0 commit comments

Comments
 (0)