Commit Graph

79 Commits

Author SHA1 Message Date
Toshihito Kikuchi
a80a6adb59 Bug 1642577 - De-elevate the process with CreateProcessAsUser if the compat flag RUNASADMIN is set. r=aklotz
If the process was elevated due to AppCompatFlags, we should not
use LaunchUnelevated to launch the browser process because it starts
an infinite loop of process launch.

The fix is to make GetElevationState return a new elevation state
if RUNASADMIN is set in AppCompatFlags.  With that state, we use
CreateProcessAsUser to launch the browser process.

Differential Revision: https://phabricator.services.mozilla.com/D80114
2020-06-22 18:37:49 +00:00
Toshihito Kikuchi
cc16096543 Bug 1614885 - Do not attempt to bootstrap a child process if the launcher failed to boostrap the browser process. r=aklotz
Bug 1522830 added the call to `InitializeDllBlocklistOOP` in `SandboxBroker::LaunchApp`
to enable the new dll blocklist and telemetry in sandbox processes.  If the browser
process fails to bootstrap a process for some reason, firefox starts without any crash
nor any content processes because of that change.

What is worse is that this problem persists even after the launcher process was disabled.
To mitigate it, this patch stops an attempt to bootstrap a child process if the launcher
process already failed to do it.  With this, if something bad happens in the first launch,
the launcher process is automatically disabled via registry and next time firefox will work
normally.  So a user will see the launching problem only once.

We will follow up the bootstrap issue.

Differential Revision: https://phabricator.services.mozilla.com/D62636
2020-02-13 05:49:03 +00:00
Aaron Klotz
67ba15234c Bug 1602383: Make InitializeDllBlocklistOOP a no-op on aarch64; r=mhowell
Differential Revision: https://phabricator.services.mozilla.com/D56380
2019-12-09 15:50:03 +00:00
Aaron Klotz
58b5b8c854 Bug 1522830: Part 12 - ASAN fix for DllBlocklistInit in launcher process; r=mhowell
Differential Revision: https://phabricator.services.mozilla.com/D53685
2019-12-06 22:14:07 +00:00
shindli
477dfbf824 Backed out 13 changesets (bug 1522830) for causing xpc shell failures in test_ThirdPartyModulesPing.js CLOSED TREE
Backed out changeset a3e44bbc9ce3 (bug 1522830)
Backed out changeset 11078767a246 (bug 1522830)
Backed out changeset c7ee156830cf (bug 1522830)
Backed out changeset 810f0cb2308d (bug 1522830)
Backed out changeset f8ab75219387 (bug 1522830)
Backed out changeset ec293f9a5e32 (bug 1522830)
Backed out changeset 4bfc013c3d79 (bug 1522830)
Backed out changeset f4ae67f2f231 (bug 1522830)
Backed out changeset 2737350b7d40 (bug 1522830)
Backed out changeset 52931597c652 (bug 1522830)
Backed out changeset bc8985a34539 (bug 1522830)
Backed out changeset 09cbbbc5c802 (bug 1522830)
Backed out changeset d5e366ea4657 (bug 1522830)
2019-12-06 02:07:16 +02:00
Aaron Klotz
a523aff0df Bug 1522830: Part 12 - ASAN fix for DllBlocklistInit in launcher process; r=mhowell
Differential Revision: https://phabricator.services.mozilla.com/D53685
2019-12-05 22:00:50 +00:00
Toshihito Kikuchi
c3ba5d3e5b Bug 1529593 - Make LauncherRegistryInfo delay write to the registry. r=aklotz
We have the `LauncherRegistryInfo` class to check the launcher process was
launched successfully on Windows by comparing the timestamps in the registry
when each process was launched.

The problem was when the process is launched from an elevated process, we
relaunch a new launcher process via shell after we updated the launcher's
timestamp.  As a result, `LauncherRegistryInfo` unexpectedly disabled the
launcher process even though there was nothing wrong.

A proposed fix is to introduce delay-write to the `LauncherRegistryInfo`.  With
this, `LauncherRegistryInfo::Check` modifies only the image timestamp. To update
the launcher/browser timestamps, we need to call `LauncherRegistryInfo::Commit`.
When we ask shell to relaunch a new process, we hold back commit, delegating it
to the new process.

