From 3e22dfc2352bb5c4f058e23a82f424655b599b18 Mon Sep 17 00:00:00 2001 From: Michal Sekletar Date: Wed, 30 Nov 2022 18:01:01 +0100 Subject: [PATCH] basic: add fallback in chase_symlinks_and_opendir() for cases when /proc is not mounted https://bugzilla.redhat.com/show_bug.cgi?id=2136916 --- src/basic/chase-symlinks.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/basic/chase-symlinks.c b/src/basic/chase-symlinks.c index 0bb07000ba..118a6ee68f 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);