squashfs: be more careful about metadata corruption
Anatoly Trosinenko reports that a corrupted squashfs image can cause a kernel oops. It turns out that squashfs can end up being confused about negative fragment lengths. The regular squashfs_read_data() does check for negative lengths, but squashfs_read_metadata() did not, and the fragment size code just blindly trusted the on-disk value. Fix both the fragment parsing and the metadata reading code. Reported-by: Anatoly Trosinenko <anatoly.trosinenko@gmail.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Phillip Lougher <phillip@squashfs.org.uk> Cc: stable@kernel.org Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
@@ -350,6 +350,9 @@ int squashfs_read_metadata(struct super_block *sb, void *buffer,
|
||||
|
||||
TRACE("Entered squashfs_read_metadata [%llx:%x]\n", *block, *offset);
|
||||
|
||||
if (unlikely(length < 0))
|
||||
return -EIO;
|
||||
|
||||
while (length) {
|
||||
entry = squashfs_cache_get(sb, msblk->block_cache, *block, 0);
|
||||
if (entry->error) {
|
||||
|
Reference in New Issue
Block a user