summaryrefslogtreecommitdiffstats
path: root/toolkit/crashreporter/test/browser/browser_sandbox_crash.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/crashreporter/test/browser/browser_sandbox_crash.js')
-rw-r--r--toolkit/crashreporter/test/browser/browser_sandbox_crash.js77
1 files changed, 77 insertions, 0 deletions
diff --git a/toolkit/crashreporter/test/browser/browser_sandbox_crash.js b/toolkit/crashreporter/test/browser/browser_sandbox_crash.js
new file mode 100644
index 0000000000..4cd3d782e5
--- /dev/null
+++ b/toolkit/crashreporter/test/browser/browser_sandbox_crash.js
@@ -0,0 +1,77 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+/* global BrowserTestUtils, ok, gBrowser, add_task */
+
+"use strict";
+
+/**
+ * Checks that we set the CPUMicrocodeVersion annotation.
+ * This is a Windows-specific crash annotation.
+ */
+if (AppConstants.platform == "win") {
+ add_task(async function test_cpu_microcode_version_annotation() {
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ },
+ async function (browser) {
+ // Crash the tab
+ let annotations = await BrowserTestUtils.crashFrame(browser);
+
+ ok(
+ "CPUMicrocodeVersion" in annotations,
+ "contains CPU microcode version"
+ );
+ }
+ );
+ });
+}
+
+/**
+ * Checks that Linux sandbox violations are reported as SIGSYS crashes with
+ * the syscall number provided in the address field of the minidump's exception
+ * stream.
+ */
+if (AppConstants.platform == "linux") {
+ add_task(async function test_sandbox_violation_is_sigsys() {
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ },
+ async function (browser) {
+ // Crash the tab
+ let annotations = await BrowserTestUtils.crashFrame(
+ browser,
+ true,
+ true,
+ /* Default browsing context */ null,
+ { crashType: "CRASH_SYSCALL" }
+ );
+
+ Assert.equal(
+ annotations.StackTraces.crash_info.type,
+ "SIGSYS",
+ "The crash type is SIGSYS"
+ );
+
+ function chroot_syscall_number() {
+ // We crash by calling chroot(), see BrowserTestUtilsChild.sys.mjs
+ switch (Services.sysinfo.get("arch")) {
+ case "x86-64":
+ return "0xa1";
+ case "aarch64":
+ return "0x33";
+ default:
+ return "0x3d";
+ }
+ }
+
+ Assert.equal(
+ annotations.StackTraces.crash_info.address,
+ chroot_syscall_number(),
+ "The address corresponds to the chroot() syscall number"
+ );
+ }
+ );
+ });
+}