diff options
author | Mike Yuan <me@yhndnzj.com> | 2024-06-10 17:45:39 +0200 |
---|---|---|
committer | Mike Yuan <me@yhndnzj.com> | 2024-07-23 19:30:55 +0200 |
commit | 974e34a018cb54d85cd17e189b99c44341715427 (patch) | |
tree | 567db72c4119bf87b324176fcf150d35e2719b22 | |
parent | mount-util: clean up mount_exchange_graceful a bit, don't duplicate move_moun... (diff) | |
download | systemd-974e34a018cb54d85cd17e189b99c44341715427.tar.xz systemd-974e34a018cb54d85cd17e189b99c44341715427.zip |
mount-util: do not unnecessarily acquire mountns fd twice
This also enables us to use pidref_namespace_open().
-rw-r--r-- | src/shared/mount-util.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/src/shared/mount-util.c b/src/shared/mount-util.c index 0b3154fbd9..f5073db7f9 100644 --- a/src/shared/mount-util.c +++ b/src/shared/mount-util.c @@ -1105,20 +1105,16 @@ static int mount_in_namespace( if (!pidref_is_set(target)) return -ESRCH; - r = namespace_open(target->pid, &pidns_fd, &mntns_fd, /* ret_netns_fd = */ NULL, /* ret_userns_fd = */ NULL, &root_fd); + r = pidref_namespace_open(target, &pidns_fd, &mntns_fd, /* ret_netns_fd = */ NULL, /* ret_userns_fd = */ NULL, &root_fd); if (r < 0) return log_debug_errno(r, "Failed to retrieve FDs of the target process' namespace: %m"); - r = in_same_namespace(target->pid, 0, NAMESPACE_MOUNT); + r = inode_same_at(mntns_fd, "", AT_FDCWD, "/proc/self/ns/mnt", AT_EMPTY_PATH); if (r < 0) return log_debug_errno(r, "Failed to determine if mount namespaces are equal: %m"); /* We can't add new mounts at runtime if the process wasn't started in a namespace */ if (r > 0) - return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to activate bind mount in target, not running in a mount namespace"); - - r = pidref_verify(target); - if (r < 0) - return log_debug_errno(r, "Failed to verify target process '" PID_FMT "': %m", target->pid); + return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to activate bind mount in target, not running in a mount namespace."); r = chase(src, NULL, 0, &chased_src_path, &chased_src_fd); if (r < 0) |