[syzbot] [usb?] WARNING: kobject bug in pch_udc_remove

1 view
Skip to first unread message

syzbot

unread,
8:53 AM (4 hours ago) 8:53 AM
to da...@kernel.org, drive...@lists.linux.dev, gre...@linuxfoundation.org, linux-...@vger.kernel.org, linu...@vger.kernel.org, raf...@kernel.org, syzkall...@googlegroups.com
Hello,

syzbot found the following issue on:

HEAD commit: d58772d8520c Merge tag 'regmap-fix-v7.2-rc7' of git://git...
git tree: upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=10996149580000
kernel config: https://syzkaller.appspot.com/x/.config?x=c44651ea7dd2f307
dashboard link: https://syzkaller.appspot.com/bug?extid=3e2e533aa1b2a75525e7
compiler: gcc (Debian 14.2.0-19) 14.2.0, GNU ld (GNU Binutils for Debian) 2.44
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=17bc2a9e580000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=17293132580000

Downloadable assets:
disk image (non-bootable): https://storage.googleapis.com/syzbot-assets/d900f083ada3/non_bootable_disk-d58772d8.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/caffbd0a7ec1/vmlinux-d58772d8.xz
kernel image: https://storage.googleapis.com/syzbot-assets/686d959b6f96/bzImage-d58772d8.xz

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

pch_udc 0000:00:03.0: pch_udc_probe: request_irq(23) fail
------------[ cut here ]------------
kobject: '(null)' (ffff888035ce0110): is not initialized, yet kobject_put() is being called.
WARNING: lib/kobject.c:734 at kobject_put+0x252/0x640 lib/kobject.c:734, CPU#0: syz.0.17/5908
Modules linked in:
CPU: 0 UID: 0 PID: 5908 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
RIP: 0010:kobject_put+0x258/0x640 lib/kobject.c:734
Code: 59 f6 48 89 da 48 b8 00 00 00 00 00 fc ff df 48 c1 ea 03 80 3c 02 00 0f 85 5e 03 00 00 48 8d 3d de 47 83 05 48 8b 33 48 89 da <67> 48 0f b9 3a e9 0b fe ff ff e8 b9 a8 59 f6 be 03 00 00 00 4c 89
RSP: 0018:ffffc900035b7918 EFLAGS: 00010246
RAX: dffffc0000000000 RBX: ffff888035ce0110 RCX: ffffffff8bb0c8c4
RDX: ffff888035ce0110 RSI: 0000000000000000 RDI: ffffffff91341290
RBP: 0000000000000000 R08: 0000000000000001 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000000 R12: ffff888035ce014c
R13: dffffc0000000000 R14: ffff888035ce1978 R15: ffff888035ce0608
FS: 000055558de32500(0000) GS:ffff8880d5dec000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000557c252125d8 CR3: 0000000040736000 CR4: 0000000000352ef0
Call Trace:
<TASK>
put_device+0x1f/0x30 drivers/base/core.c:3880
pch_udc_remove+0x47/0x510 drivers/usb/gadget/udc/pch_udc.c:2986
pch_udc_probe+0xcc6/0x1130 drivers/usb/gadget/udc/pch_udc.c:3109
local_pci_probe+0xdd/0x1b0 drivers/pci/pci-driver.c:332
pci_call_probe+0x176/0x800 drivers/pci/pci-driver.c:394
__pci_device_probe drivers/pci/pci-driver.c:455 [inline]
pci_device_probe+0x1cd/0x370 drivers/pci/pci-driver.c:489
call_driver_probe drivers/base/dd.c:628 [inline]
really_probe+0x241/0xa60 drivers/base/dd.c:706
__driver_probe_device+0x20e/0x450 drivers/base/dd.c:868
device_driver_attach+0xd1/0x220 drivers/base/dd.c:1203
bind_store+0xf4/0x190 drivers/base/bus.c:267
drv_attr_store+0x74/0xb0 drivers/base/bus.c:125
sysfs_kf_write+0xf2/0x150 fs/sysfs/file.c:145
kernfs_fop_write_iter+0x3e0/0x5f0 fs/kernfs/file.c:345
new_sync_write fs/read_write.c:595 [inline]
vfs_write+0x6ac/0x1050 fs/read_write.c:687
ksys_write+0x12a/0x250 fs/read_write.c:739
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0x115/0x870 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f60b4b9e0d9
Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffdce022f28 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
RAX: ffffffffffffffda RBX: 00007f60b4e25fa0 RCX: 00007f60b4b9e0d9
RDX: 000000000000000d RSI: 0000200000000240 RDI: 0000000000000005
RBP: 00007ffdce022f90 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000001
R13: 00007f60b4e25fac R14: 00007f60b4e25fa0 R15: 00007f60b4e25fa0
</TASK>
----------------
Code disassembly (best guess):
0: 59 pop %rcx
1: f6 48 89 da testb $0xda,-0x77(%rax)
5: 48 b8 00 00 00 00 00 movabs $0xdffffc0000000000,%rax
c: fc ff df
f: 48 c1 ea 03 shr $0x3,%rdx
13: 80 3c 02 00 cmpb $0x0,(%rdx,%rax,1)
17: 0f 85 5e 03 00 00 jne 0x37b
1d: 48 8d 3d de 47 83 05 lea 0x58347de(%rip),%rdi # 0x5834802
24: 48 8b 33 mov (%rbx),%rsi
27: 48 89 da mov %rbx,%rdx
* 2a: 67 48 0f b9 3a ud1 (%edx),%rdi <-- trapping instruction
2f: e9 0b fe ff ff jmp 0xfffffe3f
34: e8 b9 a8 59 f6 call 0xf659a8f2
39: be 03 00 00 00 mov $0x3,%esi
3e: 4c rex.WR
3f: 89 .byte 0x89


