From: Lennart Poettering Date: Wed, 9 Dec 2020 15:16:21 +0000 (+0100) Subject: virt: drop /proc/1/sched hack X-Git-Tag: v248-rc1~548 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5e3effb1f3327d531c8b9f45153ccec4313e4f6f;p=thirdparty%2Fsystemd.git virt: drop /proc/1/sched hack On really old kernels (< 4.14+) a bug in /proc/1/sched handling in the kernel could be used to determine whether we are running in a PID namespace. This hasn't worked for a long time, and there's little point in making things work on old kernels we can't make work on current kernels, hence let's drop that old cruft. See: #8153 --- diff --git a/src/basic/virt.c b/src/basic/virt.c index 7d78a402b33..33d7106c0ea 100644 --- a/src/basic/virt.c +++ b/src/basic/virt.c @@ -517,7 +517,7 @@ int detect_container(void) { */ e = getenv("container"); if (!e) - goto check_sched; + goto none; if (isempty(e)) { r = VIRTUALIZATION_NONE; goto finish; @@ -545,24 +545,7 @@ int detect_container(void) { if (r < 0) /* This only works if we have CAP_SYS_PTRACE, hence let's better ignore failures here */ log_debug_errno(r, "Failed to read $container of PID 1, ignoring: %m"); - /* Interestingly /proc/1/sched actually shows the host's PID for what we see as PID 1. If the PID - * shown there is not 1, we know we are in a PID namespace and hence a container. */ - check_sched: - r = read_one_line_file("/proc/1/sched", &m); - if (r >= 0) { - const char *t; - - t = strrchr(m, '('); - if (!t) - return -EIO; - - if (!startswith(t, "(1,")) { - r = VIRTUALIZATION_CONTAINER_OTHER; - goto finish; - } - } else if (r != -ENOENT) - return r; - +none: /* If that didn't work, give up, assume no container manager. */ r = VIRTUALIZATION_NONE; goto finish;