From c718fac1855da04d221bf7055c981efeb6a323bc Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Thu, 9 Jan 2020 12:25:30 +0100 Subject: [PATCH] start: handle kernel header and kernel incompatability We might e.g. be compiled in a container with old kernel headers. In this scenario CLONE_PIDFD will work but pidfd_send_signal() might not be detected because __NR_pidfd_send_signal is not defined because the kernel headers don't match the kernel version. This explains and fixes test-suite hangs on Jenkins I've recently debugged. Signed-off-by: Christian Brauner --- src/lxc/start.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/lxc/start.c b/src/lxc/start.c index f085aa60d..9ca85911c 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -1091,11 +1091,13 @@ void lxc_abort(const char *name, struct lxc_handler *handler) lxc_set_state(name, handler, ABORTING); - if (handler->pidfd >= 0) + if (handler->pidfd >= 0) { ret = lxc_raw_pidfd_send_signal(handler->pidfd, SIGKILL, NULL, 0); - else if (handler->pid > 0) - ret = kill(handler->pid, SIGKILL); - if (ret < 0) + if (ret) + SYSWARN("Failed to send SIGKILL via pidfd %d for process %d", handler->pidfd, handler->pid); + } + + if (ret && (errno != ESRCH) && kill(handler->pid, SIGKILL)) SYSERROR("Failed to send SIGKILL to %d", handler->pid); do { -- 2.39.5