mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-06-06 05:41:59 +00:00
utils: fix lxc_set_death_signal()
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
parent
54b38b25b1
commit
c7f493aee0
@ -1068,7 +1068,7 @@ static int do_start(void *data)
|
|||||||
* exit before we set the pdeath signal leading to a unsupervized
|
* exit before we set the pdeath signal leading to a unsupervized
|
||||||
* container.
|
* container.
|
||||||
*/
|
*/
|
||||||
ret = lxc_set_death_signal(SIGKILL);
|
ret = lxc_set_death_signal(SIGKILL, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
SYSERROR("Failed to set PR_SET_PDEATHSIG to SIGKILL");
|
SYSERROR("Failed to set PR_SET_PDEATHSIG to SIGKILL");
|
||||||
goto out_warn_father;
|
goto out_warn_father;
|
||||||
@ -1146,7 +1146,7 @@ static int do_start(void *data)
|
|||||||
goto out_warn_father;
|
goto out_warn_father;
|
||||||
|
|
||||||
/* set{g,u}id() clears deathsignal */
|
/* set{g,u}id() clears deathsignal */
|
||||||
ret = lxc_set_death_signal(SIGKILL);
|
ret = lxc_set_death_signal(SIGKILL, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
SYSERROR("Failed to set PR_SET_PDEATHSIG to SIGKILL");
|
SYSERROR("Failed to set PR_SET_PDEATHSIG to SIGKILL");
|
||||||
goto out_warn_father;
|
goto out_warn_father;
|
||||||
@ -1388,7 +1388,7 @@ static int do_start(void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (handler->conf->monitor_signal_pdeath != SIGKILL) {
|
if (handler->conf->monitor_signal_pdeath != SIGKILL) {
|
||||||
ret = lxc_set_death_signal(handler->conf->monitor_signal_pdeath);
|
ret = lxc_set_death_signal(handler->conf->monitor_signal_pdeath, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
SYSERROR("Failed to set PR_SET_PDEATHSIG to %d",
|
SYSERROR("Failed to set PR_SET_PDEATHSIG to %d",
|
||||||
handler->conf->monitor_signal_pdeath);
|
handler->conf->monitor_signal_pdeath);
|
||||||
|
@ -1652,7 +1652,7 @@ uint64_t lxc_find_next_power2(uint64_t n)
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
int lxc_set_death_signal(int signal)
|
int lxc_set_death_signal(int signal, pid_t parent)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
pid_t ppid;
|
pid_t ppid;
|
||||||
@ -1662,11 +1662,8 @@ int lxc_set_death_signal(int signal)
|
|||||||
|
|
||||||
/* Check whether we have been orphaned. */
|
/* Check whether we have been orphaned. */
|
||||||
ppid = (pid_t)syscall(SYS_getppid);
|
ppid = (pid_t)syscall(SYS_getppid);
|
||||||
if (ppid == 1) {
|
if (ppid != parent) {
|
||||||
pid_t self;
|
ret = raise(SIGKILL);
|
||||||
|
|
||||||
self = lxc_raw_getpid();
|
|
||||||
ret = kill(self, SIGKILL);
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -434,7 +434,7 @@ static inline pid_t lxc_raw_gettid(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Set a signal the child process will receive after the parent has died. */
|
/* Set a signal the child process will receive after the parent has died. */
|
||||||
extern int lxc_set_death_signal(int signal);
|
extern int lxc_set_death_signal(int signal, pid_t parent);
|
||||||
extern int fd_cloexec(int fd, bool cloexec);
|
extern int fd_cloexec(int fd, bool cloexec);
|
||||||
extern int recursive_destroy(char *dirname);
|
extern int recursive_destroy(char *dirname);
|
||||||
extern int lxc_setup_keyring(void);
|
extern int lxc_setup_keyring(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user