syzbot


KASAN: use-after-free Read in reiserfs_get_unused_objectid

Status: fixed on 2024/01/31 13:17
Subsystems: reiserfs
[Documentation on labels]
Reported-by: syzbot+04e8b36eaa27ecf7f840@syzkaller.appspotmail.com
Fix commit: 6f861765464f fs: Block writes to mounted block devices
First crash: 398d, last: 121d
Cause bisection: the issue happens on the oldest tested release (bisect log)
Crash: general protection fault in reiserfs_security_init (log)
Repro: C syz .config
  
Fix bisection: fixed by (bisect log) :
commit 6f861765464f43a71462d52026fbddfc858239a5
Author: Jan Kara <jack@suse.cz>
Date: Wed Nov 1 17:43:10 2023 +0000

  fs: Block writes to mounted block devices

  
Discussions (1)
Title Replies (including bot) Last reply
[syzbot] [reiserfs?] KASAN: use-after-free Read in reiserfs_get_unused_objectid 1 (3) 2024/01/29 09:48
Similar bugs (2)
Kernel Title Repro Cause bisect Fix bisect Count Last Reported Patched Status
linux-5.15 KASAN: use-after-free Read in reiserfs_get_unused_objectid origin:upstream C 1 11d 347d 0/3 upstream: reported C repro on 2023/05/15 03:47
linux-6.1 KASAN: use-after-free Read in reiserfs_get_unused_objectid origin:upstream C error 2 339d 398d 0/3 upstream: reported C repro on 2023/03/25 04:27
Last patch testing requests (4)
Created Duration User Patch Repo Result
2024/01/10 15:04 36m retest repro upstream OK log
2023/11/26 18:41 14m retest repro upstream report log
2023/10/01 19:13 10m retest repro upstream report log
2023/09/17 17:47 20m retest repro upstream report log
Fix bisection attempts (7)
Created Duration User Patch Repo Result
2024/01/28 04:02 4h29m bisect fix upstream job log (1)
2023/12/26 22:15 1h32m bisect fix upstream job log (0) log
2023/11/01 11:03 1h15m bisect fix upstream job log (0) log
2023/07/18 13:52 6h22m bisect fix upstream job log (0) log
2023/06/29 13:12 1h41m bisect fix upstream job log (0)
marked invalid by spm@google.com
2023/05/30 02:05 41m bisect fix upstream job log (0) log
2023/04/24 12:01 53m bisect fix upstream job log (0) log
Cause bisection attempts (3)
Created Duration User Patch Repo Result
2023/09/01 22:27 2h42m bisect upstream job log (0) log
2023/07/16 22:08 5h27m bisect upstream error job log (0)
marked invalid by nogikh@google.com
2023/03/25 02:24 8h10m bisect upstream error job log (0)
marked invalid by spm@google.com

Sample crash report:
REISERFS warning:  read_super_block: reiserfs filesystem is deprecated and scheduled to be removed from the kernel in 2025
REISERFS (device loop0): found reiserfs format "3.5" with non-standard journal
REISERFS (device loop0): using ordered data mode
reiserfs: using flush barriers
REISERFS (device loop0): journal params: device loop0, size 512, journal first block 18, max trans len 256, max batch 225, max commit age 30, max trans age 30
REISERFS (device loop0): checking transaction log (loop0)
REISERFS (device loop0): Using r5 hash to sort names
==================================================================
BUG: KASAN: use-after-free in reiserfs_get_unused_objectid+0x231/0x490 fs/reiserfs/objectid.c:87
Read of size 250888 at addr ffff888075ee9058 by task syz-executor929/5025

