From: syzbot <syzbot+3a56b27661cb0e004a40@syzkaller.appspotmail.com>
To: gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
linux-usb@vger.kernel.org, syzkaller-bugs@googlegroups.com
Subject: [syzbot] [usb?] KASAN: slab-use-after-free Write in dev_config
Date: Thu, 05 Nov 2026 17:12:32 -0800 [thread overview]
Message-ID: <6aed2980.53a4481a.2cc859.0009.GAE@google.com> (raw)
Hello,
syzbot found the following issue on:
HEAD commit: e11160948333 riscv: vector: Fix output operands in context..
git tree: git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git for-next
console output: https://syzkaller.appspot.com/x/log.txt?x=12e4e525580000
kernel config: https://syzkaller.appspot.com/x/.config?x=1c1b9a4a89432905
dashboard link: https://syzkaller.appspot.com/bug?extid=3a56b27661cb0e004a40
compiler: riscv64-linux-gnu-gcc (Debian 14.2.0-19) 14.2.0, GNU ld (GNU Binutils for Debian) 2.44
userspace arch: riscv64
Unfortunately, I don't have any reproducer for this issue yet.
Downloadable assets:
disk image (non-bootable): https://storage.googleapis.com/syzbot-assets/a741b348759c/non_bootable_disk-e1116094.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/69abda6e64cf/vmlinux-e1116094.xz
kernel image: https://storage.googleapis.com/syzbot-assets/2d7716a5dfdb/Image-e1116094.xz
AI-generated root cause summary:
In drivers/usb/gadget/legacy/inode.c, gadgetfs_bind() only acquires a reference
on struct dev_data (calling get_dev(dev)) at the very end of its success path
(line 1709). If an error occurs earlier (such as in usb_ep_alloc_request() or
activate_ep_files()), gadgetfs_bind() jumps to enomem and calls
gadgetfs_unbind(), which unconditionally calls put_dev(dev) to release a
reference that was never acquired. This reference count underflow prematurely
frees struct dev_data via put_dev(). Furthermore, when driver probing fails
during registration, usb_gadget_register_driver() still returns 0 because
match_existing_only is not set on gadgetfs_driver, causing dev_config() to
execute dev->gadget_registered = true on the already freed dev structure,
resulting in a slab use-after-free write.
full analysis: https://syzkaller.appspot.com/x/ai_root_cause?x=3a56b27661cb0e004a40
IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+3a56b27661cb0e004a40@syzkaller.appspotmail.com
gadgetfs gadget.1: probe with driver gadgetfs failed with error -12
UDC core: USB Gadget filesystem: couldn't find an available UDC
==================================================================
BUG: KASAN: slab-use-after-free in dev_config+0x13d6/0x1450 drivers/usb/gadget/legacy/inode.c:1908
Write of size 1 at addr ffffaf801a714099 by task syz.1.5/3856
CPU: 1 UID: 0 PID: 3856 Comm: syz.1.5 Not tainted syzkaller #0 PREEMPT
Hardware name: riscv-virtio,qemu (DT)
Call Trace:
[<ffffffff8007f408>] dump_backtrace+0x2e/0x3c arch/riscv/kernel/stacktrace.c:149
[<ffffffff80003112>] show_stack+0x30/0x3c arch/riscv/kernel/stacktrace.c:155
[<ffffffff8006394e>] __dump_stack lib/dump_stack.c:94 [inline]
[<ffffffff8006394e>] dump_stack_lvl+0x114/0x1aa lib/dump_stack.c:120
[<ffffffff8000e7ce>] print_address_description mm/kasan/report.c:378 [inline]
[<ffffffff8000e7ce>] print_report+0x27a/0x592 mm/kasan/report.c:482
[<ffffffff80c113e2>] kasan_report+0xf0/0x26c mm/kasan/report.c:595
[<ffffffff80c130cc>] __asan_report_store1_noabort+0x12/0x1a mm/kasan/report_generic.c:383
[<ffffffff840d7154>] dev_config+0x13d6/0x1450 drivers/usb/gadget/legacy/inode.c:1908
[<ffffffff80d28e30>] vfs_write+0x308/0x1020 fs/read_write.c:685
[<ffffffff80d29f52>] ksys_write+0x126/0x244 fs/read_write.c:739
[<ffffffff80d2a0de>] __do_sys_write fs/read_write.c:750 [inline]
[<ffffffff80d2a0de>] __se_sys_write fs/read_write.c:747 [inline]
[<ffffffff80d2a0de>] __riscv_sys_write+0x6e/0xa0 fs/read_write.c:747
[<ffffffff8007bd88>] syscall_handler+0x92/0x114 arch/riscv/include/asm/syscall.h:112
[<ffffffff8660e902>] do_trap_ecall_u+0x4ca/0x658 arch/riscv/kernel/traps.c:341
[<ffffffff8663b218>] handle_exception+0x168/0x174 arch/riscv/kernel/entry.S:237
Allocated by task 3223:
stack_trace_save+0xa0/0xd2 kernel/stacktrace.c:122
kasan_save_stack+0x3e/0x66 mm/kasan/common.c:57
kasan_save_track+0x16/0x28 mm/kasan/common.c:78
kasan_save_alloc_info+0x30/0x3e mm/kasan/generic.c:570
poison_kmalloc_redzone mm/kasan/common.c:398 [inline]
__kasan_kmalloc+0xa0/0xa6 mm/kasan/common.c:415
kasan_kmalloc include/linux/kasan.h:263 [inline]
__kmalloc_cache_noprof+0x254/0x6aa mm/slub.c:5563
_kmalloc_noprof include/linux/slab.h:991 [inline]
_kzalloc_noprof include/linux/slab.h:1312 [inline]
dev_new drivers/usb/gadget/legacy/inode.c:176 [inline]
gadgetfs_fill_super+0x1cc/0x3e6 drivers/usb/gadget/legacy/inode.c:2064
vfs_get_super fs/super.c:1405 [inline]
get_tree_single+0xd8/0x17c fs/super.c:1432
gadgetfs_get_tree+0x26/0x30 drivers/usb/gadget/legacy/inode.c:2095
vfs_get_tree+0x7e/0x314 fs/super.c:1947
fc_mount+0x1c/0x1d6 fs/namespace.c:1198
do_new_mount_fc fs/namespace.c:3772 [inline]
do_new_mount fs/namespace.c:3848 [inline]
path_mount+0x6ae/0x1dd0 fs/namespace.c:4168
do_mount fs/namespace.c:4181 [inline]
__do_sys_mount fs/namespace.c:4397 [inline]
__se_sys_mount fs/namespace.c:4374 [inline]
__riscv_sys_mount+0x5c2/0x778 fs/namespace.c:4374
syscall_handler+0x92/0x114 arch/riscv/include/asm/syscall.h:112
do_trap_ecall_u+0x4ca/0x658 arch/riscv/kernel/traps.c:341
handle_exception+0x168/0x174 arch/riscv/kernel/entry.S:237
Freed by task 3856:
stack_trace_save+0xa0/0xd2 kernel/stacktrace.c:122
kasan_save_stack+0x3e/0x66 mm/kasan/common.c:57
kasan_save_track+0x16/0x28 mm/kasan/common.c:78
kasan_save_free_info+0x40/0x5c mm/kasan/generic.c:584
poison_slab_object mm/kasan/common.c:253 [inline]
__kasan_slab_free+0x5e/0x7e mm/kasan/common.c:285
kasan_slab_free include/linux/kasan.h:235 [inline]
slab_free_hook mm/slub.c:2748 [inline]
slab_free mm/slub.c:6508 [inline]
kfree+0x298/0x774 mm/slub.c:6801
put_dev+0xc8/0xe0 drivers/usb/gadget/legacy/inode.c:169
gadgetfs_unbind+0x1a8/0x21a drivers/usb/gadget/legacy/inode.c:1673
gadgetfs_bind+0x620/0x80e drivers/usb/gadget/legacy/inode.c:1713
gadget_bind_driver+0x228/0xafa drivers/usb/gadget/udc/core.c:1662
call_driver_probe drivers/base/dd.c:628 [inline]
really_probe+0x222/0xa8e drivers/base/dd.c:706
__driver_probe_device+0x1d6/0x46c drivers/base/dd.c:868
driver_probe_device+0x5e/0x162 drivers/base/dd.c:898
__driver_attach+0x1fc/0x57e drivers/base/dd.c:1292
bus_for_each_dev+0x126/0x1bc drivers/base/bus.c:383
driver_attach+0x3e/0x52 drivers/base/dd.c:1310
bus_add_driver+0x2c8/0x612 drivers/base/bus.c:763
driver_register+0x1a4/0x3b4 drivers/base/driver.c:174
usb_gadget_register_driver_owner+0x10c/0x2d2 drivers/usb/gadget/udc/core.c:1752
dev_config+0x7ea/0x1450 drivers/usb/gadget/legacy/inode.c:1893
vfs_write+0x308/0x1020 fs/read_write.c:685
ksys_write+0x126/0x244 fs/read_write.c:739
__do_sys_write fs/read_write.c:750 [inline]
__se_sys_write fs/read_write.c:747 [inline]
__riscv_sys_write+0x6e/0xa0 fs/read_write.c:747
syscall_handler+0x92/0x114 arch/riscv/include/asm/syscall.h:112
do_trap_ecall_u+0x4ca/0x658 arch/riscv/kernel/traps.c:341
handle_exception+0x168/0x174 arch/riscv/kernel/entry.S:237
The buggy address belongs to the object at ffffaf801a714000
which belongs to the cache kmalloc-1k of size 1024
The buggy address is located 153 bytes inside of
freed 1024-byte region [ffffaf801a714000, ffffaf801a714400)
The buggy address belongs to the physical page:
page: refcount:0 mapcount:0 mapping:0000000000000000 index:0xffffaf801a712000 pfn:0x9a710
head: order:3 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
flags: 0x240(workingset|head|node=0|zone=0)
page_type: f5(slab)
raw: 0000000000000240 ffffaf8012001dc0 ffff8d8002782610 ffff8d8002686610
raw: ffffaf801a712000 000000000010000f 00000000f5000000 0000000000000000
head: 0000000000000240 ffffaf8012001dc0 ffff8d8002782610 ffff8d8002686610
head: ffffaf801a712000 000000000010000f 00000000f5000000 0000000000000000
head: 0000000000000003 fffffffffffffe01 00000000ffffffff 00000000ffffffff
head: ffffffffffffffff 0000000000000000 00000000ffffffff 0000000000000008
page dumped because: kasan: bad access detected
page_owner tracks the page as allocated
page last allocated via order 3, migratetype Unmovable, gfp_mask 0xd2040(__GFP_IO|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC), pid 3068, tgid 3068 (default.script), ts 218016493900
__set_page_owner+0x92/0x4b0 mm/page_owner.c:359
set_page_owner include/linux/page_owner.h:33 [inline]
post_alloc_hook+0xe2/0x19e mm/page_alloc.c:1871
prep_new_page mm/page_alloc.c:1879 [inline]
get_page_from_freelist+0x916/0x3a04 mm/page_alloc.c:3943
__alloc_frozen_pages_noprof+0x274/0x35b2 mm/page_alloc.c:5436
alloc_slab_page mm/slub.c:3347 [inline]
allocate_slab mm/slub.c:3462 [inline]
new_slab+0x94/0x6ea mm/slub.c:3513
refill_objects+0x20a/0x3ba mm/slub.c:7417
refill_sheaf mm/slub.c:2885 [inline]
__pcs_replace_empty_main+0x282/0x5fe mm/slub.c:4774
alloc_from_pcs mm/slub.c:4850 [inline]
slab_alloc_node mm/slub.c:4984 [inline]
__do_kmalloc_node mm/slub.c:5413 [inline]
__kmalloc_noprof+0x58e/0x8fc mm/slub.c:5439
_kmalloc_noprof include/linux/slab.h:995 [inline]
_kzalloc_noprof include/linux/slab.h:1312 [inline]
tomoyo_init_log+0x10a6/0x1e76 security/tomoyo/audit.c:273
tomoyo_supervisor+0x40a/0x1944 security/tomoyo/common.c:2232
tomoyo_audit_env_log security/tomoyo/environ.c:37 [inline]
tomoyo_env_perm+0x196/0x1f0 security/tomoyo/environ.c:64
tomoyo_environ security/tomoyo/domain.c:673 [inline]
tomoyo_find_next_domain+0x1254/0x1c9c security/tomoyo/domain.c:889
tomoyo_bprm_check_security security/tomoyo/tomoyo.c:102 [inline]
tomoyo_bprm_check_security+0x118/0x1a6 security/tomoyo/tomoyo.c:92
security_bprm_check+0xb4/0x24e security/security.c:820
search_binary_handler fs/exec.c:1755 [inline]
exec_binprm fs/exec.c:1797 [inline]
bprm_execve fs/exec.c:1853 [inline]
bprm_execve+0x7d6/0x1aac fs/exec.c:1829
do_execveat_common.isra.0+0x45e/0x560 fs/exec.c:1951
page last free pid 3065 tgid 3065 ts 215013919100 stack trace:
__reset_page_owner+0x76/0x1bc mm/page_owner.c:338
reset_page_owner include/linux/page_owner.h:26 [inline]
__free_pages_prepare mm/page_alloc.c:1418 [inline]
__free_frozen_pages+0x6a8/0x13a2 mm/page_alloc.c:2962
free_frozen_pages+0xe/0x16 mm/page_alloc.c:2999
__free_slab+0xda/0x250 mm/slub.c:3528
free_slab+0x28/0x16c mm/slub.c:3562
discard_slab mm/slub.c:3568 [inline]
__slab_free+0x23e/0x2fe mm/slub.c:5823
___cache_free+0x94/0xac mm/slub.c:6580
qlink_free mm/kasan/quarantine.c:163 [inline]
qlist_free_all+0x64/0x134 mm/kasan/quarantine.c:179
kasan_quarantine_reduce+0x152/0x1b4 mm/kasan/quarantine.c:286
__kasan_slab_alloc+0x5c/0x82 mm/kasan/common.c:350
kasan_slab_alloc include/linux/kasan.h:253 [inline]
slab_post_alloc_hook mm/slub.c:4683 [inline]
slab_alloc_node mm/slub.c:4996 [inline]
kmem_cache_alloc_noprof+0x1f6/0x6a2 mm/slub.c:5010
mt_alloc_one lib/maple_tree.c:139 [inline]
mas_alloc_nodes lib/maple_tree.c:1086 [inline]
mas_preallocate+0xb0e/0xd74 lib/maple_tree.c:5057
vma_iter_prealloc mm/vma.h:665 [inline]
commit_merge+0x2ae/0x235e mm/vma.c:834
vma_expand+0x3c6/0xa86 mm/vma.c:1302
relocate_vma_down+0x26c/0x458 mm/vma_exec.c:63
setup_arg_pages+0x6a4/0xd24 fs/exec.c:695
Memory state around the buggy address:
ffffaf801a713f80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
ffffaf801a714000: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
>ffffaf801a714080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
^
ffffaf801a714100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
ffffaf801a714180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
==================================================================
---
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 syzkaller@googlegroups.com.
syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
If the report is already addressed, let syzbot know by replying with:
#syz fix: exact-commit-title
If you want to overwrite report's subsystems, reply with:
#syz set subsystems: new-subsystem
(See the list of subsystem names on the web dashboard)
If the report is a duplicate of another one, reply with:
#syz dup: exact-subject-of-another-report
If you want to undo deduplication, reply with:
#syz undup
next reply other threads:[~2026-11-06 1:12 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 1:12 syzbot [this message]
2026-11-06 3:50 ` [syzbot] [usb?] KASAN: slab-use-after-free Write in dev_config Alan Stern
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6aed2980.53a4481a.2cc859.0009.GAE@google.com \
--to=syzbot+3a56b27661cb0e004a40@syzkaller.appspotmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=syzkaller-bugs@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.