switch-root: also check that mount IDs are the same, not just inodes

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.
This commit is contained in:
Luca Boccassi
2023-12-05 17:20:27 +00:00
parent 5134e54625
commit f83a74dfb8
+3 -3
View 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;
}