]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
virt: drop /proc/1/sched hack
authorLennart Poettering <lennart@poettering.net>
Wed, 9 Dec 2020 15:16:21 +0000 (16:16 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 9 Dec 2020 20:07:46 +0000 (21:07 +0100)
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

index 7d78a402b33bdae7c8dce168b609b31397165c1e..33d7106c0ea2a36e22bf801e32c1f6ce754d3a3a 100644 (file)
@@ -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;