From 0150fb30cf1f46fc2bfd5e9ef0d6185e6a746918 Mon Sep 17 00:00:00 2001 From: not-matthias Date: Mon, 1 Jun 2026 17:21:00 +0200 Subject: [PATCH] fix(mac): don't SIGKILL Apple toolchain binaries under `samply record` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit samply injects DYLD_INSERT_LIBRARIES + SAMPLY_BOOTSTRAP_SERVER_NAME into the whole descendant tree. Each descendant that loads samply-mac-preload runs a dyld initializer that sends its mach task-self port to samply so it can be profiled. For an Apple *platform binary* (CS_PLATFORM_BINARY) the task-self port is immovable. Transferring an immovable port to another process raises a fatal EXC_GUARD / GUARD_TYPE_MACH_PORT (ILLEGAL_MOVE) and the kernel SIGKILLs the process — inside the preload's mach_msg, before main(). This is not specific to dsymutil: the entire Xcode toolchain is affected (clang, ld, nm, strip, lipo, dsymutil, ... all confirmed killed by signal 9; clang++, swift(c), ar, ranlib, otool, dwarfdump, objdump, llvm-* share the same CS_PLATFORM_BINARY + non-restricted property). dsymutil was just the binary the original report hit (Go's linker invokes it). Any compile/link step run under `samply record` breaks as soon as a build tool invokes a toolchain binary by absolute path (the norm); going through the restricted /usr/bin shims hides it because they strip DYLD_*. Symptom: "running dsymutil failed: signal: killed". Confirmed via the crash report (EXC_GUARD "ILLEGAL_MOVE on mach port 515", port 515 == mach_task_self()) and by probing csops(2): the only distinguishing bit between a killed platform binary and a surviving locally-built binary is CS_PLATFORM_BINARY. Fix: in the preload, detect platform binaries via csops(getpid(), CS_OPS_STATUS) and skip the task handoff for them. samply cannot profile a platform binary through this mechanism anyway (its task port is protected), so nothing is lost; the process runs normally instead of being killed. Descendant profiling of all normal binaries is unchanged. Includes a regression test (samply/tests/dsymutil_sigkill.rs). Preload rebuilt for x86_64/arm64/arm64e. Co-Authored-By: Claude Opus 4.8 --- .../binaries/libsamply_mac_preload.dylib | Bin 150992 -> 151024 bytes .../libsamply_mac_preload_arm64.dylib | Bin 52928 -> 52880 bytes .../libsamply_mac_preload_arm64e.dylib | Bin 52688 -> 52720 bytes .../libsamply_mac_preload_x86_64.dylib | Bin 15512 -> 15480 bytes samply-mac-preload/src/lib.rs | 45 +++++++ .../resources/libsamply_mac_preload.dylib.gz | Bin 15951 -> 15209 bytes samply/tests/dsymutil_sigkill.rs | 122 ++++++++++++++++++ 7 files changed, 167 insertions(+) create mode 100644 samply/tests/dsymutil_sigkill.rs diff --git a/samply-mac-preload/binaries/libsamply_mac_preload.dylib b/samply-mac-preload/binaries/libsamply_mac_preload.dylib index 0c1fc39461f46599186d94514c48e42658b23c9d..a0e0f7168e09281fb2b193b3b94a50bde0e3a38a 100755 GIT binary patch delta 12521 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 KGgvv}?f(Z{*ao}+ delta 12545 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 OqIGq;di=T4b^i%F$MY%x diff --git a/samply-mac-preload/binaries/libsamply_mac_preload_arm64.dylib b/samply-mac-preload/binaries/libsamply_mac_preload_arm64.dylib index efa29040470dea9fe080f5d77e8b9442c654011a..c7fa6bce7fac1a05ae23de793a8cedadeb2d99e4 100755 GIT binary patch delta 4194 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 delta 4493 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 CZP5t; diff --git a/samply-mac-preload/binaries/libsamply_mac_preload_arm64e.dylib b/samply-mac-preload/binaries/libsamply_mac_preload_arm64e.dylib index 500af622c5aaf0714675a2fd6113e24ceb2fb4fb..fa8bb2051109f27767225b576785f7d8cdd19125 100755 GIT binary patch delta 3946 zcmZ`+3s{s@8vf4z&)_g17a48?!hn}R4H*RiGZ{e?yio(2-JX8NVRR;t8D>Vq&6ZK4 z+|A1I_-tuCt=iVYv~8}~KCrnmCX@uKG=bZH2PqccjHOTGIFqr>ARU?9>Q?)|E8%BlnjD5MEi zCD4UraqJzkc(JU@Fi)dHl4vv0#XglNX-}1nL`)Cz@pO>5$pLEPl8A;jakHZj7$g;y zta*Ueb1@`?UL=XFmpC;cSLhI*RML#gETSAuRG#}Qm&NItYqnRr92QIUD3i6(yqd`|Qv z1?(*a*bSM6_VYY=|3ece&sH4bVJ{j@rIyKSxn6>X$GOLNG};`!3zxdAv3uOp6&@r zPg{&uSjU`i0jrH#=lK|4I%@IYnId|mAA~G#oP%0@sPX=AK-SXul2B$qtOd~Q+aBY? zIvj@lnO-IHNZ{yqJoq|xB(^cHhh8MT+tBMg=7&H|Mxg4wet@InBSzr5KMr!;KmHVl z@X)xoZzzz{%fVi@sRKLiX=9r?&&T>cM42BGn~rnpDX3pE5~z$Fu6hqohUPmAtVQ|) z*REqSo=}gG!vNnSuVTq&E*-(7M`E{sRNA{R_=nkxa_BIS+B_5-dhoR=or;Vyd|KhZULHo|ET}Er& zt4?bxv~8yMs8Y*1f!_# z4pbg6liqMNibpbpc#P>d(|&bwoCTSFtZ&~m@N!DlBaP1sR2!z9(>D@$rVm?o9{0NT z2IDoz$M{AbUfMEPUfgnhZBa|0n0V2rhE}Pk$CcdVE7n&JbiY~~LopCu#SBbpmd%vUoCh!kA;R=R7uK~E3G z%_5)Bcj6vTI0wv}b-oBYzXUsfviSrSn&xXZao?rU*EH$e!L-)*G%u0HV3DKICdgw> zqkJ}YKPbmf_^2E&^eA7Y^cW|N!T7-+T^k7eWdA?pG0qh|2i|PXFchs$ZM__yMy80u zbzD&RuVgh%Nla?JGx7DA^su&{h8Uhzhx#@6F~MPIJ*c(JXg#d`Hc>Yi!6Yg`2W&QM zm9hLnkE%9mC+kqbigXMKUod~|?N#_R)go<0!ZS$@Ae}-QM4Cx}tU-DT=}n|_NEeVU zA>BZlL;vQVp)|Yf4%dqx`AH)>MJqviWd*C&A)4&ue% z5jTF~Gi#)^qGX6|nzrx;B9Dk4^TSe+sudR-aSSUw5WV zxl7I}Xm&qGeVuoa>6CQEkXbak>o$p3&O(hD)YO%;Ofat5yvAMZvgzF$jCVV7>PZ_70c7-WsRC|AfSu5ddSxa~|33^2}&esWqH8(jNYzVziY(`ko4nO^VGO<`e+ zUHL^dci&s#Si9Q3OrYCNYZmDj2!gH7ZE-s6E{h=D#&MTc7EbISLZ3U<0iE$ydIHnD z+qD39cyqwU{Ea5FRj@hC;{FO&BPwBKEStCRz8?5 zloaKQekMApRQGli-Pc{D^y@eX$N%}vq#-@C42Hv#%3BIvS$p*h&rZj*n3vj~j(q2p z`!<|SseHO=OFK~-KLk1efbD=^cZxS z-tzlaf`?hsgZ_e delta 4123 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 PTB+$?smz?*=UwxE>Ft`} diff --git a/samply-mac-preload/binaries/libsamply_mac_preload_x86_64.dylib b/samply-mac-preload/binaries/libsamply_mac_preload_x86_64.dylib index 646f38df80fab34198701e3d0ce71d1fa984375e..7397b9aa502fda2720d77559bf9b38cd58cadf5a 100755 GIT binary patch delta 4419 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 diff --git a/samply-mac-preload/src/lib.rs b/samply-mac-preload/src/lib.rs index 894dbe9f..b74385d9 100644 --- a/samply-mac-preload/src/lib.rs +++ b/samply-mac-preload/src/lib.rs @@ -35,7 +35,52 @@ static __SETUP_SAMPLY_CONNECTION: unsafe extern "C" fn() = { __load_samply_lib }; +/// Returns true if the current process is an Apple "platform binary" +/// (`CS_PLATFORM_BINARY`). Such processes are given an *immovable* task-self +/// mach port by the kernel: any attempt to transfer that port to another +/// process — which is exactly what samply's task handoff below does — raises a +/// fatal `EXC_GUARD` (`ILLEGAL_MOVE`) and the kernel SIGKILLs the process. +/// +/// This is how `samply record -- ` would otherwise kill `dsymutil` (and +/// other Apple toolchain binaries) that a build invokes: they inherit samply's +/// `DYLD_INSERT_LIBRARIES`, load this preload, and crash in the handoff. +/// +/// samply cannot profile platform binaries through this mechanism regardless +/// (their task port is protected), so detecting this case and skipping the +/// handoff loses nothing and keeps the process alive. +fn is_platform_binary() -> bool { + // `csops(getpid(), CS_OPS_STATUS, &flags, sizeof(flags))` reports the + // process's code-signing status flags. It works on the calling process + // without any privilege. CS_PLATFORM_BINARY == 0x04000000. + const CS_OPS_STATUS: u32 = 0; + const CS_PLATFORM_BINARY: u32 = 0x0400_0000; + extern "C" { + fn csops( + pid: libc::pid_t, + ops: u32, + useraddr: *mut libc::c_void, + usersize: libc::size_t, + ) -> libc::c_int; + } + let mut flags: u32 = 0; + let r = unsafe { + csops( + libc::getpid(), + CS_OPS_STATUS, + &mut flags as *mut u32 as *mut libc::c_void, + core::mem::size_of::() as libc::size_t, + ) + }; + r == 0 && (flags & CS_PLATFORM_BINARY) != 0 +} + fn set_up_samply_connection() -> Option<()> { + // Don't hand our task port to samply if we're a platform binary: the port + // is immovable and sending it would get us SIGKILLed. See + // `is_platform_binary`. + if is_platform_binary() { + return None; + } let (tx0, rx0) = channel().ok()?; // Safety: // - b"SAMPLY_BOOTSTRAP_SERVER_NAME\0" is a nul-terminated c string diff --git a/samply/resources/libsamply_mac_preload.dylib.gz b/samply/resources/libsamply_mac_preload.dylib.gz index e80855880f10a8bffbf575ec87c6b2c5703d164d..ec139f14cb8b35101132751d01ff8a10a58d5b2d 100644 GIT binary patch literal 15209 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 DN^|*x literal 15951 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 R9>0g6#Mo4}%_u@c{a;Y)uVerK diff --git a/samply/tests/dsymutil_sigkill.rs b/samply/tests/dsymutil_sigkill.rs new file mode 100644 index 00000000..c8a5b43a --- /dev/null +++ b/samply/tests/dsymutil_sigkill.rs @@ -0,0 +1,122 @@ +//! Regression test for: `samply record` SIGKILLs `dsymutil`. +//! +//! samply injects `DYLD_INSERT_LIBRARIES` (+ `SAMPLY_BOOTSTRAP_SERVER_NAME`) into +//! the *entire* descendant process tree it launches. Any descendant that loads +//! the preload hands its mach task port to samply and lets it "control us +//! completely" (see `samply-mac-preload`). For `dsymutil` this takeover ends in a +//! deterministic `SIGKILL`, which breaks builds run under `samply record` on +//! macOS (the linker invokes `dsymutil` and reports `running dsymutil failed: +//! signal: killed`). +//! +//! This test launches, under the built `samply` binary, a small locally-built +//! "spawner" that execs `dsymutil` on a Mach-O with DWARF, and asserts that +//! `dsymutil` is NOT killed (the desired behaviour). +//! +//! macOS-only (`cfg(target_os = "macos")`), so it compiles out elsewhere. It +//! needs Xcode's `dsymutil` and a working `cc`, both present on `macos-latest` +//! CI runners. Launch-mode profiling does not need `task_for_pid` entitlements +//! (the child volunteers its task port), so no `samply setup` is required. +//! +//! Run with: +//! cargo test -p samply --test dsymutil_sigkill -- --nocapture +#![cfg(target_os = "macos")] + +use std::path::Path; +use std::process::Command; + +fn cc(args: &[&str]) { + let status = Command::new("cc").args(args).status().expect("failed to run cc"); + assert!(status.success(), "cc {args:?} failed"); +} + +fn xcrun_dsymutil() -> String { + let out = Command::new("xcrun") + .args(["-f", "dsymutil"]) + .output() + .expect("failed to run xcrun"); + assert!(out.status.success(), "xcrun -f dsymutil failed"); + String::from_utf8(out.stdout).unwrap().trim().to_string() +} + +#[test] +fn dsymutil_is_not_killed_under_samply() { + let samply = env!("CARGO_BIN_EXE_samply"); + let dsymutil = xcrun_dsymutil(); + + let tmp = std::env::temp_dir().join(format!("samply_dsym_repro_{}", std::process::id())); + std::fs::create_dir_all(&tmp).unwrap(); + + // A Mach-O with enough DWARF that dsymutil does real work. + let src = tmp.join("big.cpp"); + { + use std::fmt::Write as _; + let mut s = String::from("#include \n"); + for i in 0..1200 { + writeln!(s, "template struct S{i} {{ int v[N%7+1]; int f(int x){{return x*{i}+N;}} }};").unwrap(); + writeln!(s, "int g{i}(int x){{ S{i}<{}> s; return s.f(x)+{i}; }}", i % 9 + 1).unwrap(); + } + s.push_str("int main(){int t=0;"); + for i in 0..1200 { + write!(s, "t+=g{i}(t);").unwrap(); + } + s.push_str("printf(\"%d\\n\",t);return 0;}\n"); + std::fs::write(&src, s).unwrap(); + } + let macho = tmp.join("bigcpp"); + cc(&["-g", "-O0", "-o", macho.to_str().unwrap(), src.to_str().unwrap()]); + + // A locally-built (non-restricted) parent that execs dsymutil and reports + // how the child died via its own exit code: 0 = clean, 1 = killed by signal. + let spawner_src = tmp.join("spawner.c"); + std::fs::write( + &spawner_src, + r#" +#include +#include +#include +#include +int main(int argc, char** argv){ + pid_t pid = fork(); + if(pid==0){ execl(argv[1],"dsymutil","-f",argv[2],"-o",argv[3],(char*)0); _exit(127); } + int st=0; waitpid(pid,&st,0); + if(WIFSIGNALED(st)){ fprintf(stderr,"dsymutil killed by signal %d\n", WTERMSIG(st)); return 1; } + fprintf(stderr,"dsymutil exited code %d\n", WEXITSTATUS(st)); return 0; +} +"#, + ) + .unwrap(); + let spawner = tmp.join("spawner"); + cc(&["-O0", "-o", spawner.to_str().unwrap(), spawner_src.to_str().unwrap()]); + + let out_dwarf = tmp.join("out.dwarf"); + let profile = tmp.join("profile.json.gz"); + + // samply record --save-only -o -- + let status = Command::new(samply) + .args(["record", "--save-only", "-o"]) + .arg(&profile) + .arg("--") + .arg(&spawner) + .arg(&dsymutil) + .arg(&macho) + .arg(&out_dwarf) + .status() + .expect("failed to run samply"); + + // The spawner exits 0 iff dsymutil completed normally. Under the bug it exits + // 1 because dsymutil was SIGKILLed by samply. + let killed = !status.success(); + let produced_output = Path::new(&out_dwarf).exists(); + + // Clean up only after we've inspected the results (out.dwarf lives in `tmp`). + let _ = std::fs::remove_dir_all(&tmp); + + assert!( + !killed, + "dsymutil was killed when run under `samply record` \ + (spawner exit = {:?}). samply must not SIGKILL build subprocesses it \ + injects into.", + status.code() + ); + assert!(produced_output, "dsymutil did not produce its output"); +}