X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Futil.c;h=43948ccbd8970c5076d2f00659d26f2d449fa4ce;hp=15c7f4d3257459b0865ed76b9ce2f66a51dd5dad;hb=3d9a412243035beeaaf3465a62065444a5adf21c;hpb=d29b05a4619c000918cbb9f1b9661bc53659c0b2 diff --git a/src/shared/util.c b/src/shared/util.c index 15c7f4d32..43948ccbd 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -56,6 +56,7 @@ #include #include #include +#include #include "macro.h" #include "util.h" @@ -4319,8 +4320,10 @@ bool tty_is_vc_resolve(const char *tty) { if (startswith(tty, "/dev/")) tty += 5; - /* Resolve where /dev/console is pointing to */ - if (streq(tty, "console")) + /* Resolve where /dev/console is pointing to, if /sys is + * actually ours (i.e. not read-only-mounted which is a sign + * for container setups) */ + if (streq(tty, "console") && path_is_read_only_fs("/sys") <= 0) if (read_one_line_file("/sys/class/tty/console/active", &active) >= 0) { /* If multiple log outputs are configured the * last one is what /dev/console points to */ @@ -6145,3 +6148,14 @@ int setrlimit_closest(int resource, const struct rlimit *rlim) { return 0; } + +int path_is_read_only_fs(const char *path) { + struct statvfs st; + + assert(path); + + if (statvfs(path, &st) < 0) + return -errno; + + return !!(st.f_flag & ST_RDONLY); +}