mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-25 03:45:46 -06:00
89bb601b91
The Mantis lane and the Telegram user driver reached for /proc to enforce media containment and to prove a pid was still alive. Off Linux those paths do not exist, so the containment check compared a literal "/proc/self/fd/N" string against the output root and refused every file, while both liveness probes silently reported "gone": the lane stole a held harness lock and the driver deleted the observer pid file without ever signalling the process. Containment now uses each runtime's strongest portable construct. Python descends the media path one component at a time from an open directory descriptor (O_DIRECTORY|O_NOFOLLOW, dir_fd), which is race-free and also covers the intermediate directories the old leaf-only O_NOFOLLOW did not. Node has no openat(2), so publicRelativePath re-walks the resolved components after the descriptor is open and refuses any that became a symlink. Liveness moves to process.kill(pid, 0) and to ps state/args, which keeps the pid-reuse and zombie handling the /proc reads provided. The compound-command approval binding test asserted an operand count that only held where the host interpreters live in a root-owned prefix; a Homebrew python3 is writable, so it correctly binds as a third executable operand. Assert the script operands by path instead.