]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
basic: add fallback in chase_symlinks_and_opendir() for cases when /proc is not mounted
authorMichal Sekletar <msekleta@redhat.com>
Wed, 30 Nov 2022 17:01:01 +0000 (18:01 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 2 Dec 2022 16:45:33 +0000 (17:45 +0100)
https://bugzilla.redhat.com/show_bug.cgi?id=2136916

src/basic/chase-symlinks.c

index 0bb07000bad8922b10e83a4793cb6bd059997df0..118a6ee68f8e2e0521a983813d2f471e4b8d4543 100644 (file)
@@ -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);