Skip to content

winmm: Fix use-after-free race between stream destroy and buffer thread. - #854

Merged
kinetiknz merged 1 commit into
masterfrom
winmm-destroy-race
Aug 15, 2026
Merged

winmm: Fix use-after-free race between stream destroy and buffer thread.#854
kinetiknz merged 1 commit into
masterfrom
winmm-destroy-race

Conversation

@kinetiknz

Copy link
Copy Markdown
Collaborator

Destroy could free a stream while buffer thread work items referencing it were still queued or in flight, particularly after a data callback error. Count pending work items per stream (and in-flight driver callbacks per context) and make destroy wait for them to drain. Also fix free_buffers accounting on refill's error paths so the wait terminates.

Destroy could free a stream while buffer thread work items referencing
it were still queued or in flight, particularly after a data callback
error. Count pending work items per stream (and in-flight driver
callbacks per context) and make destroy wait for them to drain. Also
fix free_buffers accounting on refill's error paths so the wait
terminates.
@kinetiknz
kinetiknz requested a review from padenot July 29, 2026 04:29
@kinetiknz kinetiknz self-assigned this Jul 29, 2026
@kinetiknz
kinetiknz merged commit f6b59a3 into master Aug 15, 2026
31 checks passed
@kinetiknz
kinetiknz deleted the winmm-destroy-race branch August 15, 2026 00:09
lando-worker Bot pushed a commit to mozilla-firefox/firefox that referenced this pull request Aug 20, 2026
… and WinMM stream destroy fixes. a=RyanVM

This branch pins an older libcubeb revision, so the two fixes are carried as
local vendoring patches rather than a full libcubeb update:

- wasapi-output-mix-channel-count.patch: upstream cubeb dc56ea41 and f0bd97db
  (mozilla/cubeb#856), bug 2061220.  Creates the output mixer when the device
  mix channel count differs from the stream channel count, and rejects stream
  params whose layout and channel count disagree.
- winmm-destroy-work-item-uaf.patch: upstream cubeb f6b59a3b
  (mozilla/cubeb#854), bug 2058051.  Counts pending buffer thread work items
  per stream and in-flight driver callbacks per context so stream and context
  destruction wait for them to drain.

Differential Revision: https://phabricator.services.mozilla.com/D319944
lando-worker Bot pushed a commit to mozilla-firefox/firefox that referenced this pull request Aug 20, 2026
… and WinMM stream destroy fixes. a=RyanVM DONTBUILD

This branch pins an older libcubeb revision, so the two fixes are carried as
local vendoring patches rather than a full libcubeb update:

- wasapi-output-mix-channel-count.patch: upstream cubeb dc56ea41 and f0bd97db
  (mozilla/cubeb#856), bug 2061220.  Creates the output mixer when the device
  mix channel count differs from the stream channel count, and rejects stream
  params whose layout and channel count disagree.
- winmm-destroy-work-item-uaf.patch: upstream cubeb f6b59a3b
  (mozilla/cubeb#854), bug 2058051.  Counts pending buffer thread work items
  per stream and in-flight driver callbacks per context so stream and context
  destruction wait for them to drain.

Differential Revision: https://phabricator.services.mozilla.com/D319945
lando-worker Bot pushed a commit to mozilla-firefox/firefox that referenced this pull request Aug 20, 2026
… and WinMM stream destroy fixes. a=RyanVM DONTBUILD

This branch pins an older libcubeb revision, so the two fixes are carried as
local vendoring patches rather than a full libcubeb update:

- wasapi-output-mix-channel-count.patch: upstream cubeb dc56ea41 and f0bd97db
  (mozilla/cubeb#856), bug 2061220.  Creates the output mixer when the device
  mix channel count differs from the stream channel count, and rejects stream
  params whose layout and channel count disagree.
- winmm-destroy-work-item-uaf.patch: upstream cubeb f6b59a3b
  (mozilla/cubeb#854), bug 2058051.  Counts pending buffer thread work items
  per stream and in-flight driver callbacks per context so stream and context
  destruction wait for them to drain.

Differential Revision: https://phabricator.services.mozilla.com/D319946
lando-worker Bot pushed a commit to mozilla-firefox/firefox that referenced this pull request Aug 20, 2026
… and WinMM stream destroy fixes. a=RyanVM DONTBUILD

This branch pins an older libcubeb revision, so the two fixes are carried as
local vendoring patches rather than a full libcubeb update:

- wasapi-output-mix-channel-count.patch: upstream cubeb dc56ea41 and f0bd97db
  (mozilla/cubeb#856), bug 2061220.  Creates the output mixer when the device
  mix channel count differs from the stream channel count, and rejects stream
  params whose layout and channel count disagree.
- winmm-destroy-work-item-uaf.patch: upstream cubeb f6b59a3b
  (mozilla/cubeb#854), bug 2058051.  Counts pending buffer thread work items
  per stream and in-flight driver callbacks per context so stream and context
  destruction wait for them to drain.

Differential Revision: https://phabricator.services.mozilla.com/D319947
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants