Executive brief
The Linux kernel's soundwire subsystem handles digital audio device discovery and initialization on audio buses. A bug in the enumeration completion logic fails to notify all waiting drivers when a device becomes ready, causing sound card initialization to fail or timeout during reprobe. This can result in audio devices becoming unavailable or system audio functionality being broken.
Technical details
A race condition in the soundwire bus driver's completion signaling mechanism (drivers/soundwire/bus.c) uses single-waiter completion functions (complete()) instead of multi-waiter variants (complete_all()), and incorrectly reinitializes completion structures with init_completion() instead of reinit_completion() while waiters may still be queued. This prevents future waiters from being awakened when enumeration or initialization occurs, and can corrupt completion queue state if waiters remain. The vulnerability affects sound card probe deferrals and runtime PM resume scenarios. Patches change complete() to complete_all() and init_completion() to reinit_completion() to properly signal all waiters and safely reset completion state. Affected kernel versions include the Linux 5.7+ stable series.
Affected products
- Linux Linux kernel 5.7 and later
Timeline
- 2023-07-05: disclosed: Commit authored by Johan Hovold
- 2023-08-11: patched: Patches merged into stable kernel trees
- 2025-12-24: advisory: CVE-2023-54096 published