There is another consideration needed.  If something fails during `LauncherMain`,
we call `DisableDueToFailure()` to disable the launcher until the image timestamp
is changed.  In such a case, we should not change the stored timestamps even
though commit is attempted.  The problem is we use a different instance to call
`DisableDueToFailure()` in `HandleLauncherError`.  To deal with this design,
`LauncherRegistryInfo` has a static boolean to indicate disablement happens or not.

Differential Revision: https://phabricator.services.mozilla.com/D44928
2019-10-14 17:14:54 +00:00
Aaron Klotz
27af3f3219 Bug 1542830: Part 2 - Modify launcher process blocklist to collect information about untrusted module loads; r=mhowell
* We refactor the blocklist code. Code that may possibly run before
  initialization of the Win32 subsystem and the CRT is contained within the
  `freestanding` library.
* The `freestanding` library's static initializers are placed in their own
  section so that they may be manually invoked separately from the remaining
  initializers in the binary.
* `CheckBlockInfo` and `IsDllAllowed` are modified to return a `BlockAction`
  enum instead of a `bool`. This will be used more extensively in the future for
  LSP blocking.
* The launcher process now hooks `LdrLoadDll` in addition to
  `NtMapViewOfSection`. This is necessary so that we can collect timing
  information.
* Telemetry recorders must implement the `LoaderObserver` interface.
* `ModuleLoadFrame` is a RAII class that collects the information about the
  DLL load and dispatches the information to `LoaderObserver`s.
* The launcher process exposes an implementation of the `LoaderAPI` interface
  that may be called by either the launcher process blocklist or the legacy
  blocklist in `mozglue`.
* During startup, the launcher process implements its own `LoaderObserver`.
  Once mozglue is running, it connects its `LoaderObserver` to the launcher
  process, receives a vector containing the module load events, and then
  stores and forwards them into XUL.

Depends on D43155

Differential Revision: https://phabricator.services.mozilla.com/D43156
2019-09-23 20:17:10 +00:00
Toshihito Kikuchi
132efcbc7e Bug 1578895 - Compare NT paths if NtOpenFile failed with STATUS_OBJECT_PATH_NOT_FOUND. r=aklotz
We compare two file ids to check the current process is launched from the same
executable.  However, our telemetry showed a number of Win7 users failed to open
a file handle of the parent process with STATUS_OBJECT_PATH_NOT_FOUND even
though we opened a process handle and retrieved a module path of the parent
process successfully.  We don't have data to explain how this happens or why
this happens only on Win7, Win10 10240, and 10586.

To mitigate this situation, this patch introduces a logic to compare NT path
strings.  The benefit from doing this is 1) we don't have to open a file handle
of a parent process executable and 2) when we get an NT path, a network drive
or a symbolic link is already solved.

This new logic is much faster, but we still compare file ids on the first
attempt to minimize the impact.  We fall back to the new logic only if we
detect the STATUS_OBJECT_PATH_NOT_FOUND failure.

Differential Revision: https://phabricator.services.mozilla.com/D45476
2019-09-23 17:59:42 +00:00
Brindusan Cristian
71063d72c3 Backed out 8 changesets (bug 1542830) for causing Nightly bustages. a=backout
Backed out changeset 6fcb417f7ff4 (bug 1542830)
Backed out changeset 1aa253e6604a (bug 1542830)
Backed out changeset 73ec288886cd (bug 1542830)
Backed out changeset 84b903e60dc9 (bug 1542830)
Backed out changeset 8e2da9ff5f5a (bug 1542830)
Backed out changeset c4e547a6a039 (bug 1542830)
Backed out changeset 919f1af7c135 (bug 1542830)
Backed out changeset da7e775c4051 (bug 1542830)
2019-09-22 00:01:01 +03:00
Aaron Klotz
a187752bf5 Bug 1542830: Part 2 - Modify launcher process blocklist to collect information about untrusted module loads; r=mhowell
* We refactor the blocklist code. Code that may possibly run before
  initialization of the Win32 subsystem and the CRT is contained within the
  `freestanding` library.