---
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.

If the report is already addressed, let syzbot know by replying with:
#syz fix: exact-commit-title

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.

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

syzbot

unread,
11:43 AM (1 hour ago) 11:43 AM
to linux-...@vger.kernel.org, syzkall...@googlegroups.com, vasilis...@gmail.com
Hello,

syzbot has tested the proposed patch and the reproducer did not trigger any issue:

Reported-by: syzbot+3e2e53...@syzkaller.appspotmail.com
Tested-by: syzbot+3e2e53...@syzkaller.appspotmail.com

Tested on:

commit: d58772d8 Merge tag 'regmap-fix-v7.2-rc7' of git://git...
git tree: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
console output: https://syzkaller.appspot.com/x/log.txt?x=17712a9e580000
kernel config: https://syzkaller.appspot.com/x/.config?x=c44651ea7dd2f307
dashboard link: https://syzkaller.appspot.com/bug?extid=3e2e533aa1b2a75525e7
compiler: gcc (Debian 14.2.0-19) 14.2.0, GNU ld (GNU Binutils for Debian) 2.44
patch: https://syzkaller.appspot.com/x/patch.diff?x=13be2a9e580000

Note: testing is done by a robot and is best-effort only.

Vasileios Almpanis

unread,
12:26 PM (1 hour ago) 12:26 PM
to syzbot+3e2e53...@syzkaller.appspotmail.com, linux-...@vger.kernel.org, syzkall...@googlegroups.com
#syz test: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git d58772d8520c7ef247c4b95c9bd76d3a25da9ff5

diff --git a/drivers/usb/gadget/udc/pch_udc.c b/drivers/usb/gadget/udc/pch_udc.c
index 0a6886428739..5704aff2b09b 100644
--- a/drivers/usb/gadget/udc/pch_udc.c
+++ b/drivers/usb/gadget/udc/pch_udc.c
@@ -2979,16 +2979,8 @@ static void pch_udc_shutdown(struct pci_dev *pdev)
pch_udc_set_disconnect(dev);
}

-static void pch_udc_remove(struct pci_dev *pdev)
+static void pch_udc_cleanup(struct pch_udc_dev *dev)
{
- struct pch_udc_dev *dev = pci_get_drvdata(pdev);
-
- usb_del_gadget_udc(&dev->gadget);
-
- /* gadget driver must not be registered */
- if (dev->driver)
- dev_err(&pdev->dev,
- "%s: gadget driver still bound!!!\n", __func__);
/* dma pool cleanup */
dma_pool_destroy(dev->data_requests);

@@ -3016,6 +3008,20 @@ static void pch_udc_remove(struct pci_dev *pdev)
pch_udc_exit(dev);
}

+static void pch_udc_remove(struct pci_dev *pdev)
+{
+ struct pch_udc_dev *dev = pci_get_drvdata(pdev);
+
+ usb_del_gadget_udc(&dev->gadget);
+
+ /* gadget driver must not be registered */
+ if (dev->driver)
+ dev_err(&pdev->dev,
+ "%s: gadget driver still bound!!!\n", __func__);
+
+ pch_udc_cleanup(dev);
+}
+
static int __maybe_unused pch_udc_suspend(struct device *d)
{
struct pch_udc_dev *dev = dev_get_drvdata(d);
@@ -3106,7 +3112,7 @@ static int pch_udc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
return 0;

finished:
- pch_udc_remove(pdev);
+ pch_udc_cleanup(dev);
return retval;
}

Reply all
Reply to author
Forward
0 new messages