]> git.proxmox.com Git - mirror_lxcfs.git/commitdiff
utils: add get_task_personality helper
authorAlexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
Mon, 28 Nov 2022 13:51:24 +0000 (14:51 +0100)
committerAlexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
Wed, 30 Nov 2022 23:01:31 +0000 (00:01 +0100)
Signed-off-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
src/utils.c
src/utils.h

index 6bfedeba725a88f038cba6f8d4af0394b8967311..ab665f74f6971ed2c03ab18be9995e2f565dffb7 100644 (file)
@@ -665,3 +665,29 @@ DIR *opendir_flags(const char *path, int flags)
 
        return dirp;
 }
+
+int get_task_personality(pid_t pid, __u32 *personality)
+{
+       __do_close int fd = -EBADF;
+       int ret = -1;
+       char path[STRLITERALLEN("/proc//personality") + INTTYPE_TO_STRLEN(pid_t) + 1];
+       /* seq_printf(m, "%08x\n", task->personality); */
+       char buf[8 + 1];
+
+       ret = strnprintf(path, sizeof(path), "/proc/%d/personality", pid);
+       if (ret < 0)
+               return -1;
+
+       fd = open(path, O_RDONLY | O_CLOEXEC);
+       if (fd < 0)
+               return -1;
+
+       ret = read_nointr(fd, buf, sizeof(buf) - 1);
+       if (ret >= 0) {
+               buf[ret] = '\0';
+               if (safe_uint32(buf, personality, 16) < 0)
+                       return log_error(-1, "Failed to convert personality %s", buf);
+       }
+
+       return ret;
+}
index dc0ec3a03a2c3fdb6226994d93b6d1c1e0e7657a..7ed021a92891ecc927e211fae72e3f53d8655479 100644 (file)
@@ -76,4 +76,7 @@ static inline bool file_exists(const char *f)
 #define PROTECT_OPEN (PROTECT_OPEN_WITH_TRAILING_SYMLINKS | O_NOFOLLOW)
 extern char *read_file_at(int dfd, const char *fnam, unsigned int o_flags);
 
+extern int get_task_personality(pid_t pid, __u32 *personality);
+extern int get_host_personality(__u32 *personality);
+
 #endif /* __LXCFS_UTILS_H */