]> 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>
Tue, 23 Feb 2021 18:20:21 +0000 (19:20 +0100)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/commands.c

index bb81aa112dd34e0f7431867323cdddd556f2178c..c5d4dd15123e6e37fadf01ec9b2e66cb1970d390 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,