From: Michal Sekletar Date: Wed, 30 Nov 2022 17:01:01 +0000 (+0100) Subject: basic: add fallback in chase_symlinks_and_opendir() for cases when /proc is not mounted X-Git-Tag: v253-rc1~384 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3e22dfc2352bb5c4f058e23a82f424655b599b18;p=thirdparty%2Fsystemd.git basic: add fallback in chase_symlinks_and_opendir() for cases when /proc is not mounted https://bugzilla.redhat.com/show_bug.cgi?id=2136916 --- 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);