Unverified Commit c2250e75 by Stéphane Graber Committed by GitHub

Merge pull request #3285 from brauner/2020-03-10/fixes

bugfixes
parents bf7e2093 39e2a438
...@@ -329,13 +329,13 @@ int lxc_try_cmd(const char *name, const char *lxcpath) ...@@ -329,13 +329,13 @@ int lxc_try_cmd(const char *name, const char *lxcpath)
pid_t lxc_cmd_get_init_pid(const char *name, const char *lxcpath) pid_t lxc_cmd_get_init_pid(const char *name, const char *lxcpath)
{ {
int ret, stopped; int ret, stopped;
intmax_t pid = -1; pid_t pid = -1;
struct lxc_cmd_rr cmd = { struct lxc_cmd_rr cmd = {
.req = { .req = {
.cmd = LXC_CMD_GET_INIT_PID .cmd = LXC_CMD_GET_INIT_PID
}, },
.rsp = { .rsp = {
.data = INTMAX_TO_PTR(pid) .data = PID_TO_PTR(pid)
} }
}; };
...@@ -343,7 +343,7 @@ pid_t lxc_cmd_get_init_pid(const char *name, const char *lxcpath) ...@@ -343,7 +343,7 @@ pid_t lxc_cmd_get_init_pid(const char *name, const char *lxcpath)
if (ret < 0) if (ret < 0)
return -1; return -1;
pid = PTR_TO_INTMAX(cmd.rsp.data); pid = PTR_TO_PID(cmd.rsp.data);
if (pid < 0) if (pid < 0)
return -1; return -1;
...@@ -357,10 +357,8 @@ static int lxc_cmd_get_init_pid_callback(int fd, struct lxc_cmd_req *req, ...@@ -357,10 +357,8 @@ static int lxc_cmd_get_init_pid_callback(int fd, struct lxc_cmd_req *req,
struct lxc_handler *handler, struct lxc_handler *handler,
struct lxc_epoll_descr *descr) struct lxc_epoll_descr *descr)
{ {
intmax_t pid = handler->pid;
struct lxc_cmd_rsp rsp = { struct lxc_cmd_rsp rsp = {
.data = INTMAX_TO_PTR(pid) .data = PID_TO_PTR(handler->pid)
}; };
return lxc_cmd_rsp_send(fd, &rsp); return lxc_cmd_rsp_send(fd, &rsp);
...@@ -875,10 +873,6 @@ static int lxc_cmd_add_state_client_callback(__owns int fd, struct lxc_cmd_req * ...@@ -875,10 +873,6 @@ static int lxc_cmd_add_state_client_callback(__owns int fd, struct lxc_cmd_req *
if (ret < 0) if (ret < 0)
goto reap_client_fd; goto reap_client_fd;
/* close fd if state is already achieved to avoid leakage */
if (rsp.ret != MAX_STATE)
close(fd);
return 0; return 0;
reap_client_fd: reap_client_fd:
...@@ -1346,12 +1340,20 @@ static void lxc_cmd_fd_cleanup(int fd, struct lxc_handler *handler, ...@@ -1346,12 +1340,20 @@ static void lxc_cmd_fd_cleanup(int fd, struct lxc_handler *handler,
close(client->clientfd); close(client->clientfd);
free(cur->elem); free(cur->elem);
free(cur); free(cur);
/* No need to walk the whole list. If we found the state /*
* No need to walk the whole list. If we found the state
* client fd there can't be a second one. * client fd there can't be a second one.
*/ */
break; break;
} }
break;
/*
* We didn't add the state client to the list. Either because
* we failed to allocate memory (unlikely) or because the state
* was already reached by the time we were ready to add it. So
* fallthrough and clean it up.
*/
__fallthrough;
default: default:
close(fd); close(fd);
} }
......
...@@ -414,8 +414,8 @@ enum { ...@@ -414,8 +414,8 @@ enum {
#define PTR_TO_INT(p) ((int)((intptr_t)(p))) #define PTR_TO_INT(p) ((int)((intptr_t)(p)))
#define INT_TO_PTR(u) ((void *)((intptr_t)(u))) #define INT_TO_PTR(u) ((void *)((intptr_t)(u)))
#define PTR_TO_INTMAX(p) ((intmax_t)((intptr_t)(p))) #define PTR_TO_PID(p) ((pid_t)((intptr_t)(p)))
#define INTMAX_TO_PTR(u) ((void *)((intptr_t)(u))) #define PID_TO_PTR(u) ((void *)((intptr_t)(u)))
#define PTR_TO_UINT64(p) ((uint64_t)((intptr_t)(p))) #define PTR_TO_UINT64(p) ((uint64_t)((intptr_t)(p)))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment