diff --git a/src/basic/chase-symlinks.c b/src/basic/chase-symlinks.c index 0bb07000bad..118a6ee68f8 100644 --- a/src/basic/chase-symlinks.c +++ b/src/basic/chase-symlinks.c @@ -552,14 +552,22 @@ int chase_symlinks_and_opendir( return 0; } - r = chase_symlinks(path, root, chase_flags, ret_path ? &p : NULL, &path_fd); + r = chase_symlinks(path, root, chase_flags, &p, &path_fd); if (r < 0) return r; assert(path_fd >= 0); d = opendir(FORMAT_PROC_FD_PATH(path_fd)); - if (!d) - return -errno; + if (!d) { + /* Hmm, we have the fd already but we got ENOENT, most likely /proc is not mounted. + * Let's try opendir() again on the full path. */ + if (errno == ENOENT) { + d = opendir(p); + if (!d) + return -errno; + } else + return -errno; + } if (ret_path) *ret_path = TAKE_PTR(p);