Commit d3975e44 authored by Andrey Vagin's avatar Andrey Vagin Committed by Pavel Emelyanov

parasite: fix error paths in parasite_init

* Call restore_ns on error paths.
* Use close_safe for the socket, because it can be reused

CID 996194 (#1 of 3): Resource leak (RESOURCE_LEAK)
6. leaked_handle: Handle variable "rst" going out of scope leaks the
handle.
Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 64d039dc
......@@ -308,18 +308,19 @@ static int parasite_init(struct parasite_ctl *ctl, pid_t pid, int nr_threads)
}
sock = socket(PF_UNIX, SOCK_DGRAM, 0);
if (sock < 0) {
if (sock < 0)
pr_perror("Can't create socket");
if (rst > 0 && restore_ns(rst, &net_ns_desc) < 0)
return -1;
if (sock < 0)
return -1;
}
if (bind(sock, (struct sockaddr *)&args->h_addr, args->h_addr_len) < 0) {
pr_perror("Can't bind socket");
goto err;
}
if (rst > 0 && restore_ns(rst, &net_ns_desc) < 0)
goto err;
} else {
struct sockaddr addr = { .sa_family = AF_UNSPEC, };
......@@ -349,7 +350,7 @@ static int parasite_init(struct parasite_ctl *ctl, pid_t pid, int nr_threads)
ctl->tsock = sock;
return 0;
err:
close(sock);
close_safe(&sock);
return -1;
}
......
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