47467e0481
commit 118a8cf504d7dfa519562d000f423ee3ca75d2c4 upstream. EROFS can select compression algorithms on a per-file basis, and each per-file compression algorithm needs to be marked in the on-disk superblock for initialization. However, syzkaller can generate inconsistent crafted images that use an unsupported algorithmtype for specific inodes, e.g. use MicroLZMA algorithmtype even it's not set in `sbi->available_compr_algs`. This can lead to an unexpected "BUG: kernel NULL pointer dereference" if the corresponding decompressor isn't built-in. Fix this by checking against `sbi->available_compr_algs` for each m_algorithmformat request. Incorrect !erofs_sb_has_compr_cfgs preset bitmap is now fixed together since it was harmless previously. Reported-by: <bugreport@ubisectech.com> Fixes: |
||
---|---|---|
.. | ||
Kconfig | ||
Makefile | ||
compress.h | ||
data.c | ||
decompressor.c | ||
decompressor_lzma.c | ||
dir.c | ||
erofs_fs.h | ||
fscache.c | ||
inode.c | ||
internal.h | ||
namei.c | ||
pcpubuf.c | ||
super.c | ||
sysfs.c | ||
utils.c | ||
xattr.c | ||
xattr.h | ||
zdata.c | ||
zmap.c |