* The `freestanding` library's static initializers are placed in their own
  section so that they may be manually invoked separately from the remaining
  initializers in the binary.
* `CheckBlockInfo` and `IsDllAllowed` are modified to return a `BlockAction`
  enum instead of a `bool`. This will be used more extensively in the future for
  LSP blocking.
* The launcher process now hooks `LdrLoadDll` in addition to
  `NtMapViewOfSection`. This is necessary so that we can collect timing
  information.
* Telemetry recorders must implement the `LoaderObserver` interface.
* `ModuleLoadFrame` is a RAII class that collects the information about the
  DLL load and dispatches the information to `LoaderObserver`s.
* The launcher process exposes an implementation of the `LoaderAPI` interface
  that may be called by either the launcher process blocklist or the legacy
  blocklist in `mozglue`.
* During startup, the launcher process implements its own `LoaderObserver`.
  Once mozglue is running, it connects its `LoaderObserver` to the launcher
  process, receives a vector containing the module load events, and then
  stores and forwards them into XUL.

Differential Revision: https://phabricator.services.mozilla.com/D43156
2019-09-20 19:43:00 +00:00
Ciure Andrei
0566080cf1 Backed out 8 changesets (bug 1542830) for causing spidermonkey bustages CLOSED TREE
Backed out changeset b9f7fc8d0172 (bug 1542830)
Backed out changeset b85f58fd5bbd (bug 1542830)
Backed out changeset 0a9169ab2623 (bug 1542830)
Backed out changeset 39a7c05d54ef (bug 1542830)
Backed out changeset 7a3cbd2f59f0 (bug 1542830)
Backed out changeset 268530552281 (bug 1542830)
Backed out changeset df658ffb8599 (bug 1542830)
Backed out changeset e7bef6486a38 (bug 1542830)
2019-09-20 21:21:39 +03:00
Aaron Klotz
112f2a23f7 Bug 1542830: Part 2 - Modify launcher process blocklist to collect information about untrusted module loads; r=mhowell
* We refactor the blocklist code. Code that may possibly run before
  initialization of the Win32 subsystem and the CRT is contained within the
  `freestanding` library.
* The `freestanding` library's static initializers are placed in their own
  section so that they may be manually invoked separately from the remaining
  initializers in the binary.
* `CheckBlockInfo` and `IsDllAllowed` are modified to return a `BlockAction`
  enum instead of a `bool`. This will be used more extensively in the future for
  LSP blocking.
* The launcher process now hooks `LdrLoadDll` in addition to
  `NtMapViewOfSection`. This is necessary so that we can collect timing
  information.
* Telemetry recorders must implement the `LoaderObserver` interface.
* `ModuleLoadFrame` is a RAII class that collects the information about the
  DLL load and dispatches the information to `LoaderObserver`s.
* The launcher process exposes an implementation of the `LoaderAPI` interface
  that may be called by either the launcher process blocklist or the legacy
  blocklist in `mozglue`.
* During startup, the launcher process implements its own `LoaderObserver`.
  Once mozglue is running, it connects its `LoaderObserver` to the launcher
  process, receives a vector containing the module load events, and then
  stores and forwards them into XUL.

Differential Revision: https://phabricator.services.mozilla.com/D43156
2019-09-20 16:59:40 +00:00
Andreea Pavel
e65811ff32 Backed out 8 changesets (bug 1542830) for gecko decision failure on a CLOSED TREE
DONTBUILD

Backed out changeset 4f72161be496 (bug 1542830)
Backed out changeset 7ee12138946d (bug 1542830)
Backed out changeset 9e90ee4981c6 (bug 1542830)
Backed out changeset 363039c98534 (bug 1542830)
Backed out changeset 70ffff30551a (bug 1542830)
Backed out changeset c25b7bf354d9 (bug 1542830)
Backed out changeset d156dc595b69 (bug 1542830)
Backed out changeset 9f5dbd1b2959 (bug 1542830)
2019-09-20 19:49:27 +03:00
Aaron Klotz
2345ce1469 Bug 1542830: Part 2 - Modify launcher process blocklist to collect information about untrusted module loads; r=mhowell
* We refactor the blocklist code. Code that may possibly run before
  initialization of the Win32 subsystem and the CRT is contained within the
  `freestanding` library.
