From: Lennart Poettering Date: Thu, 31 Mar 2022 11:28:18 +0000 (+0200) Subject: virt: use read_virtual_file() for reading /proc/self/setgroups X-Git-Tag: v251-rc2~235^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F22923%2Fhead;p=thirdparty%2Fsystemd.git virt: use read_virtual_file() for reading /proc/self/setgroups --- diff --git a/src/basic/virt.c b/src/basic/virt.c index 3c210f6ab3f..8cea4367a07 100644 --- a/src/basic/virt.c +++ b/src/basic/virt.c @@ -836,19 +836,18 @@ int running_in_userns(void) { if (r != 0) return r; - /* "setgroups" file was added in kernel v3.18-rc6-15-g9cc46516dd. It is also - * possible to compile a kernel without CONFIG_USER_NS, in which case "setgroups" - * also does not exist. We cannot distinguish those two cases, so assume that - * we're running on a stripped-down recent kernel, rather than on an old one, - * and if the file is not found, return false. - */ - r = read_one_line_file("/proc/self/setgroups", &line); + /* "setgroups" file was added in kernel v3.18-rc6-15-g9cc46516dd. It is also possible to compile a + * kernel without CONFIG_USER_NS, in which case "setgroups" also does not exist. We cannot + * distinguish those two cases, so assume that we're running on a stripped-down recent kernel, rather + * than on an old one, and if the file is not found, return false. */ + r = read_virtual_file("/proc/self/setgroups", SIZE_MAX, &line, NULL); if (r < 0) { log_debug_errno(r, "/proc/self/setgroups: %m"); return r == -ENOENT ? false : r; } - truncate_nl(line); + strstrip(line); /* remove trailing newline */ + r = streq(line, "deny"); /* See user_namespaces(7) for a description of this "setgroups" contents. */ log_debug("/proc/self/setgroups contains \"%s\", %s user namespace", line, r ? "in" : "not in");