linux/fs/erofs
Gao Xiang 8675447a87 erofs: avoid infinite loops due to corrupted subpage compact indexes
[ Upstream commit e13d315ae0 ]

Robert reported an infinite loop observed by two crafted images.

The root cause is that `clusterofs` can be larger than `lclustersize`
for !NONHEAD `lclusters` in corrupted subpage compact indexes, e.g.:

  blocksize = lclustersize = 512   lcn = 6   clusterofs = 515

Move the corresponding check for full compress indexes to
`z_erofs_load_lcluster_from_disk()` to also cover subpage compact
compress indexes.

It also fixes the position of `m->type >= Z_EROFS_LCLUSTER_TYPE_MAX`
check, since it should be placed right after
`z_erofs_load_{compact,full}_lcluster()`.

Fixes: 8d2517aaee ("erofs: fix up compacted indexes for block size < 4096")
Fixes: 1a5223c182 ("erofs: do sanity check on m->type in z_erofs_load_compact_lcluster()")
Reported-by: Robert Morris <rtm@csail.mit.edu>
Closes: https://lore.kernel.org/r/35167.1760645886@localhost
Reviewed-by: Hongbo Li <lihongbo22@huawei.com>
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2025-10-29 14:10:19 +01:00
..
compress.h erofs: support DEFLATE decompression by using Intel QAT 2025-05-25 15:27:40 +08:00
data.c vfs-6.17-rc1.mmap_prepare 2025-07-28 13:43:25 -07:00
decompressor.c erofs: implement metadata compression 2025-07-24 19:43:31 +08:00
decompressor_crypto.c erofs: support DEFLATE decompression by using Intel QAT 2025-05-25 15:27:40 +08:00
decompressor_deflate.c erofs: support DEFLATE decompression by using Intel QAT 2025-05-25 15:27:40 +08:00
decompressor_lzma.c erofs: move {in,out}pages into struct z_erofs_decompress_req 2025-03-17 01:22:50 +08:00
decompressor_zstd.c erofs: move {in,out}pages into struct z_erofs_decompress_req 2025-03-17 01:22:50 +08:00
dir.c erofs: support to readahead dirent blocks in erofs_readdir() 2025-07-24 19:44:08 +08:00
erofs_fs.h erofs: fix long xattr name prefix placement 2025-09-12 03:37:07 +08:00
fileio.c erofs: implement metadata compression 2025-07-24 19:43:31 +08:00
fscache.c erofs: implement metadata compression 2025-07-24 19:43:31 +08:00
inode.c erofs: implement metadata compression 2025-07-24 19:43:31 +08:00
internal.h erofs: fix long xattr name prefix placement 2025-09-12 03:37:07 +08:00
Kconfig erofs: Do not select tristate symbols from bool symbols 2025-08-11 06:02:20 +08:00
Makefile erofs: support DEFLATE decompression by using Intel QAT 2025-05-25 15:27:40 +08:00
namei.c erofs: get rid of erofs_kmap_type 2025-03-17 01:21:24 +08:00
super.c erofs: fix runtime warning on truncate_folio_batch_exceptionals() 2025-09-10 14:11:06 +08:00
sysfs.c erofs: support to readahead dirent blocks in erofs_readdir() 2025-07-24 19:44:08 +08:00
xattr.c erofs: fix long xattr name prefix placement 2025-09-12 03:37:07 +08:00
xattr.h erofs: remove ENOATTR definition 2025-07-24 19:42:07 +08:00
zdata.c erofs: avoid reading more for fragment maps 2025-10-15 12:03:16 +02:00
zmap.c erofs: avoid infinite loops due to corrupted subpage compact indexes 2025-10-29 14:10:19 +01:00
zutil.c The various patchsets are summarized below. Plus of course many 2025-01-26 18:36:23 -08:00