--- id: "bug-1869" status: "fixed" status_updated: "2026-09-26" status_note: "5df33e69: xcecd_open_owned_file()/xcecd_owned_file_exists() (xcecd_tmpfile.h) for the worker log, xcecd_worker.log and restart flag; fchmod instead of chmod(path)." component: "worker" severity: "security" timestamp: "2026-09-26T07:55:23Z" last_seen: "2026-09-26T07:55:23Z" occurrences: 1 files: ["src/worker/src/process_worker_manager.c", "src/worker/src/xcecd.c"] tags: ["security", "worker", "symlink", "tmp"] related: ["bug-1868"] fix_commits: ["5df33e69"] legacy: true gitea_issue: 289 gitea_synced_status: "fixed" gitea_synced_hash: "a2de8eb03d0d" --- # bug-1869: Other root-owned opens of fixed /tmp names in the worker daemon follow symlinks… ## Description Other root-owned opens of fixed /tmp names in the worker daemon follow symlinks: process_worker_manager.c opens /tmp/xcecd_worker.log O_WRONLY|O_CREAT|O_APPEND (xcecd_worker's stdout/stderr appended through a planted symlink into any file), and xcecd_prepare_restart() (xcecd.c) opens /tmp/.xcecd.restarting O_CREAT|O_WRONLY (creates an empty root-owned file at a dangling symlink's target) ## Environment _Not recorded (migrated from buglog.json)._ ## Reproduction _Not recorded (migrated from buglog.json)._ ## Root cause Same class as bug-1868: fixed, predictable names in world-writable /tmp opened by root without O_NOFOLLOW/O_EXCL; only the host's fs.protected_symlinks sysctl mitigates. Found while fixing bug-1868; left out of that fix's scope. ## Fix _Not recorded (migrated from buglog.json)._ ## Verification _Not recorded (migrated from buglog.json)._ ## References - Related: bug-1868 - Gitea: #289