summaryrefslogtreecommitdiffstats
path: root/src/basic/virt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/basic/virt.c')
-rw-r--r--src/basic/virt.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/basic/virt.c b/src/basic/virt.c
index 1ba8d36dba..0d6fcaee56 100644
--- a/src/basic/virt.c
+++ b/src/basic/virt.c
@@ -799,19 +799,16 @@ int running_in_chroot(void) {
if (getenv_bool("SYSTEMD_IGNORE_CHROOT") > 0)
return 0;
- r = inode_same("/proc/1/root", "/", 0);
- if (r == -ENOENT) {
- r = proc_mounted();
- if (r == 0) {
- if (getpid_cached() == 1)
- return false; /* We will mount /proc, assuming we're not in a chroot. */
+ r = pidref_from_same_root_fs(&PIDREF_MAKE_FROM_PID(1), NULL);
+ if (r == -ENOSYS) {
+ if (getpid_cached() == 1)
+ return false; /* We will mount /proc, assuming we're not in a chroot. */
- log_debug("/proc is not mounted, assuming we're in a chroot.");
- return true;
- }
- if (r > 0) /* If we have fake /proc/, we can't do the check properly. */
- return -ENOSYS;
+ log_debug("/proc/ is not mounted, assuming we're in a chroot.");
+ return true;
}
+ if (r == -ESRCH) /* We must have a fake /proc/, we can't do the check properly. */
+ return -ENOSYS;
if (r < 0)
return r;