Following up with precise forensic data to assist with diagnostics.

To clarify the environment parameters: this is running as a native arm64 binary 
on an arm64 host (no Rosetta/QEMU translation layer in play). Additionally, the 
crash triggers identically even when executed with `--no-sandbox`, 
`--privileged`, and `seccomp=unconfined`, ruling out standard runtime sandbox 
boundary restrictions.

Attached/Belowis the verbose crash log / gdb backtrace showing exactly where 
the SIGTRAP fires during execution:

CRASH FORENSICS — chromium 150.0.7871.46 (trixie-security) under Docker Desktop 
on macOS/arm64
Prepared 2026-07-06 · supplement to the Debian bug report (chromium, severity: 
important)

================================================================================
1. SUMMARY
================================================================================
chromium 150.0.7871.46-1~deb13u1 (from trixie-security) crashes on launch with
SIGTRAP (shell exit code 133 = 128+5) when run headless inside a linux/arm64
container under Docker Desktop for Mac. The fatal signal is received by the
MAIN BROWSER PROCESS (gdb Thread 1), not a sandboxed child, late in startup —
after the GPU process, storage service, and network service have all spawned
successfully. On aarch64 release builds a SIGTRAP at a code address is the
signature of Chromium's IMMEDIATE_CRASH() macro (a compiled-in brk instruction
emitted for a failed internal CHECK), so this looks like a release-build CHECK
failure specific to this environment, not memory corruption.

chromium 147.0.7727.137-1~deb13u1 (plain trixie) works flawlessly in the
IDENTICAL container. So does Chromium 148 (Playwright's build). The regression
is specific to the 147 -> 150 jump as packaged for arm64.

================================================================================
2. ENVIRONMENT
================================================================================
Host:            macOS 26.5.1 (build 25F80), Apple Silicon (arm64)
Docker:          Docker Desktop, engine 29.6.1 (linux/arm64)
VM kernel:       6.12.76-linuxkit #1 SMP Thu Jun 18 21:12:39 UTC 2026 aarch64
Page size:       4096 (rules out the known 16K-page aarch64 chromium bugs,
                 e.g. https://issues.chromium.org/issues/40257452)
Container:       pristine debian:trixie (docker.io library image), nothing
                 installed except chromium + deps via apt
Memory/CPU:      7.9 GB / 12 cores available to the VM (not resource-starved)
Architecture:    native arm64 end to end — NO Rosetta/QEMU instruction
                 translation involved

================================================================================
3. RESULT MATRIX (all in identical pristine debian:trixie containers)
================================================================================
Command under test:
  chromium --headless=new --no-sandbox --disable-gpu --dump-dom about:blank

| build                                   | source            | result        |
|-----------------------------------------|-------------------|---------------|
| 147.0.7727.137-1~deb13u1                | trixie (plain)    | exit 0, DOM OK|
| 150.0.7871.46-1~deb13u1                 | trixie-security   | exit 133      |
| 148.0.7778.0 (Playwright chromium-1223) | playwright.dev    | exit 0, DOM OK|

Isolation variants tested against 150 — ALL crash identically (exit 133):
  - default Docker seccomp profile
  - --security-opt seccomp=unconfined
  - --privileged
  - flag combinations: --disable-dev-shm-usage, --disable-crashpad,
    --no-zygote, --single-process (individually and combined)

The seccomp/privileged results argue AGAINST a sandbox-validation or
syscall-filtering mechanism: relaxing all confinement changes nothing.

================================================================================
4. VERBOSE STDERR — TAIL BEFORE DEATH
================================================================================
(chromium --headless=new --no-sandbox --disable-gpu --enable-logging=stderr
 --v=1 --dump-dom about:blank ; last lines, PIDs from the recorded run)

[2567:2567:...] WARNING:sandbox/policy/linux/sandbox_linux.cc:405] 
InitializeSandbox() called with multiple threads in process gpu-process.
[2526:2553:...] ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not 
parse server address: Unknown address type ...
[2526:2526:...] 
VERBOSE1:components/proxy_config/pref_proxy_config_tracker_impl.cc:462] set 
chrome proxy config service ...
[2526:2526:...] 
VERBOSE1:components/signin/core/browser/account_reconcilor.cc:254] 
AccountReconcilor::RegisterWithIdentityManager
[0706/131945.241897:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145]
 open /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq: No such file or 
