]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
commands: pass around intmax_t 2578/head
authorChristian Brauner <christian.brauner@ubuntu.com>
Fri, 31 Aug 2018 19:25:45 +0000 (21:25 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Fri, 31 Aug 2018 19:44:49 +0000 (21:44 +0200)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/commands.c
src/lxc/macro.h

index 458749ab5bde620c8c07b5d48f6910e0c777aecd..f6a9e4fda2047c05fa5ea16c45efe2d8900ef135 100644 (file)
@@ -375,12 +375,13 @@ int lxc_try_cmd(const char *name, const char *lxcpath)
 pid_t lxc_cmd_get_init_pid(const char *name, const char *lxcpath)
 {
        int ret, stopped;
+       intmax_t pid;
        struct lxc_cmd_rr cmd = {
                .req = {
                        .cmd = LXC_CMD_GET_INIT_PID
                },
                .rsp = {
-                       .data = INT_TO_PTR((int){-1})
+                       .data = INTMAX_TO_PTR((intmax_t){-1})
                }
        };
 
@@ -388,13 +389,22 @@ pid_t lxc_cmd_get_init_pid(const char *name, const char *lxcpath)
        if (ret < 0)
                return -1;
 
-       return PTR_TO_INT(cmd.rsp.data);
+       pid = PTR_TO_INTMAX(cmd.rsp.data);
+       if (pid < 0)
+               return -1;
+
+       /* We need to assume that pid_t can actually hold any pid given to us
+        * by the kernel. If it can't it's a libc bug.
+        */
+       return (pid_t)pid;
 }
 
 static int lxc_cmd_get_init_pid_callback(int fd, struct lxc_cmd_req *req,
                                         struct lxc_handler *handler)
 {
-       struct lxc_cmd_rsp rsp = { .data = INT_TO_PTR(handler->pid) };
+       struct lxc_cmd_rsp rsp = {
+               .data = INTMAX_TO_PTR(handler->pid)
+       };
 
        return lxc_cmd_rsp_send(fd, &rsp);
 }
index 8bad2d89dd1f402080389748d81b9c8bc09bf162..96d737267802727ec56a6c86474e9bc0b91f6416 100644 (file)
@@ -312,4 +312,7 @@ extern int __build_bug_on_failed;
 #define PTR_TO_INT(p) ((int)((intptr_t)(p)))
 #define INT_TO_PTR(u) ((void *)((intptr_t)(u)))
 
+#define PTR_TO_INTMAX(p) ((intmax_t)((intptr_t)(p)))
+#define INTMAX_TO_PTR(u) ((void *)((intptr_t)(u)))
+
 #endif /* __LXC_MACRO_H */