From: Christian Brauner Date: Fri, 30 Sep 2022 13:02:52 +0000 (+0200) Subject: namespace-util: add in_same_namespace() X-Git-Tag: v252-rc1~13^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2fe299a320757bf5a3e0362a00e570d3bf713eab;p=thirdparty%2Fsystemd.git namespace-util: add in_same_namespace() Add a helper for the canonical way to determine whether two namespaces are identical. --- diff --git a/src/basic/namespace-util.c b/src/basic/namespace-util.c index b330e2a11d1..a87a875943c 100644 --- a/src/basic/namespace-util.c +++ b/src/basic/namespace-util.c @@ -236,3 +236,27 @@ int userns_acquire(const char *uid_map, const char *gid_map) { return TAKE_FD(userns_fd); } + +int in_same_namespace(pid_t pid1, pid_t pid2, NamespaceType type) { + const char *ns_path; + struct stat ns_st1, ns_st2; + + if (pid1 == 0) + pid1 = getpid_cached(); + + if (pid2 == 0) + pid2 = getpid_cached(); + + if (pid1 == pid2) + return 1; + + ns_path = pid_namespace_path(pid1, type); + if (stat(ns_path, &ns_st1) < 0) + return -errno; + + ns_path = pid_namespace_path(pid2, type); + if (stat(ns_path, &ns_st2) < 0) + return -errno; + + return stat_inode_same(&ns_st1, &ns_st2); +} diff --git a/src/basic/namespace-util.h b/src/basic/namespace-util.h index 5c1912985d8..be5b2281d3c 100644 --- a/src/basic/namespace-util.h +++ b/src/basic/namespace-util.h @@ -45,3 +45,4 @@ static inline bool userns_shift_range_valid(uid_t shift, uid_t range) { } int userns_acquire(const char *uid_map, const char *gid_map); +int in_same_namespace(pid_t pid1, pid_t pid2, NamespaceType type);