IOInterposer detours racing with launcher process background thread
Categories
(Core :: XPCOM, defect, P1)
Tracking
()
Tracking | Status | |
---|---|---|
firefox-esr60 | --- | unaffected |
firefox65 | --- | disabled |
firefox66 | --- | disabled |
firefox67 | --- | fixed |
People
(Reporter: calixte, Assigned: bugzilla)
References
(Blocks 1 open bug)
Details
(Keywords: crash, regression)
Crash Data
Attachments
(1 file)
This bug is for crash report bp-26d1c33c-a516-476c-b759-47c240190227.
Top 10 frames of crashing thread:
0 @0x246
1 kernelbase.dll GetFileAttributesExW
2 wintrust.dll SortedCatalogOpen
3 wintrust.dll CatalogLoadSortedFileData
4 wintrust.dll alloca_probe
5 wintrust.dll CatUtil_NoContentMsgDecode
6 wintrust.dll I_CertDiagControl
7 wintrust.dll alloca_probe
8 wintrust.dll WinVerifyTrust
9 mozglue.dll static bool `anonymous namespace'::SignedBinary::VerifySignatureInternal mozglue/build/Authenticode.cpp:184
There is 1 crash in nightly 67 with buildid 20190226215106. In analyzing the backtrace, the regression may have been introduced by patch [1] to fix bug 1460433.
[1] https://hg.mozilla.org/mozilla-central/rev?node=7f034553129d
Reporter | ||
Updated•6 years ago
|
Updated•6 years ago
|
Assignee | ||
Updated•6 years ago
|
Assignee | ||
Comment 2•6 years ago
|
||
The fundamental problem here is that, when the launcher process fails, it spawns a background thread to log the failure to telemetry while allowing the main thread to continue to start as the browser process.
The IOInterposer
attempts to hook NT file I/O system call stubs. Notice that all crash reports are only on x86-64. This is because we use an atomic NOP-space patch on x86, and we do not yet support these hooks on ARM64.
The launcher's background thread is attempting to issue I/O system calls concurrently with IOInterposer
attempting to write detours to those functions. The launcher thread is then being sent off into the weeds.
I am clearing the regression keyword for a couple of reasons:
- Yes, these crashes appeared after landing bug 1460433, but this is because of a bad interaction between two components; I technically did not regress an existing component;
IOInterposer
is Nightly only.
Assignee | ||
Comment 3•6 years ago
|
||
If we are running a background thread in the launcher process to log failures,
then allowing the main thread to proceed with monkeypatching system calls is a
Bad Idea. This patch gives us an environment variable that, when set, indicates
that it is unsafe for PoisonIOInterposer to run.
This scenario is an uncommon one, but one that we must account for nonetheless.
Updated•6 years ago
|
Comment 5•6 years ago
|
||
bugherder |
Assignee | ||
Updated•6 years ago
|
Updated•6 years ago
|
Description
•