From: Mathias Nyman <mathias.nyman@linux.intel.com>
To: Uttkarsh Aggarwal <uttkarsh.aggarwal@oss.qualcomm.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Mathias Nyman <mathias.nyman@intel.com>
Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
wesley.cheng@oss.qualcomm.com
Subject: Re: [PATCH] xhci: sideband: Fix race condition in sideband unregister
Date: Tue, 28 Oct 2025 14:15:29 +0200 [thread overview]
Message-ID: <51ca2248-5699-4c6d-b037-a57c90ed44ac@linux.intel.com> (raw)
In-Reply-To: <20251028080043.27760-1-uttkarsh.aggarwal@oss.qualcomm.com>
On 10/28/25 10:00, Uttkarsh Aggarwal wrote:
> A kernel panic was observed due to a race condition between un-registering
> sideband and creating sideband interrupters. The issue occurrs when thread
> T1 runs uaudio_disconnect() and released sb->xhci via sideband_unregister,
> while thread T2 simultaneously accessed the now-NULL sb->xhci in
> xhci_sideband_create_interrupter() resulting in a crash.
>
> By locking the mutex before modifying sb->xhci, any thread calling
> xhci_sideband_create_interrupter() will either see a valid sb->xhci or wait
> until xhci_sideband_unregister() completes.
>
Looks like there is a bigger issue with xhci_sideband_unregister() and the mutex.
New endpoints and interrupter can be added to the sideband after
xhci_sideband_unregister() cleared the existing ones, and released the mutex.
We should avoid taking and releasing the mutex several times in unregister,
and make sure we set a flag during first time unregister takes the muxtex, and make
sure no new endpoints and interrupter are added if this flag is set.
Also avoid creating unnecessary locking dependencies between mutex and xhci spinlock.
the xhci->lock looks correct
Maybe we can use sb->vdev as a flag, I'll look into this.
Thanks
Mathias
next prev parent reply other threads:[~2025-10-28 12:15 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-28 8:00 [PATCH] xhci: sideband: Fix race condition in sideband unregister Uttkarsh Aggarwal
2025-10-28 8:45 ` Greg Kroah-Hartman
2025-10-28 12:15 ` Mathias Nyman [this message]
2025-10-28 13:44 ` [RFT PATCH] " Mathias Nyman
2025-10-28 13:56 ` Greg KH
2025-10-28 14:59 ` Mathias Nyman
2025-10-28 16:51 ` [RFT PATCH v2] " Mathias Nyman
2025-10-29 10:14 ` Greg KH
2025-10-29 12:24 ` [RFT PATCH v3] " Mathias Nyman
2025-10-29 12:51 ` Greg KH
2025-10-29 13:52 ` Mathias Nyman
2025-11-07 6:16 ` Uttkarsh Aggarwal
2025-11-07 16:05 ` Mathias Nyman
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=51ca2248-5699-4c6d-b037-a57c90ed44ac@linux.intel.com \
--to=mathias.nyman@linux.intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mathias.nyman@intel.com \
--cc=uttkarsh.aggarwal@oss.qualcomm.com \
--cc=wesley.cheng@oss.qualcomm.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