]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
commands: handle older clients gracefully
authorChristian Brauner <christian.brauner@ubuntu.com>
Tue, 23 Feb 2021 18:10:38 +0000 (19:10 +0100)
committerChristian Brauner <christian.brauner@ubuntu.com>
Fri, 26 Feb 2021 20:28:49 +0000 (21:28 +0100)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/commands.c

index 4ddd0697301752858f372a525a4cae6832685105..514a431c0e9c7ed8164060579b53eb0bfd320824 100644 (file)
@@ -502,11 +502,16 @@ static int lxc_cmd_get_init_pid_callback(int fd, struct lxc_cmd_req *req,
 
 int lxc_cmd_get_init_pidfd(const char *name, const char *lxcpath)
 {
+       int pidfd;
        int ret, stopped;
        struct lxc_cmd_rr cmd = {
                .req = {
                        .cmd = LXC_CMD_GET_INIT_PIDFD,
                },
+               .rsp = {
+                       .data = INT_TO_PTR(-EBADF),
+                       .ret = ENOSYS,
+               },
        };
 
        ret = lxc_cmd(name, &cmd, &stopped, lxcpath, NULL);
@@ -514,9 +519,13 @@ int lxc_cmd_get_init_pidfd(const char *name, const char *lxcpath)
                return log_debug_errno(-1, errno, "Failed to process init pidfd command");
 
        if (cmd.rsp.ret < 0)
-               return log_debug_errno(-EBADF, errno, "Failed to receive init pidfd");
+               return syserrno_set(cmd.rsp.ret, "Failed to receive init pidfd");
 
-       return PTR_TO_INT(cmd.rsp.data);
+       pidfd = PTR_TO_INT(cmd.rsp.data);
+       if (pidfd < 0)
+               return syserrno_set(pidfd, "Failed to receive init pidfd");
+
+       return pidfd;
 }
 
 static int lxc_cmd_get_init_pidfd_callback(int fd, struct lxc_cmd_req *req,