Crash in detail::ProxyReleaseEvent<T>::Run
Categories
(Core :: Disability Access APIs, defect, P3)
Tracking
()
People
(Reporter: MarcoZ, Unassigned)
References
Details
(Keywords: crash, csectype-uaf, sec-high)
Crash Data
Updated•7 years ago
|
Reporter | ||
Comment 1•6 years ago
|
||
Comment 2•2 years ago
|
||
This isn't an IPC bug, it's an issue with some random component using ProxyRelease
, it's impossible to tell which one from the stacks unfortunately.
Comment 3•2 years ago
|
||
Reopening because since this signature didn't have an associated bug anymore it popped up in nightly crash triage and I analyzed a few crashes. For starters this is an UAF so I'm securing this bug, given its nature however I don't know if it's easy to exploit. I don't think it is but better safe than sorry.
I've cracked open a nightly minidump which contains objects pointed by reference on the stack and analyzed what happened:
- We're releasing a dead object here,
mDoomed
points to a dead object which has been overwritten with the poison value - The task fortunately contains the name of the object that should be released runnable by the runnable which is "WeakReferenceSupport", so it must have been launched from here
- I'm adjusting the component accordingly, since this is within the mscom machinery, please adjust it if I'm wrong
Updated•2 years ago
|
Comment 4•2 years ago
|
||
It looks like all these crashes have a11y enabled and are in the content process, so it's most likely related to the COM interceptor stuff used by a11y. The a11y re-architecture (AKA Cache the World) moves away from all of that, so I think this will go away once we ship that.
Updated•2 years ago
|
Updated•2 years ago
|
Comment 5•2 years ago
|
||
CTW isn't going to be an option for fixing this on ESR102, though. Could we at least make this crash more safely if we can't feasibly stop the crashes from happening without CTW?
Comment 6•2 years ago
|
||
That's a fair point. Unfortunately, I can't reproduce this, nor can I fathom how this could happen.
- A11y uses mscom::Interceptor, which is the only user of mscom::WeakReferenceSupport with eDestroyOnMainThread.
- Because this is in the content process, it can't be accessed by any client directly; it has to go through the COM marshaler. That means it can't be a client calling Release too many times. The COM marshaler should disconnect a client once the client's ref count drops to 0, so the crash would occur in the client, not us.
- A11y mostly doesn't touch Interceptor pointers directly except to wrap an object with an Interceptor. It only releases an Interceptor via CoDisconnectObject, in which case (excepting a bug in COM) there shouldn't be an unwanted Release either.
- Even when a11y does shut down objects, it always does so on the main thread, so this would just get released immediately instead of dispatching a runnable.
- The release runnable holds a reference to the WeakReferenceSupport, so I think the only way it could be deleted before that runs is if there was an extraneous Release on the main thread. Otherwise, we'd likely crash trying to acquire a reference for the second runnable.
Unless I'm missing something, that leaves either:
- An incorrect extra Release caused by COM, in which case that's a bug in Windows.
- A Release somewhere on the main thread (maybe in the Interceptor code) that I'm missing.
Comment 7•2 years ago
|
||
We do see these crashes on Nightly at low volume if there's any diagnostic asserts we could land that you think might help identify a culprit.
Updated•2 years ago
|
Updated•2 years ago
|
Comment 8•2 years ago
|
||
I did put some thought into any diagnostic assertions we might be able to land to help track this down, but came up blank.
Comment 9•1 years ago
|
||
This can no longer occur as of Firefox 113 with Cache the World and the crash reports confirm this. The crashing code was removed altogether in bug 1821972. So, this is fixed in 113+.
Updated•1 years ago
|
Comment 10•1 years ago
|
||
Since the bug is closed, the stalled keyword is now meaningless.
For more information, please visit BugBot documentation.
Updated•1 year ago
|
Updated•1 year ago
|
Description
•