Squashfs: Compute expected length from inode size rather than block length
authorPhillip Lougher <phillip@squashfs.org.uk>
Thu, 2 Aug 2018 15:45:15 +0000 (16:45 +0100)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 2 Aug 2018 16:34:02 +0000 (09:34 -0700)
commita3f94cb99a854fa381fe7fadd97c4f61633717a5
tree9de67b4b1fa9b93ded20dc65bd4b7fd059ef6813
parent71755ee5350b63fb1f283de8561cdb61b47f4d1d
Squashfs: Compute expected length from inode size rather than block length

Previously in squashfs_readpage() when copying data into the page
cache, it used the length of the datablock read from the filesystem
(after decompression).  However, if the filesystem has been corrupted
this data block may be short, which will leave pages unfilled.

The fix for this is to compute the expected number of bytes to copy
from the inode size, and use this to detect if the block is short.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
Tested-by: Willy Tarreau <w@1wt.eu>
Cc: Анатолий Тросиненко <anatoly.trosinenko@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/squashfs/file.c
fs/squashfs/file_cache.c
fs/squashfs/file_direct.c
fs/squashfs/squashfs.h