[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <f945f2a0-c694-4874-a7b2-59cee4cb76c3@suse.com>
Date: Wed, 15 Oct 2025 14:06:25 +0200
From: Oliver Neukum <oneukum@...e.com>
To: syzbot <syzbot+1018672fe70298606e5f@...kaller.appspotmail.com>,
bentiss@...nel.org, jikos@...nel.org, linux-input@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-usb@...r.kernel.org,
syzkaller-bugs@...glegroups.com
Subject: Re: [syzbot] [input?] [usb?] KASAN: slab-out-of-bounds Read in
mcp2221_raw_event (2)
#syz test: git://repo/address.git 3a8660878839
On 14.10.25 17:20, syzbot wrote:
> syzbot has found a reproducer for the following issue on:
>
> HEAD commit: 3a8660878839 Linux 6.18-rc1
> git tree: upstream
> console output: https://syzkaller.appspot.com/x/log.txt?x=12a705e2580000
> kernel config: https://syzkaller.appspot.com/x/.config?x=f3e7b5a3627a90dd
> dashboard link: https://syzkaller.appspot.com/bug?extid=1018672fe70298606e5f
> compiler: gcc (Debian 12.2.0-14+deb12u1) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40
> syz repro: https://syzkaller.appspot.com/x/repro.syz?x=132ebb34580000
> C reproducer: https://syzkaller.appspot.com/x/repro.c?x=140fe52f980000
>
> Downloadable assets:
> disk image: https://storage.googleapis.com/syzbot-assets/e767e8931970/disk-3a866087.raw.xz
> vmlinux: https://storage.googleapis.com/syzbot-assets/4cb12bdcfcea/vmlinux-3a866087.xz
> kernel image: https://storage.googleapis.com/syzbot-assets/b08acfae954d/bzImage-3a866087.xz
>
> IMPORTANT: if you fix the issue, please add the following tag to the commit:
> Reported-by: syzbot+1018672fe70298606e5f@...kaller.appspotmail.com
>
> ==================================================================
> BUG: KASAN: slab-out-of-bounds in mcp2221_raw_event+0x1070/0x10a0 drivers/hid/hid-mcp2221.c:948
> Read of size 1 at addr ffff8880721cbfff by task kworker/0:7/6094
>
> CPU: 0 UID: 0 PID: 6094 Comm: kworker/0:7 Not tainted syzkaller #0 PREEMPT(full)
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/02/2025
> Workqueue: usb_hub_wq hub_event
> Call Trace:
> <IRQ>
> __dump_stack lib/dump_stack.c:94 [inline]
> dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:120
> print_address_description mm/kasan/report.c:378 [inline]
> print_report+0xcd/0x630 mm/kasan/report.c:482
> kasan_report+0xe0/0x110 mm/kasan/report.c:595
> mcp2221_raw_event+0x1070/0x10a0 drivers/hid/hid-mcp2221.c:948
> __hid_input_report.constprop.0+0x314/0x450 drivers/hid/hid-core.c:2139
> hid_irq_in+0x35e/0x870 drivers/hid/usbhid/hid-core.c:286
> __usb_hcd_giveback_urb+0x38b/0x610 drivers/usb/core/hcd.c:1661
> usb_hcd_giveback_urb+0x39b/0x450 drivers/usb/core/hcd.c:1745
> dummy_timer+0x1809/0x3a00 drivers/usb/gadget/udc/dummy_hcd.c:1995
> __run_hrtimer kernel/time/hrtimer.c:1777 [inline]
> __hrtimer_run_queues+0x202/0xad0 kernel/time/hrtimer.c:1841
> hrtimer_run_softirq+0x17d/0x350 kernel/time/hrtimer.c:1858
> handle_softirqs+0x219/0x8e0 kernel/softirq.c:622
> __do_softirq kernel/softirq.c:656 [inline]
> invoke_softirq kernel/softirq.c:496 [inline]
> __irq_exit_rcu+0x109/0x170 kernel/softirq.c:723
> irq_exit_rcu+0x9/0x30 kernel/softirq.c:739
> instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1052 [inline]
> sysvec_apic_timer_interrupt+0xa4/0xc0 arch/x86/kernel/apic/apic.c:1052
> </IRQ>
> <TASK>
> asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:697
> RIP: 0010:kasan_check_range+0x12/0x1b0 mm/kasan/generic.c:199
> Code: 00 00 00 00 0f 1f 40 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 0f 1f 40 d6 48 85 f6 0f 84 64 01 00 00 48 89 f8 41 54 <44> 0f b6 c2 48 01 f0 55 53 0f 82 d7 00 00 00 eb 0f cc cc cc 48 b8
> RSP: 0018:ffffc900037b6b60 EFLAGS: 00000202
> RAX: ffff888077da86b0 RBX: ffff888077da8668 RCX: ffffffff819803ae
> RDX: 0000000000000001 RSI: 0000000000000004 RDI: ffff888077da86b0
> RBP: ffff888077da86b0 R08: 0000000000000002 R09: 0000000000000000
> R10: ffff888077da866f R11: 0000000000000000 R12: ffffffff8c6df2a0
> R13: ffffffff9ae57620 R14: 0000000000000000 R15: ffff888026709978
> instrument_atomic_write include/linux/instrumented.h:82 [inline]
> atomic_set include/linux/atomic/atomic-instrumented.h:67 [inline]
> osq_lock_init include/linux/osq_lock.h:25 [inline]
> __mutex_init+0xae/0x120 kernel/locking/mutex.c:53
> i2c_register_adapter+0x15d/0x1370 drivers/i2c/i2c-core-base.c:1544
> i2c_add_adapter drivers/i2c/i2c-core-base.c:1673 [inline]
> i2c_add_adapter+0x10a/0x1b0 drivers/i2c/i2c-core-base.c:1653
> devm_i2c_add_adapter+0x1b/0x90 drivers/i2c/i2c-core-base.c:1845
> mcp2221_probe+0x5f1/0xc50 drivers/hid/hid-mcp2221.c:1289
> __hid_device_probe drivers/hid/hid-core.c:2775 [inline]
> hid_device_probe+0x5ba/0x8d0 drivers/hid/hid-core.c:2812
> call_driver_probe drivers/base/dd.c:581 [inline]
> really_probe+0x241/0xa90 drivers/base/dd.c:659
> __driver_probe_device+0x1de/0x440 drivers/base/dd.c:801
> driver_probe_device+0x4c/0x1b0 drivers/base/dd.c:831
> __device_attach_driver+0x1df/0x310 drivers/base/dd.c:959
> bus_for_each_drv+0x159/0x1e0 drivers/base/bus.c:462
> __device_attach+0x1e4/0x4b0 drivers/base/dd.c:1031
> bus_probe_device+0x17f/0x1c0 drivers/base/bus.c:537
> device_add+0x1148/0x1aa0 drivers/base/core.c:3689
> hid_add_device+0x31b/0x5c0 drivers/hid/hid-core.c:2951
> usbhid_probe+0xd38/0x13f0 drivers/hid/usbhid/hid-core.c:1435
> usb_probe_interface+0x303/0xa40 drivers/usb/core/driver.c:396
> call_driver_probe drivers/base/dd.c:581 [inline]
> really_probe+0x241/0xa90 drivers/base/dd.c:659
> __driver_probe_device+0x1de/0x440 drivers/base/dd.c:801
> driver_probe_device+0x4c/0x1b0 drivers/base/dd.c:831
> __device_attach_driver+0x1df/0x310 drivers/base/dd.c:959
> bus_for_each_drv+0x159/0x1e0 drivers/base/bus.c:462
> __device_attach+0x1e4/0x4b0 drivers/base/dd.c:1031
> bus_probe_device+0x17f/0x1c0 drivers/base/bus.c:537
> device_add+0x1148/0x1aa0 drivers/base/core.c:3689
> usb_set_configuration+0x1187/0x1e20 drivers/usb/core/message.c:2210
> usb_generic_driver_probe+0xb1/0x110 drivers/usb/core/generic.c:250
> usb_probe_device+0xef/0x3e0 drivers/usb/core/driver.c:291
> call_driver_probe drivers/base/dd.c:581 [inline]
> really_probe+0x241/0xa90 drivers/base/dd.c:659
> __driver_probe_device+0x1de/0x440 drivers/base/dd.c:801
> driver_probe_device+0x4c/0x1b0 drivers/base/dd.c:831
> __device_attach_driver+0x1df/0x310 drivers/base/dd.c:959
> bus_for_each_drv+0x159/0x1e0 drivers/base/bus.c:462
> __device_attach+0x1e4/0x4b0 drivers/base/dd.c:1031
> bus_probe_device+0x17f/0x1c0 drivers/base/bus.c:537
> device_add+0x1148/0x1aa0 drivers/base/core.c:3689
> usb_new_device+0xd07/0x1a60 drivers/usb/core/hub.c:2694
> hub_port_connect drivers/usb/core/hub.c:5566 [inline]
> hub_port_connect_change drivers/usb/core/hub.c:5706 [inline]
> port_event drivers/usb/core/hub.c:5870 [inline]
> hub_event+0x2f34/0x4fe0 drivers/usb/core/hub.c:5952
> process_one_work+0x9cf/0x1b70 kernel/workqueue.c:3263
> process_scheduled_works kernel/workqueue.c:3346 [inline]
> worker_thread+0x6c8/0xf10 kernel/workqueue.c:3427
> kthread+0x3c5/0x780 kernel/kthread.c:463
> ret_from_fork+0x675/0x7d0 arch/x86/kernel/process.c:158
> ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245
> </TASK>
>
> Allocated by task 5918:
> kasan_save_stack+0x33/0x60 mm/kasan/common.c:56
> kasan_save_track+0x14/0x30 mm/kasan/common.c:77
> poison_kmalloc_redzone mm/kasan/common.c:400 [inline]
> __kasan_kmalloc+0xaa/0xb0 mm/kasan/common.c:417
> kmalloc_noprof include/linux/slab.h:957 [inline]
> kzalloc_noprof include/linux/slab.h:1094 [inline]
> ipv6_add_addr+0x4e3/0x1fe0 net/ipv6/addrconf.c:1120
> add_addr+0xde/0x350 net/ipv6/addrconf.c:3201
> add_v4_addrs+0x642/0x980 net/ipv6/addrconf.c:3263
> addrconf_gre_config net/ipv6/addrconf.c:3545 [inline]
> addrconf_init_auto_addrs+0x51a/0x810 net/ipv6/addrconf.c:3559
> addrconf_notify+0xe93/0x19e0 net/ipv6/addrconf.c:3740
> notifier_call_chain+0xbc/0x410 kernel/notifier.c:85
> call_netdevice_notifiers_info+0xbe/0x140 net/core/dev.c:2229
> call_netdevice_notifiers_extack net/core/dev.c:2267 [inline]
> call_netdevice_notifiers net/core/dev.c:2281 [inline]
> __dev_notify_flags+0x12c/0x2e0 net/core/dev.c:9676
> netif_change_flags+0x108/0x160 net/core/dev.c:9705
> do_setlink.constprop.0+0xb53/0x4380 net/core/rtnetlink.c:3151
> rtnl_changelink net/core/rtnetlink.c:3769 [inline]
> __rtnl_newlink net/core/rtnetlink.c:3928 [inline]
> rtnl_newlink+0x1446/0x2000 net/core/rtnetlink.c:4065
> rtnetlink_rcv_msg+0x95e/0xe90 net/core/rtnetlink.c:6954
> netlink_rcv_skb+0x158/0x420 net/netlink/af_netlink.c:2552
> netlink_unicast_kernel net/netlink/af_netlink.c:1320 [inline]
> netlink_unicast+0x5aa/0x870 net/netlink/af_netlink.c:1346
> netlink_sendmsg+0x8c8/0xdd0 net/netlink/af_netlink.c:1896
> sock_sendmsg_nosec net/socket.c:727 [inline]
> __sock_sendmsg net/socket.c:742 [inline]
> __sys_sendto+0x4a3/0x520 net/socket.c:2244
> __do_sys_sendto net/socket.c:2251 [inline]
> __se_sys_sendto net/socket.c:2247 [inline]
> __x64_sys_sendto+0xe0/0x1c0 net/socket.c:2247
> do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
> do_syscall_64+0xcd/0xfa0 arch/x86/entry/syscall_64.c:94
> entry_SYSCALL_64_after_hwframe+0x77/0x7f
>
> The buggy address belongs to the object at ffff8880721cbc00
> which belongs to the cache kmalloc-cg-512 of size 512
> The buggy address is located 583 bytes to the right of
> allocated 440-byte region [ffff8880721cbc00, ffff8880721cbdb8)
>
> The buggy address belongs to the physical page:
> page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x721c8
> head: order:2 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
> flags: 0xfff00000000040(head|node=0|zone=1|lastcpupid=0x7ff)
> page_type: f5(slab)
> raw: 00fff00000000040 ffff88813ff30140 ffffea0001e68c00 dead000000000002
> raw: 0000000000000000 0000000000100010 00000000f5000000 0000000000000000
> head: 00fff00000000040 ffff88813ff30140 ffffea0001e68c00 dead000000000002
> head: 0000000000000000 0000000000100010 00000000f5000000 0000000000000000
> head: 00fff00000000002 ffffea0001c87201 00000000ffffffff 00000000ffffffff
> head: ffffffffffffffff 0000000000000000 00000000ffffffff 0000000000000004
> page dumped because: kasan: bad access detected
> page_owner tracks the page as allocated
> page last allocated via order 2, migratetype Unmovable, gfp_mask 0xd20c0(__GFP_IO|__GFP_FS|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC), pid 5796, tgid 5796 (sshd-session), ts 52056965840, free_ts 15121629475
> set_page_owner include/linux/page_owner.h:32 [inline]
> post_alloc_hook+0x1c0/0x230 mm/page_alloc.c:1850
> prep_new_page mm/page_alloc.c:1858 [inline]
> get_page_from_freelist+0x10a3/0x3a30 mm/page_alloc.c:3884
> __alloc_frozen_pages_noprof+0x25f/0x2470 mm/page_alloc.c:5183
> alloc_pages_mpol+0x1fb/0x550 mm/mempolicy.c:2416
> alloc_slab_page mm/slub.c:3039 [inline]
> allocate_slab mm/slub.c:3212 [inline]
> new_slab+0x24a/0x360 mm/slub.c:3266
> ___slab_alloc+0xdc4/0x1ae0 mm/slub.c:4636
> __slab_alloc.constprop.0+0x63/0x110 mm/slub.c:4755
> __slab_alloc_node mm/slub.c:4831 [inline]
> slab_alloc_node mm/slub.c:5253 [inline]
> __do_kmalloc_node mm/slub.c:5626 [inline]
> __kmalloc_node_track_caller_noprof+0x4db/0x8a0 mm/slub.c:5736
> kmalloc_reserve+0xef/0x2c0 net/core/skbuff.c:601
> __alloc_skb+0x166/0x380 net/core/skbuff.c:670
> alloc_skb include/linux/skbuff.h:1383 [inline]
> alloc_skb_with_frags+0xe0/0x860 net/core/skbuff.c:6671
> sock_alloc_send_pskb+0x7f9/0x980 net/core/sock.c:2965
> unix_stream_sendmsg+0x39f/0x1340 net/unix/af_unix.c:2455
> sock_sendmsg_nosec net/socket.c:727 [inline]
> __sock_sendmsg net/socket.c:742 [inline]
> sock_write_iter+0x566/0x610 net/socket.c:1195
> new_sync_write fs/read_write.c:593 [inline]
> vfs_write+0x7d3/0x11d0 fs/read_write.c:686
> ksys_write+0x1f8/0x250 fs/read_write.c:738
> page last free pid 1 tgid 1 stack trace:
> reset_page_owner include/linux/page_owner.h:25 [inline]
> free_pages_prepare mm/page_alloc.c:1394 [inline]
> __free_frozen_pages+0x7df/0x1160 mm/page_alloc.c:2906
> __free_pages mm/page_alloc.c:5302 [inline]
> free_contig_range+0x183/0x4b0 mm/page_alloc.c:7146
> destroy_args+0xb69/0x12e0 mm/debug_vm_pgtable.c:958
> debug_vm_pgtable+0x1a32/0x3640 mm/debug_vm_pgtable.c:1345
> do_one_initcall+0x123/0x6e0 init/main.c:1283
> do_initcall_level init/main.c:1345 [inline]
> do_initcalls init/main.c:1361 [inline]
> do_basic_setup init/main.c:1380 [inline]
> kernel_init_freeable+0x5c8/0x920 init/main.c:1593
> kernel_init+0x1c/0x2b0 init/main.c:1483
> ret_from_fork+0x675/0x7d0 arch/x86/kernel/process.c:158
> ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245
>
> Memory state around the buggy address:
> ffff8880721cbe80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
> ffff8880721cbf00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
>> ffff8880721cbf80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
> ^
> ffff8880721cc000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> ffff8880721cc080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> ==================================================================
> ----------------
> Code disassembly (best guess):
> 0: 00 00 add %al,(%rax)
> 2: 00 00 add %al,(%rax)
> 4: 0f 1f 40 00 nopl 0x0(%rax)
> 8: 90 nop
> 9: 90 nop
> a: 90 nop
> b: 90 nop
> c: 90 nop
> d: 90 nop
> e: 90 nop
> f: 90 nop
> 10: 90 nop
> 11: 90 nop
> 12: 90 nop
> 13: 90 nop
> 14: 90 nop
> 15: 90 nop
> 16: 90 nop
> 17: 90 nop
> 18: 0f 1f 40 d6 nopl -0x2a(%rax)
> 1c: 48 85 f6 test %rsi,%rsi
> 1f: 0f 84 64 01 00 00 je 0x189
> 25: 48 89 f8 mov %rdi,%rax
> 28: 41 54 push %r12
> * 2a: 44 0f b6 c2 movzbl %dl,%r8d <-- trapping instruction
> 2e: 48 01 f0 add %rsi,%rax
> 31: 55 push %rbp
> 32: 53 push %rbx
> 33: 0f 82 d7 00 00 00 jb 0x110
> 39: eb 0f jmp 0x4a
> 3b: cc int3
> 3c: cc int3
> 3d: cc int3
> 3e: 48 rex.W
> 3f: b8 .byte 0xb8
>
>
> ---
> If you want syzbot to run the reproducer, reply with:
> #syz test: git://repo/address.git branch-or-commit-hash
> If you attach or paste a git patch, syzbot will apply it before testing.
>
View attachment "0001-hid-mcp2221-validate-message-length.patch" of type "text/x-patch" (4406 bytes)
Powered by blists - more mailing lists