diff options
| author | Mark Johnston <markj@FreeBSD.org> | 2026-08-24 15:20:32 +0000 |
|---|---|---|
| committer | Mark Johnston <markj@FreeBSD.org> | 2026-08-25 15:47:12 +0000 |
| commit | edff72e5f64cc04ae41a9da6336d0ec7779e48df (patch) | |
| tree | c05ba578498ed6bbc8bbe336effb36e98e8f848e /include | |
| parent | 87bb4aa63ac789dd2821753f04bae5c768f343df (diff) | |
dsp: Fix a potential use-after-free in dsp_oss_syncstart()
This function has a loop where it attempts to lock all channels in a
group. If doing so would block, it releases all locks, sleeps for a
bit, and tries again. However, once the syncgroup lock is dropped,
nothing prevents the syncgroup structure from being freed.
Fix the inner loop: after waking up, break out of it unconditionally and
start everything again. I think the old code was also buggy and not
well-exercised: after waking up we'd continue to try and continue
locking channels. Then we'd try again from the beginning and fail to
lock the channels we had already locked.
Approved by: so
Security: FreeBSD-SA-26:58.sound
Security: CVE-2026-58091
Reported by: Hazley Samsudin of GovTech CSG
Reviewed by: christos
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D58912
Diffstat (limited to 'include')
0 files changed, 0 insertions, 0 deletions