CPU: 1 PID: 5025 Comm: syz-executor929 Not tainted 6.5.0-syzkaller-11075-g92901222f83d #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/26/2023
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:88 [inline]
 dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106
 print_address_description mm/kasan/report.c:364 [inline]
 print_report+0x163/0x540 mm/kasan/report.c:475
 kasan_report+0x175/0x1b0 mm/kasan/report.c:588
 kasan_check_range+0x27e/0x290 mm/kasan/generic.c:187
 __asan_memmove+0x29/0x70 mm/kasan/shadow.c:94
 reiserfs_get_unused_objectid+0x231/0x490 fs/reiserfs/objectid.c:87
 reiserfs_new_inode+0x2bc/0x1d10 fs/reiserfs/inode.c:1942
 reiserfs_mkdir+0x5b0/0x8f0 fs/reiserfs/namei.c:843
 xattr_mkdir fs/reiserfs/xattr.c:77 [inline]
 create_privroot fs/reiserfs/xattr.c:891 [inline]
 reiserfs_xattr_init+0x323/0x670 fs/reiserfs/xattr.c:1007
 reiserfs_fill_super+0x2207/0x2620 fs/reiserfs/super.c:2175
 mount_bdev+0x237/0x300 fs/super.c:1629
 legacy_get_tree+0xef/0x190 fs/fs_context.c:638
 vfs_get_tree+0x8c/0x280 fs/super.c:1750
 do_new_mount+0x28f/0xae0 fs/namespace.c:3335
 do_mount fs/namespace.c:3675 [inline]
 __do_sys_mount fs/namespace.c:3884 [inline]
 __se_sys_mount+0x2d9/0x3c0 fs/namespace.c:3861
 do_syscall_x64 arch/x86/entry/common.c:50 [inline]
 do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
 entry_SYSCALL_64_after_hwframe+0x63/0xcd
RIP: 0033:0x7f0bcd6080ca
Code: d8 64 89 02 48 c7 c0 ff ff ff ff eb a6 e8 ee 08 00 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 49 89 ca b8 a5 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:00007ffdd5703148 EFLAGS: 00000286 ORIG_RAX: 00000000000000a5
RAX: ffffffffffffffda RBX: 00007ffdd5703160 RCX: 00007f0bcd6080ca
RDX: 0000000020000080 RSI: 0000000020000040 RDI: 00007ffdd5703160
RBP: 0000000000000004 R08: 00007ffdd57031a0 R09: 0000000000001132
R10: 0000000000008008 R11: 0000000000000286 R12: 0000000000008008
R13: 00007ffdd57031a0 R14: 0000000000000003 R15: 0000000000400000
 </TASK>

The buggy address belongs to the physical page:
page:ffffea0001d7ba40 refcount:3 mapcount:0 mapping:ffff88801addcd78 index:0x10 pfn:0x75ee9
memcg:ffff888015e5a000
aops:def_blk_aops ino:700000
flags: 0xfff00000008104(referenced|active|private|node=0|zone=1|lastcpupid=0x7ff)
page_type: 0xffffffff()
raw: 00fff00000008104 0000000000000000 dead000000000122 ffff88801addcd78
raw: 0000000000000010 ffff888076e04bc8 00000003ffffffff ffff888015e5a000
page dumped because: kasan: bad access detected
page_owner tracks the page as allocated
page last allocated via order 0, migratetype Movable, gfp_mask 0x148c48(GFP_NOFS|__GFP_NOFAIL|__GFP_COMP|__GFP_HARDWALL|__GFP_MOVABLE), pid 5025, tgid 5025 (syz-executor929), ts 56773895243, free_ts 51044933989
 set_page_owner include/linux/page_owner.h:31 [inline]
 post_alloc_hook+0x1e6/0x210 mm/page_alloc.c:1536
 prep_new_page mm/page_alloc.c:1543 [inline]
 get_page_from_freelist+0x31ec/0x3370 mm/page_alloc.c:3183
 __alloc_pages+0x255/0x670 mm/page_alloc.c:4439
 folio_alloc+0x1e/0x60 mm/mempolicy.c:2308
 filemap_alloc_folio+0xde/0x500 mm/filemap.c:979
 __filemap_get_folio+0x431/0xbb0 mm/filemap.c:1939
 grow_dev_page fs/buffer.c:1058 [inline]
 grow_buffers fs/buffer.c:1118 [inline]
 __getblk_slow fs/buffer.c:1145 [inline]
 __getblk_gfp+0x218/0x630 fs/buffer.c:1439
 __bread_gfp+0x2e/0x380 fs/buffer.c:1473
 sb_bread include/linux/buffer_head.h:323 [inline]
 read_super_block+0x91/0x800 fs/reiserfs/super.c:1604
 reiserfs_fill_super+0x912/0x2620 fs/reiserfs/super.c:1966
 mount_bdev+0x237/0x300 fs/super.c:1629
 legacy_get_tree+0xef/0x190 fs/fs_context.c:638
 vfs_get_tree+0x8c/0x280 fs/super.c:1750
 do_new_mount+0x28f/0xae0 fs/namespace.c:3335
 do_mount fs/namespace.c:3675 [inline]
 __do_sys_mount fs/namespace.c:3884 [inline]
 __se_sys_mount+0x2d9/0x3c0 fs/namespace.c:3861
 do_syscall_x64 arch/x86/entry/common.c:50 [inline]
 do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
