+30
−11
Loading
loop_set_status() is allowed to change the loop device while there are other openers of the device, even exclusive ones. In this case, it causes a KASAN: slab-out-of-bounds Read in ext4_search_dir(), since when looking for an entry in an inlined directory, e_value_offs is changed underneath the filesystem by loop_set_status(). Fix the problem by forbidding loop_set_status() from modifying the loop device while there are exclusive openers of the device. This is similar to the fix in loop_configure() by commit 33ec3e53 ("loop: Don't change loop device under exclusive opener") alongside commit ecbe6bc0 ("block: use bd_prepare_to_claim directly in the loop driver"). Reported-by:<syzbot+3ee481e21fd75e14c397@syzkaller.appspotmail.com> Closes: https://syzkaller.appspot.com/bug?extid=3ee481e21fd75e14c397 Tested-by:
<syzbot+3ee481e21fd75e14c397@syzkaller.appspotmail.com> Tested-by:
Yongpeng Yang <yangyongpeng@xiaomi.com> Signed-off-by:
Raphael Pinsonneault-Thibeault <rpthibeault@gmail.com> Reviewed-by:
Jan Kara <jack@suse.cz> Signed-off-by:
Jens Axboe <axboe@kernel.dk>