From: Christian Brauner Date: Thu, 9 Jan 2020 11:25:30 +0000 (+0100) Subject: start: handle kernel header and kernel incompatability X-Git-Tag: lxc-4.0.0~62^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c718fac1855da04d221bf7055c981efeb6a323bc;p=thirdparty%2Flxc.git 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 --- 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 {