directory (2)
[0706/131945.241954:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145]
 open /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq: No such file or 
directory (2)
exit: 133

Notes:
  - No FATAL log line is emitted before the trap.
  - The crashpad cpufreq errors are the crash HANDLER annotating the already-
    in-flight crash (linuxkit exposes no cpufreq sysfs); they are a symptom
    marker, not the cause.
  - The dbus errors are environmental noise: the WORKING 147 and 148 runs
    print the same dbus errors and render fine.
  - Startup gets far: GPU process, storage service, network service, disk
    cache, and profile init all complete before the trap.

================================================================================
5. GDB — FATAL SIGNAL CAPTURE (default multi-process mode)
================================================================================
gdb -q -batch -ex "handle SIGTRAP stop" -ex run -ex bt \
  --args /usr/lib/chromium/chromium --headless=new --no-sandbox --disable-gpu 
--dump-dom about:blank

Thread 1 "chromium" received signal SIGTRAP, Trace/breakpoint trap.
0x0000aaaac831bb9c in ?? ()
#0  0x0000aaaac831bb9c in ?? ()
#1  0x0000002c007029b8 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

Notes:
  - The trap lands on THREAD 1 OF THE BROWSER PROCESS (not a renderer/child).
  - Frame #0 is inside the main chromium text segment (0xaaaa... is the
    executable's mapping base on this kernel); the binary is stripped, so no
    symbol names without chromium-dbgsym. Happy to re-run with dbgsym from
    debian-debug on request for a named backtrace.
  - Frame #1's address (0x2c007029b8) sits outside normal library mappings,
    consistent with a V8/JIT-region or pointer-compression-cage address —
    or simply with IMMEDIATE_CRASH() leaving no unwindable caller frame.
  - aarch64 IMMEDIATE_CRASH() compiles to a brk instruction, which raises
    exactly this: SIGTRAP with no core-dumping signal and no FATAL log.

================================================================================
6. REPRODUCTION (from any Apple Silicon Mac with Docker Desktop)
================================================================================
# broken build (trixie-security):
docker run --rm debian:trixie bash -c '
  apt-get update -qq && apt-get install -y -qq --no-install-recommends chromium
  chromium --version
  chromium --headless=new --no-sandbox --disable-gpu --dump-dom about:blank
  echo "exit: $?"'
# -> Chromium 150.0.7871.46 ... exit: 133, no DOM output

# control (plain trixie, same container recipe):
docker run --rm debian:trixie bash -c '
  apt-get update -qq && apt-get install -y -qq --no-install-recommends \
    chromium=147.0.7727.137-1~deb13u1 chromium-common=147.0.7727.137-1~deb13u1 \
    chromium-sandbox=147.0.7727.137-1~deb13u1
  chromium --version
  chromium --headless=new --no-sandbox --disable-gpu --dump-dom about:blank
  echo "exit: $?"'
# -> Chromium 147.0.7727.137 ... <html>...</html> exit: 0

================================================================================
7. WHAT THE EVIDENCE SUPPORTS (and what it rules out)
================================================================================
Supported:
  - A regression introduced between 147.0.7727.137 and 150.0.7871.46 as built
    for Debian arm64, manifesting as a release-build CHECK / IMMEDIATE_CRASH
    in the browser process under the linuxkit 6.12 VM kernel.
Ruled out by direct test:
  - Container/image configuration (pristine debian:trixie reproduces it)
  - seccomp filtering (unconfined crashes identically)
  - Privilege/capability restrictions (--privileged crashes identically)
  - 16K page size (this VM uses 4K pages)
  - dbus absence, /dev/shm size, crashpad, zygote, process model (all varied,
    no effect)
  - Instruction translation (native arm64 host and image; no Rosetta/QEMU)
Unknown (needs symbols or upstream knowledge):
  - The specific CHECK that fires. A dbgsym-resolved backtrace can be
    provided on request.

