[v5.15] KASAN: use-after-free Read in ntfs_readpage

1 view
Skip to first unread message

syzbot

unread,
Mar 18, 2023, 4:03:55 AM3/18/23
to syzkaller...@googlegroups.com
Hello,

syzbot found the following issue on:

HEAD commit: 8020ae3c051d Linux 5.15.103
git tree: linux-5.15.y
console output: https://syzkaller.appspot.com/x/log.txt?x=142525bec80000
kernel config: https://syzkaller.appspot.com/x/.config?x=f95b212e0ccdd4d1
dashboard link: https://syzkaller.appspot.com/bug?extid=ba146e220a3be3513bdc
compiler: Debian clang version 15.0.7, GNU ld (GNU Binutils for Debian) 2.35.2
userspace arch: arm64
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=114fae9ac80000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=16433cf2c80000

Downloadable assets:
disk image: https://storage.googleapis.com/syzbot-assets/6153dfa8dcc0/disk-8020ae3c.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/2093d52db59f/vmlinux-8020ae3c.xz
kernel image: https://storage.googleapis.com/syzbot-assets/85041d0bd356/Image-8020ae3c.gz.xz
mounted in repro: https://storage.googleapis.com/syzbot-assets/42c07f1af551/mount_0.gz

IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+ba146e...@syzkaller.appspotmail.com

ntfs: (device loop0): ntfs_read_locked_inode(): Failed with error code -5. Marking corrupt inode 0xa as bad. Run chkdsk.
ntfs: (device loop0): load_and_init_upcase(): Failed to load $UpCase from the volume. Using default.
==================================================================
BUG: KASAN: use-after-free in ntfs_readpage+0x694/0x1e04 fs/ntfs/aops.c:488
Read of size 1 at addr ffff0000da49617f by task syz-executor203/4052

CPU: 0 PID: 4052 Comm: syz-executor203 Not tainted 5.15.103-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/02/2023
Call trace:
dump_backtrace+0x0/0x530 arch/arm64/kernel/stacktrace.c:152
show_stack+0x2c/0x3c arch/arm64/kernel/stacktrace.c:216
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x108/0x170 lib/dump_stack.c:106
print_address_description+0x7c/0x3f0 mm/kasan/report.c:248
__kasan_report mm/kasan/report.c:434 [inline]
kasan_report+0x174/0x1e4 mm/kasan/report.c:451
kasan_check_range+0x274/0x2b4 mm/kasan/generic.c:189
memcpy+0x90/0xe8 mm/kasan/shadow.c:65
ntfs_readpage+0x694/0x1e04 fs/ntfs/aops.c:488
do_read_cache_page+0x60c/0x950
read_cache_page+0x68/0x84 mm/filemap.c:3565
read_mapping_page include/linux/pagemap.h:515 [inline]
ntfs_map_page fs/ntfs/aops.h:75 [inline]
load_and_init_attrdef fs/ntfs/super.c:1609 [inline]
load_system_files+0x1c3c/0x4228 fs/ntfs/super.c:1817
ntfs_fill_super+0x1670/0x24e8 fs/ntfs/super.c:2894
mount_bdev+0x26c/0x368 fs/super.c:1369
ntfs_mount+0x44/0x58 fs/ntfs/super.c:3051
legacy_get_tree+0xd4/0x16c fs/fs_context.c:610
vfs_get_tree+0x90/0x274 fs/super.c:1499
do_new_mount+0x25c/0x8c8 fs/namespace.c:2994
path_mount+0x590/0x104c fs/namespace.c:3324
do_mount fs/namespace.c:3337 [inline]
__do_sys_mount fs/namespace.c:3545 [inline]
__se_sys_mount fs/namespace.c:3522 [inline]
__arm64_sys_mount+0x510/0x5e0 fs/namespace.c:3522
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall+0x98/0x2b8 arch/arm64/kernel/syscall.c:52
el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:142
do_el0_svc+0x58/0x14c arch/arm64/kernel/syscall.c:181
el0_svc+0x7c/0x1f0 arch/arm64/kernel/entry-common.c:596
el0t_64_sync_handler+0x84/0xe4 arch/arm64/kernel/entry-common.c:614
el0t_64_sync+0x1a0/0x1a4 arch/arm64/kernel/entry.S:584

The buggy address belongs to the page:
page:00000000f4cb8647 refcount:0 mapcount:0 mapping:0000000000000000 index:0x1 pfn:0x11a496
flags: 0x5ffc00000000000(node=0|zone=2|lastcpupid=0x7ff)
raw: 05ffc00000000000 fffffc00036938c8 fffffc0003692508 0000000000000000
raw: 0000000000000001 0000000000000000 00000000ffffffff 0000000000000000
page dumped because: kasan: bad access detected

Memory state around the buggy address:
ffff0000da496000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ffff0000da496080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
>ffff0000da496100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
^
ffff0000da496180: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ffff0000da496200: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
==================================================================
ntfs: volume version 3.1.
attempt to access beyond end of device
loop0: rw=0, want=2080, limit=190
ntfs: (device loop0): ntfs_end_buffer_async_read(): Buffer I/O error, logical block 0x103.
attempt to access beyond end of device
loop0: rw=0, want=560, limit=190
attempt to access beyond end of device
loop0: rw=0, want=232, limit=190


---
This report is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzk...@googlegroups.com.

syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
syzbot can test patches for this issue, for details see:
https://goo.gl/tpsmEJ#testing-patches

syzbot

unread,
Apr 21, 2024, 10:55:09 PMApr 21
to syzkaller...@googlegroups.com
syzbot suspects this issue could be fixed by backporting the following commit:

commit 7ffa8f3d30236e0ab897c30bdb01224ff1fe1c89
git tree: upstream
Author: Matthew Wilcox (Oracle) <wi...@infradead.org>
Date: Mon Jan 15 07:20:25 2024 +0000

fs: Remove NTFS classic

bisection log: https://syzkaller.appspot.com/x/bisect.txt?x=16bf21c7180000
kernel config: https://syzkaller.appspot.com/x/.config?x=f0ea19992afd55ad
dashboard link: https://syzkaller.appspot.com/bug?extid=ba146e220a3be3513bdc
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=10f1e08c280000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=17d7a594280000


Please keep in mind that other backports might be required as well.

For information about bisection process see: https://goo.gl/tpsmEJ#bisection
Reply all
Reply to author
Forward
0 new messages