]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
switch-root: also check that mount IDs are the same, not just inodes 30332/head
authorLuca Boccassi <bluca@debian.org>
Tue, 5 Dec 2023 15:43:12 +0000 (15:43 +0000)
committerLuca Boccassi <bluca@debian.org>
Tue, 5 Dec 2023 17:20:27 +0000 (17:20 +0000)
If /run/nextroot/ has been set up, use it, even if the inodes are
the same. It could be a verity device that is reused, but with
different sub-mounts or other differences. Or the same / tmpfs with
different /usr/ mounts. If it was explicitly set up we should use it.

Use the new helper to check that the mount IDs are also the same,
not just the inodes.

src/shared/switch-root.c

index b620156c75be0558ad3062b44f810e8e0edee8aa..787fb79afb4c9797172cc4644953056a149203de 100644 (file)
@@ -63,11 +63,11 @@ int switch_root(const char *new_root,
         if (new_root_fd < 0)
                 return log_error_errno(errno, "Failed to open target directory '%s': %m", new_root);
 
-        r = inode_same_at(old_root_fd, "", new_root_fd, "", AT_EMPTY_PATH);
+        r = fds_are_same_mount(old_root_fd, new_root_fd);
         if (r < 0)
-                return log_error_errno(r, "Failed to determine if old and new root directory are the same: %m");
+                return log_error_errno(r, "Failed to check if old and new root directory/mount are the same: %m");
         if (r > 0) {
-                log_debug("Skipping switch root, as old and new root directory are the same.");
+                log_debug("Skipping switch root, as old and new root directories/mounts are the same.");
                 return 0;
         }