From 5e3effb1f3327d531c8b9f45153ccec4313e4f6f Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 9 Dec 2020 16:16:21 +0100 Subject: [PATCH] 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 --- src/basic/virt.c | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/src/basic/virt.c b/src/basic/virt.c index 7d78a402b3..33d7106c0e 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;