Workaround in production use: pin the test-bed browser to Playwright's
chromium distribution and treat apt chromium purely as a shared-library
donor. Bare-metal/native-Linux users appear unaffected.
CRASH FORENSICS — chromium 150.0.7871.46 (trixie-security) under Docker 
Desktop on macOS/arm64
Prepared 2026-07-06 · supplement to the Debian bug report (chromium, severity: 
important)

================================================================================
1. SUMMARY
================================================================================
chromium 150.0.7871.46-1~deb13u1 (from trixie-security) crashes on launch with
SIGTRAP (shell exit code 133 = 128+5) when run headless inside a linux/arm64
container under Docker Desktop for Mac. The fatal signal is received by the
MAIN BROWSER PROCESS (gdb Thread 1), not a sandboxed child, late in startup —
after the GPU process, storage service, and network service have all spawned
successfully. On aarch64 release builds a SIGTRAP at a code address is the
signature of Chromium's IMMEDIATE_CRASH() macro (a compiled-in brk instruction
emitted for a failed internal CHECK), so this looks like a release-build CHECK
failure specific to this environment, not memory corruption.

chromium 147.0.7727.137-1~deb13u1 (plain trixie) works flawlessly in the
IDENTICAL container. So does Chromium 148 (Playwright's build). The regression
is specific to the 147 -> 150 jump as packaged for arm64.

================================================================================
2. ENVIRONMENT
================================================================================
Host:            macOS 26.5.1 (build 25F80), Apple Silicon (arm64)
Docker:          Docker Desktop, engine 29.6.1 (linux/arm64)
VM kernel:       6.12.76-linuxkit #1 SMP Thu Jun 18 21:12:39 UTC 2026 aarch64
Page size:       4096 (rules out the known 16K-page aarch64 chromium bugs,
                 e.g. https://issues.chromium.org/issues/40257452)
Container:       pristine debian:trixie (docker.io library image), nothing
                 installed except chromium + deps via apt
Memory/CPU:      7.9 GB / 12 cores available to the VM (not resource-starved)
Architecture:    native arm64 end to end — NO Rosetta/QEMU instruction
                 translation involved

================================================================================
3. RESULT MATRIX (all in identical pristine debian:trixie containers)
================================================================================
Command under test:
  chromium --headless=new --no-sandbox --disable-gpu --dump-dom about:blank

| build                                   | source            | result        |
|-----------------------------------------|-------------------|---------------|
| 147.0.7727.137-1~deb13u1                | trixie (plain)    | exit 0, DOM OK|
| 150.0.7871.46-1~deb13u1                 | trixie-security   | exit 133      |
| 148.0.7778.0 (Playwright chromium-1223) | playwright.dev    | exit 0, DOM OK|

Isolation variants tested against 150 — ALL crash identically (exit 133):
  - default Docker seccomp profile
  - --security-opt seccomp=unconfined
  - --privileged
  - flag combinations: --disable-dev-shm-usage, --disable-crashpad,
    --no-zygote, --single-process (individually and combined)

The seccomp/privileged results argue AGAINST a sandbox-validation or
syscall-filtering mechanism: relaxing all confinement changes nothing.

================================================================================
4. VERBOSE STDERR — TAIL BEFORE DEATH
================================================================================
(chromium --headless=new --no-sandbox --disable-gpu --enable-logging=stderr
 --v=1 --dump-dom about:blank ; last lines, PIDs from the recorded run)

[2567:2567:...] WARNING:sandbox/policy/linux/sandbox_linux.cc:405] 
InitializeSandbox() called with multiple threads in process gpu-process.
[2526:2553:...] ERROR:dbus/bus.cc:405] Failed to connect to the bus: Could not 
parse server address: Unknown address type ...
[2526:2526:...] 
VERBOSE1:components/proxy_config/pref_proxy_config_tracker_impl.cc:462] set 
chrome proxy config service ...
[2526:2526:...] 
VERBOSE1:components/signin/core/browser/account_reconcilor.cc:254] 
AccountReconcilor::RegisterWithIdentityManager
[0706/131945.241897:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145]
 open /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq: No such file or 
