Move cgroup dbus requests to the child to avoid a race where a spawned child

that quickly forks will have only the parent process moved to the newly created
cgroup. From Daniel De Graaf, GitHub issue 4435.
This commit is contained in:
Nicholas Marriott
2025-04-14 07:26:05 +01:00
parent ac2779f4d8
commit f0a85d0469
3 changed files with 114 additions and 22 deletions

21
spawn.c
View File

@ -382,20 +382,19 @@ spawn_pane(struct spawn_context *sc, char **cause)
/* In the parent process, everything is done now. */
if (new_wp->pid != 0) {
#if defined(HAVE_SYSTEMD) && defined(ENABLE_CGROUPS)
/*
* Move the child process into a new cgroup for systemd-oomd
* isolation.
*/
if (systemd_move_pid_to_new_cgroup(new_wp->pid, cause) < 0) {
log_debug("%s: moving pane to new cgroup failed: %s",
__func__, *cause);
free (*cause);
}
#endif
goto complete;
}
#if defined(HAVE_SYSTEMD) && defined(ENABLE_CGROUPS)
/*
* Move the child process into a new cgroup for systemd-oomd isolation.
*/
if (systemd_move_to_new_cgroup(cause) < 0) {
log_debug("%s: moving pane to new cgroup failed: %s",
__func__, *cause);
free (*cause);
}
#endif
/*
* Child process. Change to the working directory or home if that
* fails.