From: Takashi Iwai <tiwai@suse.de>
To: Edward Adam Davis <eadavis@qq.com>
Cc: syzbot+73582d08864d8268b6fd@syzkaller.appspotmail.com,
linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org,
perex@perex.cz, syzkaller-bugs@googlegroups.com, tiwai@suse.com
Subject: Re: [PATCH] usb: fix a task hung in snd_card_free
Date: Tue, 12 Nov 2024 17:04:04 +0100 [thread overview]
Message-ID: <874j4ctp57.wl-tiwai@suse.de> (raw)
In-Reply-To: <tencent_9E3DBD3732961C37FC4AEC74E3763367E209@qq.com>
On Wed, 06 Nov 2024 03:15:49 +0100,
Edward Adam Davis wrote:
>
> task 1: snd ctrl will add card_dev ref count and can't call close to dec it,
> it is blocked waiting for task 2 to release the USB dev lock.
>
> task 2: usb dev lock has been locked by hung task (here is usb_disconnect),
> it is hung waiting for task 1 to exit and release card_dev.
>
> Adjust the USB lock acquisition method to non-blocking in ioctl to avoid
> hang when the USB connection is closed.
I'm afraid that this change would break things too badly.
i.e. changing the blocking behavior to non-blocking is no-go.
> Reported-and-tested-by: syzbot+73582d08864d8268b6fd@syzkaller.appspotmail.com
> Closes: https://syzkaller.appspot.com/bug?extid=73582d08864d8268b6fd
This particular syzkaller entry can be fixed rather by replacing
snd_card_free() in snd_usx2y_disconnect() with
snd_card_free_when_closed() like other USB audio drivers, something
like below.
Judging from the git log, it had been with snd_card_free_in_thread(),
but was switch to snd_card_free() around year 2005. Meanwhile the
handling of async card release got improved, and it's very likely OK
to use snd_card_free_when_closed() there with the recent kernel.
thanks,
Takashi
-- 8< --
--- a/sound/usb/usx2y/usbusx2y.c
+++ b/sound/usb/usx2y/usbusx2y.c
@@ -422,7 +422,7 @@ static void snd_usx2y_disconnect(struct usb_interface *intf)
}
if (usx2y->us428ctls_sharedmem)
wake_up(&usx2y->us428ctls_wait_queue_head);
- snd_card_free(card);
+ snd_card_free_when_closed(card);
}
static int snd_usx2y_probe(struct usb_interface *intf,
next prev parent reply other threads:[~2024-11-12 16:04 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-03 0:09 [syzbot] [sound?] INFO: task hung in snd_card_free syzbot
2024-11-03 1:28 ` Hillf Danton
2024-11-03 1:49 ` syzbot
2024-11-05 2:37 ` Edward Adam Davis
2024-11-05 3:12 ` syzbot
2024-11-05 3:59 ` Edward Adam Davis
2024-11-05 4:18 ` syzbot
2024-11-05 5:03 ` Edward Adam Davis
2024-11-05 5:23 ` syzbot
2024-11-05 6:57 ` Edward Adam Davis
2024-11-05 7:31 ` syzbot
2024-11-05 8:54 ` Edward Adam Davis
2024-11-05 10:52 ` syzbot
2024-11-05 11:22 ` Edward Adam Davis
2024-11-05 21:06 ` syzbot
2024-11-06 1:37 ` Edward Adam Davis
2024-11-06 2:02 ` syzbot
2024-11-06 2:15 ` [PATCH] usb: fix a " Edward Adam Davis
2024-11-12 16:04 ` Takashi Iwai [this message]
2024-11-13 1:48 ` Edward Adam Davis
2024-11-13 6:48 ` Takashi Iwai
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=874j4ctp57.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=eadavis@qq.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=syzbot+73582d08864d8268b6fd@syzkaller.appspotmail.com \
--cc=syzkaller-bugs@googlegroups.com \
--cc=tiwai@suse.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox