Fix resource leaks found by GCC -fanalyzer
[tinc] / src / keys.c
index 2db2b15..84bd071 100644 (file)
@@ -134,6 +134,7 @@ ecdsa_t *read_ecdsa_private_key(splay_tree_t *config_tree, char **keyfile) {
        if(fstat(fileno(fp), &s)) {
                logger(DEBUG_ALWAYS, LOG_ERR, "Could not stat Ed25519 private key file `%s': %s'", fname, strerror(errno));
                free(fname);
+               fclose(fp);
                return false;
        }
 
@@ -227,13 +228,13 @@ rsa_t *read_rsa_private_key(splay_tree_t *config_tree, char **keyfile) {
        if(get_config_string(rsa_priv_conf, &d)) {
                if(!get_config_string(lookup_config(config_tree, "PublicKey"), &n)) {
                        logger(DEBUG_ALWAYS, LOG_ERR, "PrivateKey used but no PublicKey found!");
-                       free(d);
+                       free_string(d);
                        return NULL;
                }
 
                key = rsa_set_hex_private_key(n, "FFFF", d);
                free(n);
-               free(d);
+               free_string(d);
 
                if(key && keyfile && rsa_priv_conf->file) {
                        *keyfile = xstrdup(rsa_priv_conf->file);
@@ -268,6 +269,7 @@ rsa_t *read_rsa_private_key(splay_tree_t *config_tree, char **keyfile) {
        if(fstat(fileno(fp), &s)) {
                logger(DEBUG_ALWAYS, LOG_ERR, "Could not stat RSA private key file `%s': %s'", fname, strerror(errno));
                free(fname);
+               fclose(fp);
                return NULL;
        }