================================================================== BUG: KASAN: use-after-free in mcp2221_raw_event+0x103c/0x10a0 drivers/hid/hid-mcp2221.c:948 Read of size 1 at addr ffff88813efdffff by task kworker/1:7/9639 CPU: 1 UID: 0 PID: 9639 Comm: kworker/1:7 Not tainted syzkaller #0 PREEMPT(voluntary) Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025 Workqueue: usb_hub_wq hub_event Call Trace: __dump_stack lib/dump_stack.c:94 [inline] dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120 print_address_description mm/kasan/report.c:378 [inline] print_report+0x156/0x4c9 mm/kasan/report.c:482 kasan_report+0xdf/0x1a0 mm/kasan/report.c:595 mcp2221_raw_event+0x103c/0x10a0 drivers/hid/hid-mcp2221.c:948 __hid_input_report.constprop.0+0x314/0x460 drivers/hid/hid-core.c:2139 hid_irq_in+0x52e/0x6b0 drivers/hid/usbhid/hid-core.c:286 __usb_hcd_giveback_urb+0x38d/0x610 drivers/usb/core/hcd.c:1657 usb_hcd_giveback_urb+0x3ca/0x4a0 drivers/usb/core/hcd.c:1741 dummy_timer+0xd85/0x3670 drivers/usb/gadget/udc/dummy_hcd.c:1995 __run_hrtimer kernel/time/hrtimer.c:1777 [inline] __hrtimer_run_queues+0x516/0x990 kernel/time/hrtimer.c:1841 hrtimer_run_softirq+0x17d/0x350 kernel/time/hrtimer.c:1858 handle_softirqs+0x1dd/0x8f0 kernel/softirq.c:622 __do_softirq kernel/softirq.c:656 [inline] invoke_softirq kernel/softirq.c:496 [inline] __irq_exit_rcu+0xed/0x150 kernel/softirq.c:723 irq_exit_rcu+0x9/0x30 kernel/softirq.c:739 instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1056 [inline] sysvec_apic_timer_interrupt+0x8f/0xb0 arch/x86/kernel/apic/apic.c:1056 asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:697 RIP: 0010:__unwind_start+0x43/0x7f0 arch/x86/kernel/unwind_orc.c:702 Code: 00 00 55 48 89 f5 31 f6 53 48 89 cb 48 83 ec 18 e8 d2 ea a3 00 4c 89 fa 48 b8 00 00 00 00 00 fc ff df 48 c1 ea 03 80 3c 02 00 <0f> 85 7b 06 00 00 80 3d c5 8a 87 07 00 49 89 6e 28 0f 84 26 02 00 RSP: 0018:ffffc9000397e518 EFLAGS: 00000246 RAX: dffffc0000000000 RBX: ffffc9000397e5f8 RCX: 0000000000000000 RDX: 1ffff9200072fcb2 RSI: 0000000000000000 RDI: ffffc9000397e5c8 RBP: ffff888105b757c0 R08: 0000000000000001 R09: 0000000000000000 R10: ffffc9000397e568 R11: 0000000000000000 R12: 0000000000000000 R13: ffffc9000397e628 R14: ffffc9000397e568 R15: ffffc9000397e590 unwind_start arch/x86/include/asm/unwind.h:64 [inline] arch_stack_walk+0x73/0xf0 arch/x86/kernel/stacktrace.c:24 stack_trace_save+0x8e/0xc0 kernel/stacktrace.c:122 kasan_save_stack+0x30/0x50 mm/kasan/common.c:57 kasan_save_track+0x14/0x30 mm/kasan/common.c:78 poison_kmalloc_redzone mm/kasan/common.c:398 [inline] __kasan_kmalloc+0x8f/0xa0 mm/kasan/common.c:415 kasan_kmalloc include/linux/kasan.h:263 [inline] __do_kmalloc_node mm/slub.c:5657 [inline] __kmalloc_noprof+0x33e/0x990 mm/slub.c:5669 kmalloc_noprof include/linux/slab.h:961 [inline] kmalloc_array_noprof include/linux/slab.h:1003 [inline] gpiochip_add_data_with_key+0x3ff/0x39e0 drivers/gpio/gpiolib.c:1090 devm_gpiochip_add_data_with_key+0x31/0x90 drivers/gpio/gpiolib-devres.c:356 mcp2221_probe.cold+0x8f1/0xab3 drivers/hid/hid-mcp2221.c:1312 __hid_device_probe drivers/hid/hid-core.c:2775 [inline] hid_device_probe+0x50e/0x800 drivers/hid/hid-core.c:2812 call_driver_probe drivers/base/dd.c:581 [inline] really_probe+0x241/0xa60 drivers/base/dd.c:659 __driver_probe_device+0x1de/0x400 drivers/base/dd.c:801 driver_probe_device+0x4c/0x1b0 drivers/base/dd.c:831 __device_attach_driver+0x1df/0x340 drivers/base/dd.c:959 bus_for_each_drv+0x159/0x1e0 drivers/base/bus.c:500 __device_attach+0x1e4/0x4d0 drivers/base/dd.c:1031 device_initial_probe+0xaf/0xd0 drivers/base/dd.c:1086 bus_probe_device+0x64/0x160 drivers/base/bus.c:574 device_add+0x11d9/0x1950 drivers/base/core.c:3689 hid_add_device+0x2bf/0x440 drivers/hid/hid-core.c:2951 usbhid_probe+0xd57/0x1350 drivers/hid/usbhid/hid-core.c:1450 usb_probe_interface+0x303/0x8f0 drivers/usb/core/driver.c:396 call_driver_probe drivers/base/dd.c:581 [inline] really_probe+0x241/0xa60 drivers/base/dd.c:659 __driver_probe_device+0x1de/0x400 drivers/base/dd.c:801 driver_probe_device+0x4c/0x1b0 drivers/base/dd.c:831 __device_attach_driver+0x1df/0x340 drivers/base/dd.c:959 bus_for_each_drv+0x159/0x1e0 drivers/base/bus.c:500 __device_attach+0x1e4/0x4d0 drivers/base/dd.c:1031 device_initial_probe+0xaf/0xd0 drivers/base/dd.c:1086 bus_probe_device+0x64/0x160 drivers/base/bus.c:574 device_add+0x11d9/0x1950 drivers/base/core.c:3689 usb_set_configuration+0xd97/0x1c60 drivers/usb/core/message.c:2210 usb_generic_driver_probe+0xa1/0xe0 drivers/usb/core/generic.c:250 usb_probe_device+0xef/0x400 drivers/usb/core/driver.c:291 call_driver_probe drivers/base/dd.c:581 [inline] really_probe+0x241/0xa60 drivers/base/dd.c:659 __driver_probe_device+0x1de/0x400 drivers/base/dd.c:801 driver_probe_device+0x4c/0x1b0 drivers/base/dd.c:831 __device_attach_driver+0x1df/0x340 drivers/base/dd.c:959 bus_for_each_drv+0x159/0x1e0 drivers/base/bus.c:500 __device_attach+0x1e4/0x4d0 drivers/base/dd.c:1031 device_initial_probe+0xaf/0xd0 drivers/base/dd.c:1086 bus_probe_device+0x64/0x160 drivers/base/bus.c:574 device_add+0x11d9/0x1950 drivers/base/core.c:3689 usb_new_device.cold+0x685/0x115c drivers/usb/core/hub.c:2695 hub_port_connect drivers/usb/core/hub.c:5567 [inline] hub_port_connect_change drivers/usb/core/hub.c:5707 [inline] port_event drivers/usb/core/hub.c:5871 [inline] hub_event+0x314d/0x4af0 drivers/usb/core/hub.c:5953 process_one_work+0x9c2/0x1840 kernel/workqueue.c:3257 process_scheduled_works kernel/workqueue.c:3340 [inline] worker_thread+0x5da/0xe40 kernel/workqueue.c:3421 kthread+0x3b3/0x730 kernel/kthread.c:463 ret_from_fork+0x6c3/0xa20 arch/x86/kernel/process.c:158 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246 The buggy address belongs to the physical page: page: refcount:0 mapcount:0 mapping:0000000000000000 index:0xffff888100000000 pfn:0x13efdf flags: 0x200000000000000(node=0|zone=2) raw: 0200000000000000 dead000000000100 dead000000000122 0000000000000000 raw: ffff888100000000 0000000000000000 00000000ffffffff 0000000000000000 page dumped because: kasan: bad access detected page_owner tracks the page as freed page last allocated via order 0, migratetype Unmovable, gfp_mask 0x2800(GFP_NOWAIT), pid 19408, tgid 19407 (syz.3.3593), ts 2107408413615, free_ts 2107439916294 set_page_owner include/linux/page_owner.h:32 [inline] post_alloc_hook+0x1e1/0x250 mm/page_alloc.c:1884 prep_new_page mm/page_alloc.c:1892 [inline] get_page_from_freelist+0xd57/0x3b20 mm/page_alloc.c:3945 __alloc_frozen_pages_noprof+0x269/0x2230 mm/page_alloc.c:5240 alloc_pages_mpol+0xe8/0x410 mm/mempolicy.c:2486 alloc_frozen_pages_noprof mm/mempolicy.c:2557 [inline] alloc_pages_noprof+0x131/0x390 mm/mempolicy.c:2577 get_free_pages_noprof+0x10/0xb0 mm/page_alloc.c:5299 tlb_next_batch mm/mmu_gather.c:35 [inline] __tlb_remove_folio_pages_size.isra.0+0x2dc/0x550 mm/mmu_gather.c:196 zap_present_folio_ptes mm/memory.c:1655 [inline] zap_present_ptes mm/memory.c:1708 [inline] do_zap_pte_range mm/memory.c:1810 [inline] zap_pte_range mm/memory.c:1854 [inline] zap_pmd_range mm/memory.c:1946 [inline] zap_pud_range mm/memory.c:1975 [inline] zap_p4d_range mm/memory.c:1996 [inline] unmap_page_range+0x10ba/0x39e0 mm/memory.c:2017 unmap_single_vma+0x153/0x240 mm/memory.c:2059 unmap_vmas+0x218/0x470 mm/memory.c:2101 exit_mmap+0x181/0xae0 mm/mmap.c:1277 __mmput kernel/fork.c:1173 [inline] mmput+0xe0/0x430 kernel/fork.c:1196 exit_mm kernel/exit.c:581 [inline] do_exit+0x78a/0x2a30 kernel/exit.c:959 do_group_exit+0xd5/0x2a0 kernel/exit.c:1112 get_signal+0x1ec7/0x21e0 kernel/signal.c:3034 arch_do_signal_or_restart+0x91/0x7a0 arch/x86/kernel/signal.c:337 page last free pid 19408 tgid 19407 stack trace: reset_page_owner include/linux/page_owner.h:25 [inline] free_pages_prepare mm/page_alloc.c:1433 [inline] __free_frozen_pages+0x7d1/0x1010 mm/page_alloc.c:2973 tlb_batch_list_free mm/mmu_gather.c:159 [inline] tlb_finish_mmu+0x23a/0x7f0 mm/mmu_gather.c:500 exit_mmap+0x3c5/0xae0 mm/mmap.c:1290 __mmput kernel/fork.c:1173 [inline] mmput+0xe0/0x430 kernel/fork.c:1196 exit_mm kernel/exit.c:581 [inline] do_exit+0x78a/0x2a30 kernel/exit.c:959 do_group_exit+0xd5/0x2a0 kernel/exit.c:1112 get_signal+0x1ec7/0x21e0 kernel/signal.c:3034 arch_do_signal_or_restart+0x91/0x7a0 arch/x86/kernel/signal.c:337 __exit_to_user_mode_loop kernel/entry/common.c:41 [inline] exit_to_user_mode_loop+0x7e/0x430 kernel/entry/common.c:75 __exit_to_user_mode_prepare include/linux/irq-entry-common.h:226 [inline] syscall_exit_to_user_mode_prepare include/linux/irq-entry-common.h:256 [inline] syscall_exit_to_user_mode_work include/linux/entry-common.h:159 [inline] syscall_exit_to_user_mode include/linux/entry-common.h:194 [inline] do_syscall_64+0x4a8/0x570 arch/x86/entry/syscall_64.c:100 entry_SYSCALL_64_after_hwframe+0x77/0x7f Memory state around the buggy address: ffff88813efdfe80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ffff88813efdff00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff >ffff88813efdff80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ^ ffff88813efe0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ffff88813efe0080: 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: 55 push %rbp 3: 48 89 f5 mov %rsi,%rbp 6: 31 f6 xor %esi,%esi 8: 53 push %rbx 9: 48 89 cb mov %rcx,%rbx c: 48 83 ec 18 sub $0x18,%rsp 10: e8 d2 ea a3 00 call 0xa3eae7 15: 4c 89 fa mov %r15,%rdx 18: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax 1f: fc ff df 22: 48 c1 ea 03 shr $0x3,%rdx 26: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1) * 2a: 0f 85 7b 06 00 00 jne 0x6ab <-- trapping instruction 30: 80 3d c5 8a 87 07 00 cmpb $0x0,0x7878ac5(%rip) # 0x7878afc 37: 49 89 6e 28 mov %rbp,0x28(%r14) 3b: 0f .byte 0xf 3c: 84 26 test %ah,(%rsi) 3e: 02 00 add (%rax),%al