* The `freestanding` library's static initializers are placed in their own
  section so that they may be manually invoked separately from the remaining
  initializers in the binary.
* `CheckBlockInfo` and `IsDllAllowed` are modified to return a `BlockAction`
  enum instead of a `bool`. This will be used more extensively in the future for
  LSP blocking.
* The launcher process now hooks `LdrLoadDll` in addition to
  `NtMapViewOfSection`. This is necessary so that we can collect timing
  information.
* Telemetry recorders must implement the `LoaderObserver` interface.
* `ModuleLoadFrame` is a RAII class that collects the information about the
  DLL load and dispatches the information to `LoaderObserver`s.
* The launcher process exposes an implementation of the `LoaderAPI` interface
  that may be called by either the launcher process blocklist or the legacy
  blocklist in `mozglue`.
* During startup, the launcher process implements its own `LoaderObserver`.
  Once mozglue is running, it connects its `LoaderObserver` to the launcher
  process, receives a vector containing the module load events, and then
  stores and forwards them into XUL.

Differential Revision: https://phabricator.services.mozilla.com/D43156
2019-09-20 00:09:35 +00:00
Toshihito Kikuchi
3732fecb86 Bug 1576697 - Use LauncherResult in WinHeaderOnlyUtils.h instead of WindowsErrorResult. r=aklotz
`WindowsErrorResult` is a class to hold either a value or a Windows error
code based on the `Result` template.  We also have `LauncherResult` for the
same purpose, which was introduced as a part of the launcher process feature
afterward.  The difference is `LauncherResult` holds a filename and line
number along with an error code.

This patch integrates LauncherResult.h into WinHeaderOnlyUtils.h so that we
can use `LauncherResult` more broadly.

Differential Revision: https://phabricator.services.mozilla.com/D44512
2019-09-07 18:17:45 +00:00
Gijs Kruitbosch
3ce1b62f02 Bug 1577706 - move checks for -url from toolkit into browser code, and make osint sanitizer app-agnostic, r=mossop
Differential Revision: https://phabricator.services.mozilla.com/D44395
2019-09-03 17:01:33 +00:00
Andreea Pavel
976e2c7dd0 Backed out changeset 316e6fc0e5c5 (bug 1577706) for build bustages on a CLOSED TREE 2019-09-03 18:29:19 +03:00
Gijs Kruitbosch
23c4aa8b51 Bug 1577706 - move checks for -url from toolkit into browser code, and make osint sanitizer app-agnostic, r=mossop
Differential Revision: https://phabricator.services.mozilla.com/D44395
2019-09-03 15:10:51 +00:00
Gijs Kruitbosch
e7e43049e4 Bug 1572838 - ensure osint commandline args are passed appropriately, r=mhowell,mossop
Differential Revision: https://phabricator.services.mozilla.com/D42311
2019-08-20 19:51:34 +00:00
Aaron Klotz
0f3c5f0382 Bug 1571875: Part 2 - Change over all existing static local uses of DynamicallyLinkedFunctionPtr to use StaticDynamicallyLinkedFunctionPtr instead; r=mhowell
Depends on D40885

Differential Revision: https://phabricator.services.mozilla.com/D40886
2019-08-07 15:58:09 +00:00
Sylvestre Ledru
69746836db Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D30883
2019-05-25 17:46:15 +00:00
arthur.iakab
699b884244 Backed out changeset a296439a25ff (bug 1519636) for frequent Windows cppunit failures CLOSED TREE 2019-05-24 14:26:01 +03:00
Sylvestre Ledru
10a773a4ca Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D30883
2019-05-24 09:59:17 +00:00
David Major
56c9387c8e Bug 1523526 - Don't allow CFG on old releases of Windows for arm64 r=bobowen,aklotz
There's a bug in ole32.dll on arm64 versions of Windows prior to 1809, that crashes our content processes if we enable CFG. We've reported the issue, but even if it gets fixed, we can't assume users will have the update.