page last free stack trace:
 reset_page_owner include/linux/page_owner.h:24 [inline]
 free_pages_prepare mm/page_alloc.c:1136 [inline]
 free_unref_page_prepare+0x8c3/0x9f0 mm/page_alloc.c:2312
 free_unref_page_list+0x596/0x830 mm/page_alloc.c:2451
 release_pages+0x2113/0x23f0 mm/swap.c:1042
 tlb_batch_pages_flush mm/mmu_gather.c:98 [inline]
 tlb_flush_mmu_free mm/mmu_gather.c:293 [inline]
 tlb_flush_mmu+0x34c/0x4e0 mm/mmu_gather.c:300
 tlb_finish_mmu+0xd4/0x1f0 mm/mmu_gather.c:392
 exit_mmap+0x4d3/0xc50 mm/mmap.c:3223
 __mmput+0x115/0x3c0 kernel/fork.c:1349
 exit_mm+0x21f/0x300 kernel/exit.c:567
 do_exit+0x612/0x2290 kernel/exit.c:861
 do_group_exit+0x206/0x2c0 kernel/exit.c:1024
 __do_sys_exit_group kernel/exit.c:1035 [inline]
 __se_sys_exit_group kernel/exit.c:1033 [inline]
 __x64_sys_exit_group+0x3f/0x40 kernel/exit.c:1033
 do_syscall_x64 arch/x86/entry/common.c:50 [inline]
 do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
 entry_SYSCALL_64_after_hwframe+0x63/0xcd

Memory state around the buggy address:
 ffff888075ee9f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 ffff888075ee9f80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>ffff888075eea000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
                   ^
 ffff888075eea080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
 ffff888075eea100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
==================================================================

Crashes (3):
Time Kernel Commit Syzkaller Config Log Report Syz repro C repro VM info Assets (help?) Manager Title
2023/09/03 15:13 upstream 92901222f83d 696ea0d2 .config strace log report syz C [disk image] [vmlinux] [kernel image] [mounted in repro] ci-upstream-kasan-gce-smack-root KASAN: use-after-free Read in reiserfs_get_unused_objectid
2023/03/25 02:10 upstream 1e760fa3596e 9700afae .config strace log report syz C [disk image] [vmlinux] [kernel image] [mounted in repro] ci2-upstream-fs KASAN: use-after-free Read in reiserfs_get_unused_objectid
2023/03/25 01:53 upstream 1e760fa3596e 9700afae .config console log report info [disk image] [vmlinux] [kernel image] ci2-upstream-fs KASAN: use-after-free Read in reiserfs_get_unused_objectid
* Struck through repros no longer work on HEAD.