From: Luca Boccassi Date: Tue, 5 Dec 2023 15:43:12 +0000 (+0000) Subject: switch-root: also check that mount IDs are the same, not just inodes X-Git-Tag: v256-rc1~1594^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f83a74dfb8210f0d67943912c539e51b989f85a4;p=thirdparty%2Fsystemd.git 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. --- diff --git a/src/shared/switch-root.c b/src/shared/switch-root.c index b620156c75b..787fb79afb4 100644 --- a/src/shared/switch-root.c +++ b/src/shared/switch-root.c @@ -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; }