This patch uses process mitigation policy flags to disable CFG on arm64 before 1809. Based on testing, we only need to do this in the sandbox for child processes, and it's not strictly necessary for the launcher stub to set the flag on the main process. But I've included that anyway as a guard against some yet-undiscovered scenario that might hit the issue and make the browser unusable.

The effects of this patch won't be visible until we actually enable CFG in a subsequent landing.

Differential Revision: https://phabricator.services.mozilla.com/D29474
2019-05-20 17:25:30 +00:00
Coroiu Cristina
5f3be46fe2 Backed out 2 changesets (bug 1523526, bug 1526443) for Be bustage on Windows AArch on a CLOSED TREE
Backed out changeset 98013639d600 (bug 1526443)
Backed out changeset e8ac4b512f9d (bug 1523526)
2019-05-20 20:21:56 +03:00
David Major
7d8296c46d Bug 1523526 - Don't allow CFG on old releases of Windows for arm64 r=bobowen,aklotz
There's a bug in ole32.dll on arm64 versions of Windows prior to 1809, that crashes our content processes if we enable CFG. We've reported the issue, but even if it gets fixed, we can't assume users will have the update.

This patch uses process mitigation policy flags to disable CFG on arm64 before 1809. Based on testing, we only need to do this in the sandbox for child processes, and it's not strictly necessary for the launcher stub to set the flag on the main process. But I've included that anyway as a guard against some yet-undiscovered scenario that might hit the issue and make the browser unusable.

The effects of this patch won't be visible until we actually enable CFG in a subsequent landing.

Differential Revision: https://phabricator.services.mozilla.com/D29474
2019-05-07 18:37:13 +00:00
Aaron Klotz
2ad3f91f6e Bug 1548324: Improve implementation of force-launcher in the launcher process; r=mhowell
This patch replaces the quick-n-dirty implementation of -force-launcher with
one that makes LauncherRegistryInfo aware of that state, thus correctly setting
the affected registry values.

Differential Revision: https://phabricator.services.mozilla.com/D29545
2019-05-01 20:56:43 +00:00
Sylvestre Ledru
893cfb7019 Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D28329
2019-04-22 16:35:03 +00:00
Aaron Klotz
b37a3edd71 Bug 1503538: Part 4 - Add injected static import blocking to launcher process; r=mhowell
Depends on D27145

Differential Revision: https://phabricator.services.mozilla.com/D27146
2019-04-11 22:32:29 +00:00
Sylvestre Ledru
72e7e7d7e7 Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D27245
2019-04-12 13:14:25 +00:00
Aaron Klotz
deae168074 Bug 1543256: Add a force-enable command line flag to the launcher process; r=mhowell
Differential Revision: https://phabricator.services.mozilla.com/D26824
2019-04-09 22:15:23 +00:00
Masatoshi Kimura
8c1a5d6908 Bug 1528963 - Attach console before launching child. r=aklotz
Differential Revision: https://phabricator.services.mozilla.com/D23807
2019-03-29 18:05:03 +00:00
Gurzau Raul
c49c646a45 Backed out changeset 7cb86942ed34 (bug 1528963) for bustages at nsEmbedFunctions.cpp on a CLOSED TREE. 2019-03-29 01:45:01 +02:00
Masatoshi Kimura
fbdcac365e Bug 1528963 - Attach console before launching child. r=aklotz
Differential Revision: https://phabricator.services.mozilla.com/D23807
2019-03-28 21:37:52 +00:00
Carl Corcoran
0ed16e2f3b Bug 1503538 Part 1/5: Move printf_stderr to a shared header r=aklotz
In the tree we have two copies of printf_stderr() with the comment,
"Ideally this should be shared". This moves the function to a new exported
header which can be the basis for other similar debugging utility functions.

To include it,
#include "mozilla/glue/Debug.h"

A small concern with this is that printf_stderr() is in the global namespace,
and could conflict if it's inadvertently included along with, for example,
nsDebug.h which also defines this function. The warning in the comment at the
top of the file attempts to mitigate this.

