summaryrefslogtreecommitdiffstats
path: root/toolkit/crashreporter/test/browser/browser_sandbox_crash.js
blob: 4cd3d782e57129523b42a056fcc49beaf8b5435d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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"
        );
      }
    );
  });
}