KASAN: use-after-free Read in erofs_try_to_free_all_cached_pages

Status: upstream: reported on 2023/01/31 21:07
First crash: 241d, last: 241d

Sample crash report:
BUG: KASAN: use-after-free in erofs_try_to_free_all_cached_pages+0x4b4/0x4e0 drivers/staging/erofs/unzip_vle.c:151
Read of size 8 at addr ffff88803457c948 by task syz-executor.1/8160

CPU: 1 PID: 8160 Comm: syz-executor.1 Not tainted 4.19.211-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/12/2023
Call Trace:
 __dump_stack lib/dump_stack.c:77 [inline]
 dump_stack+0x1fc/0x2ef lib/dump_stack.c:118
 print_address_description.cold+0x54/0x219 mm/kasan/report.c:256
 kasan_report_error.cold+0x8a/0x1b9 mm/kasan/report.c:354
 kasan_report mm/kasan/report.c:412 [inline]
 __asan_report_load8_noabort+0x88/0x90 mm/kasan/report.c:433
 erofs_try_to_free_all_cached_pages+0x4b4/0x4e0 drivers/staging/erofs/unzip_vle.c:151
 erofs_try_to_release_workgroup+0x68/0x210 drivers/staging/erofs/utils.c:158
 erofs_shrink_workstation+0x151/0x240 drivers/staging/erofs/utils.c:229
 erofs_workstation_cleanup_all drivers/staging/erofs/internal.h:280 [inline]
 erofs_put_super.cold+0x152/0x1bb drivers/staging/erofs/super.c:477
 generic_shutdown_super+0x144/0x370 fs/super.c:456
 kill_block_super+0x97/0xf0 fs/super.c:1185
 deactivate_locked_super+0x94/0x160 fs/super.c:329
 deactivate_super+0x174/0x1a0 fs/super.c:360
 cleanup_mnt+0x1a8/0x290 fs/namespace.c:1098
 task_work_run+0x148/0x1c0 kernel/task_work.c:113
 tracehook_notify_resume include/linux/tracehook.h:193 [inline]
 exit_to_usermode_loop+0x251/0x2a0 arch/x86/entry/common.c:167
 prepare_exit_to_usermode arch/x86/entry/common.c:198 [inline]
 syscall_return_slowpath arch/x86/entry/common.c:271 [inline]
 do_syscall_64+0x538/0x620 arch/x86/entry/common.c:296
RIP: 0033:0x7fe7257de537
Code: ff ff ff f7 d8 64 89 01 48 83 c8 ff c3 66 0f 1f 44 00 00 31 f6 e9 09 00 00 00 66 0f 1f 84 00 00 00 00 00 b8 a6 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffec516bb18 EFLAGS: 00000246 ORIG_RAX: 00000000000000a6
RAX: 0000000000000000 RBX: 0000000000000000 RCX: 00007fe7257de537
RDX: 00007ffec516bbec RSI: 000000000000000a RDI: 00007ffec516bbe0
RBP: 00007ffec516bbe0 R08: 00000000ffffffff R09: 00007ffec516b9b0
R10: 0000555556585903 R11: 0000000000000246 R12: 00007fe725837b24
R13: 00007ffec516cca0 R14: 0000555556585810 R15: 00007ffec516cce0

Allocated by task 21037:
 kmem_cache_alloc+0x122/0x370 mm/slab.c:3559
 alloc_inode+0x18/0x50 drivers/staging/erofs/super.c:49
 alloc_inode+0x5d/0x180 fs/inode.c:211
 new_inode_pseudo fs/inode.c:911 [inline]
 new_inode+0x1d/0xf0 fs/inode.c:940
 erofs_init_managed_cache drivers/staging/erofs/super.c:317 [inline]
 erofs_read_super drivers/staging/erofs/super.c:386 [inline]
 erofs_fill_super+0xde9/0x12cc drivers/staging/erofs/super.c:499
 mount_bdev+0x2fc/0x3b0 fs/super.c:1158
 erofs_mount+0x8c/0xc0 drivers/staging/erofs/super.c:512
 mount_fs+0xa3/0x310 fs/super.c:1261
 vfs_kern_mount.part.0+0x68/0x470 fs/namespace.c:961
 vfs_kern_mount fs/namespace.c:951 [inline]
 do_new_mount fs/namespace.c:2492 [inline]
 do_mount+0x115c/0x2f50 fs/namespace.c:2822
 ksys_mount+0xcf/0x130 fs/namespace.c:3038
 __do_sys_mount fs/namespace.c:3052 [inline]
 __se_sys_mount fs/namespace.c:3049 [inline]
 __x64_sys_mount+0xba/0x150 fs/namespace.c:3049
 do_syscall_64+0xf9/0x620 arch/x86/entry/common.c:293

Freed by task 9:
 __cache_free mm/slab.c:3503 [inline]
 kmem_cache_free+0x7f/0x260 mm/slab.c:3765
 __rcu_reclaim kernel/rcu/rcu.h:236 [inline]
 rcu_do_batch kernel/rcu/tree.c:2584 [inline]
 invoke_rcu_callbacks kernel/rcu/tree.c:2897 [inline]
 __rcu_process_callbacks kernel/rcu/tree.c:2864 [inline]
 rcu_process_callbacks+0x8ff/0x18b0 kernel/rcu/tree.c:2881
 __do_softirq+0x265/0x980 kernel/softirq.c:292

The buggy address belongs to the object at ffff88803457c8f0
 which belongs to the cache erofs_inode of size 984
The buggy address is located 88 bytes inside of
 984-byte region [ffff88803457c8f0, ffff88803457ccc8)
The buggy address belongs to the page:
page:ffffea0000d15f00 count:1 mapcount:0 mapping:ffff888235f6e340 index:0xffff88803457cffd
flags: 0xfff00000000100(slab)
raw: 00fff00000000100 ffff8880a571c048 ffff8880a571c048 ffff888235f6e340
raw: ffff88803457cffd ffff88803457c040 0000000100000003 0000000000000000
page dumped because: kasan: bad access detected

Memory state around the buggy address:
 ffff88803457c800: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fc fc
 ffff88803457c880: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fb fb
>ffff88803457c900: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
 ffff88803457c980: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
 ffff88803457ca00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb

Crashes (1):
Time Kernel Commit Syzkaller Config Log Report Syz repro C repro VM info Assets (help?) Manager Title
2023/01/31 21:06 linux-4.19.y 3f8a27f9e27b b68fb8d6 .config console log report info [disk image] [vmlinux] ci2-linux-4-19 KASAN: use-after-free Read in erofs_try_to_free_all_cached_pages
* Struck through repros no longer work on HEAD.