projects
/
tinc
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
543c0ab
)
Fix a few memory leaks in the CLI found by AddressSanitizer.
author
Guus Sliepen
<guus@tinc-vpn.org>
Fri, 25 Sep 2015 08:06:18 +0000
(10:06 +0200)
committer
Guus Sliepen
<guus@tinc-vpn.org>
Fri, 25 Sep 2015 08:06:18 +0000
(10:06 +0200)
src/tincctl.c
patch
|
blob
|
history
diff --git
a/src/tincctl.c
b/src/tincctl.c
index
00757c4
..
abc5c09
100644
(file)
--- a/
src/tincctl.c
+++ b/
src/tincctl.c
@@
-417,6
+417,7
@@
static bool ed25519_keygen(bool ask) {
char *pubkey = ecdsa_get_base64_public_key(key);
fprintf(f, "Ed25519PublicKey = %s\n", pubkey);
char *pubkey = ecdsa_get_base64_public_key(key);
fprintf(f, "Ed25519PublicKey = %s\n", pubkey);
+ free(pubkey);
fclose(f);
ecdsa_free(key);
fclose(f);
ecdsa_free(key);
@@
-1804,7
+1805,7
@@
static int cmd_config(int argc, char *argv[]) {
}
static bool try_bind(int port) {
}
static bool try_bind(int port) {
- struct addrinfo *ai = NULL;
+ struct addrinfo *ai = NULL
, *aip
;
struct addrinfo hint = {
.ai_flags = AI_PASSIVE,
.ai_family = AF_UNSPEC,
struct addrinfo hint = {
.ai_flags = AI_PASSIVE,
.ai_family = AF_UNSPEC,
@@
-1812,24
+1813,30
@@
static bool try_bind(int port) {
.ai_protocol = IPPROTO_TCP,
};
.ai_protocol = IPPROTO_TCP,
};
+ bool success = true;
char portstr[16];
snprintf(portstr, sizeof portstr, "%d", port);
if(getaddrinfo(NULL, portstr, &hint, &ai) || !ai)
return false;
char portstr[16];
snprintf(portstr, sizeof portstr, "%d", port);
if(getaddrinfo(NULL, portstr, &hint, &ai) || !ai)
return false;
-
while(ai
) {
+
for(aip = ai; aip; aip = aip->ai_next
) {
int fd = socket(ai->ai_family, SOCK_STREAM, IPPROTO_TCP);
int fd = socket(ai->ai_family, SOCK_STREAM, IPPROTO_TCP);
- if(!fd)
- return false;
+ if(!fd) {
+ success = false;
+ break;
+ }
+
int result = bind(fd, ai->ai_addr, ai->ai_addrlen);
closesocket(fd);
int result = bind(fd, ai->ai_addr, ai->ai_addrlen);
closesocket(fd);
- if(result)
- return false;
- ai = ai->ai_next;
+ if(result) {
+ success = false;
+ break;
+ }
}
}
- return true;
+ freeaddrinfo(ai);
+ return success;
}
int check_port(char *name) {
}
int check_port(char *name) {