directory (2)
[0706/131945.241954:ERROR:third_party/crashpad/crashpad/util/file/file_io_posix.cc:145]
 open /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq: No such file or 
directory (2)
exit: 133

Notes:
  - No FATAL log line is emitted before the trap.
  - The crashpad cpufreq errors are the crash HANDLER annotating the already-
    in-flight crash (linuxkit exposes no cpufreq sysfs); they are a symptom
    marker, not the cause.
  - The dbus errors are environmental noise: the WORKING 147 and 148 runs
    print the same dbus errors and render fine.
  - Startup gets far: GPU process, storage service, network service, disk
    cache, and profile init all complete before the trap.

================================================================================
5. GDB — FATAL SIGNAL CAPTURE (default multi-process mode)
================================================================================
gdb -q -batch -ex "handle SIGTRAP stop" -ex run -ex bt \
  --args /usr/lib/chromium/chromium --headless=new --no-sandbox --disable-gpu 
--dump-dom about:blank

Thread 1 "chromium" received signal SIGTRAP, Trace/breakpoint trap.
0x0000aaaac831bb9c in ?? ()
#0  0x0000aaaac831bb9c in ?? ()
#1  0x0000002c007029b8 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

Notes:
  - The trap lands on THREAD 1 OF THE BROWSER PROCESS (not a renderer/child).
  - Frame #0 is inside the main chromium text segment (0xaaaa... is the
    executable's mapping base on this kernel); the binary is stripped, so no
    symbol names without chromium-dbgsym. Happy to re-run with dbgsym from
    debian-debug on request for a named backtrace.
  - Frame #1's address (0x2c007029b8) sits outside normal library mappings,
    consistent with a V8/JIT-region or pointer-compression-cage address —
    or simply with IMMEDIATE_CRASH() leaving no unwindable caller frame.
  - aarch64 IMMEDIATE_CRASH() compiles to a brk instruction, which raises
    exactly this: SIGTRAP with no core-dumping signal and no FATAL log.

================================================================================
6. REPRODUCTION (from any Apple Silicon Mac with Docker Desktop)
================================================================================
# broken build (trixie-security):
docker run --rm debian:trixie bash -c '
  apt-get update -qq && apt-get install -y -qq --no-install-recommends chromium
  chromium --version
  chromium --headless=new --no-sandbox --disable-gpu --dump-dom about:blank
  echo "exit: $?"'
# -> Chromium 150.0.7871.46 ... exit: 133, no DOM output

# control (plain trixie, same container recipe):
docker run --rm debian:trixie bash -c '
  apt-get update -qq && apt-get install -y -qq --no-install-recommends \
    chromium=147.0.7727.137-1~deb13u1 chromium-common=147.0.7727.137-1~deb13u1 \
    chromium-sandbox=147.0.7727.137-1~deb13u1
  chromium --version
  chromium --headless=new --no-sandbox --disable-gpu --dump-dom about:blank
  echo "exit: $?"'
# -> Chromium 147.0.7727.137 ... <html>...</html> exit: 0

================================================================================
7. WHAT THE EVIDENCE SUPPORTS (and what it rules out)
================================================================================
Supported:
  - A regression introduced between 147.0.7727.137 and 150.0.7871.46 as built
    for Debian arm64, manifesting as a release-build CHECK / IMMEDIATE_CRASH
    in the browser process under the linuxkit 6.12 VM kernel.
Ruled out by direct test:
  - Container/image configuration (pristine debian:trixie reproduces it)
  - seccomp filtering (unconfined crashes identically)
  - Privilege/capability restrictions (--privileged crashes identically)
  - 16K page size (this VM uses 4K pages)
  - dbus absence, /dev/shm size, crashpad, zygote, process model (all varied,
    no effect)
  - Instruction translation (native arm64 host and image; no Rosetta/QEMU)
Unknown (needs symbols or upstream knowledge):
  - The specific CHECK that fires. A dbgsym-resolved backtrace can be
    provided on request.

Workaround in production use: pin the test-bed browser to Playwright's
chromium distribution and treat apt chromium purely as a shared-library
donor. Bare-metal/native-Linux users appear unaffected.

Reply via email to