Differential Revision: https://phabricator.services.mozilla.com/D13196
2019-03-06 00:51:15 +00:00
Aaron Klotz
48d6a70937 Bug 1530531: Add a command line option to the launcher process that forces it to log errors to the Windows event log; r=mhowell
Differential Revision: https://phabricator.services.mozilla.com/D21099
2019-02-25 23:11:20 +00:00
Aaron Klotz
3e58a83b7c Bug 1460433: Part 2 - Log launcher process failures to a telemetry ping; r=mhowell
This patch does a few things:

* Fleshes out the launcher process failure ping;
* Sends that ping via pingsender;
* If there is any failure in doing so, we fall back to the Windows event log;
* Any launcher process failures will result in us falling back to the normal
  startup code path, ensuring that users will still see a browser.

A sample ping will be attached to the bug.

Differential Revision: https://phabricator.services.mozilla.com/D19697
2019-02-25 21:14:07 +00:00
Cosmin Sabou
4e48ce82cc Backed out changeset 7733f36c6e38 (bug 1460433) for windows MinGW butages on ErrorHandler. CLOSED TREE 2019-02-25 20:32:35 +02:00
Aaron Klotz
1154d9ebf3 Bug 1460433: Part 2 - Log launcher process failures to a telemetry ping; r=mhowell
This patch does a few things:

* Fleshes out the launcher process failure ping;
* Sends that ping via pingsender;
* If there is any failure in doing so, we fall back to the Windows event log;
* Any launcher process failures will result in us falling back to the normal
  startup code path, ensuring that users will still see a browser.

A sample ping will be attached to the bug.

***
Format cleanup

Differential Revision: https://phabricator.services.mozilla.com/D19697
2019-02-22 18:43:18 +00:00
Margareta Eliza Balazs
7fe3543679 Merge mozilla-central to inbound. a=merge CLOSED TREE 2019-01-18 12:31:59 +02:00
Ehsan Akhgari
498e2df734 Bug 1521000 - Part 2: Adjust our clang-format rules to include spaces after the hash for nested preprocessor directives r=sylvestre
# ignore-this-changeset
2019-01-18 10:16:18 +01:00
Aaron Klotz
41c4642371 Bug 1520537: Clean up use of LauncherRegistryInfo when MOZ_LAUNCHER_PROCESS is not defined; r=mhowell
Differential Revision: https://phabricator.services.mozilla.com/D16914
2019-01-17 23:45:37 +00:00
Aaron Klotz
1a7144b467 Bug 1511078: Add LauncherRegistryInfo as a temporary mechanism for runtime disabling of launcher process; r=mhowell
Differential Revision: https://phabricator.services.mozilla.com/D15756
2019-01-15 23:10:00 +00:00
Coroiu Cristina
832d2700d8 Backed out 2 changesets (bug 1511078) for build bustages at Unified_cpp_toolkit_xre0.obj
Backed out changeset 61a47d6d5e26 (bug 1511078)
Backed out changeset 006df494925a (bug 1511078)
2019-01-15 23:15:50 +02:00
Aaron Klotz
baf8c98ef9 Bug 1511078: Add LauncherRegistryInfo as a temporary mechanism for runtime disabling of launcher process; r=mhowell
Differential Revision: https://phabricator.services.mozilla.com/D15756
2019-01-15 20:19:46 +00:00
Aaron Klotz
eedf8c7042 Bug 1509929: Part 1 - Move IsSameBinaryAsParentProcess to its own header; r=mhowell
Differential Revision: https://phabricator.services.mozilla.com/D15446
2019-01-08 00:09:26 +00:00
Bogdan Tara
676a975543 Backed out 3 changesets (bug 1509929) for mingw failures on TestSameBinary.cpp CLOSED TREE
Backed out changeset 8d432633f8fb (bug 1509929)
Backed out changeset 5ec50f23671e (bug 1509929)
Backed out changeset 8bdba9ec4d5b (bug 1509929)
2019-01-08 01:33:43 +02:00
Aaron Klotz
d2b0ebc2cb Bug 1509929: Part 1 - Move IsSameBinaryAsParentProcess to its own header; r=mhowell
Differential Revision: https://phabricator.services.mozilla.com/D15446
2019-01-07 22:36:08 +00:00
Sylvestre Ledru
e5a134f73a Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset
2018-11-30 11:46:48 +01:00