diff options
author | dimitri staessens <dimitri.staessens@intec.ugent.be> | 2017-01-29 17:20:09 +0100 |
---|---|---|
committer | dimitri staessens <dimitri.staessens@intec.ugent.be> | 2017-01-29 17:20:09 +0100 |
commit | 45a8dd4ccb3874c411dac287cf7ce862f051aa14 (patch) | |
tree | 608fa2506c847f7ebe1fb702333a74ecc2792bf5 | |
parent | d6321a22f8c957523e7acbf6c57f5730b55ac378 (diff) | |
download | ouroboros-45a8dd4ccb3874c411dac287cf7ce862f051aa14.tar.gz ouroboros-45a8dd4ccb3874c411dac287cf7ce862f051aa14.zip |
irmd: Fix memleak attempting double bootstrap
When trying to double bootstrap, the entry name was strdup'd before
the bootstrap leaking the previous name. Now it bootstraps first and
sets the name after a successful bootstrap only.
-rw-r--r-- | src/irmd/main.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/irmd/main.c b/src/irmd/main.c index 435ee116..02ffb21b 100644 --- a/src/irmd/main.c +++ b/src/irmd/main.c @@ -392,21 +392,19 @@ static int bootstrap_ipcp(pid_t api, dif_config_msg_t * conf) return -1; } - entry->dif_name = strdup(conf->dif_name); - if (entry->dif_name == NULL) { + if (ipcp_bootstrap(entry->api, conf)) { pthread_rwlock_unlock(&irmd->reg_lock); pthread_rwlock_unlock(&irmd->state_lock); - LOG_ERR("Failed to strdup."); + LOG_ERR("Could not bootstrap IPCP."); return -1; } - if (ipcp_bootstrap(entry->api, conf)) { + entry->dif_name = strdup(conf->dif_name); + if (entry->dif_name == NULL) { pthread_rwlock_unlock(&irmd->reg_lock); pthread_rwlock_unlock(&irmd->state_lock); - LOG_ERR("Could not bootstrap IPCP."); - free(entry->dif_name); - entry->dif_name = NULL; - return -1; + LOG_WARN("Failed to set name of DIF."); + return -ENOMEM; } pthread_rwlock_unlock(&irmd->reg_lock); |