diff options
author | Martin Willi <martin@revosec.ch> | 2011-05-02 15:03:56 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2011-05-02 15:05:41 +0200 |
commit | aca6434ba914ca34ef22c602d95507cf1f3c2c07 (patch) | |
tree | b866410151db56ed95eb9e7e28f7bd44caff2ddf /src/libstrongswan/credentials/cred_encoding.c | |
parent | 33bad71ce96b16a84cd784ddf206019d06c77b22 (diff) | |
download | strongswan-aca6434ba914ca34ef22c602d95507cf1f3c2c07.tar.bz2 strongswan-aca6434ba914ca34ef22c602d95507cf1f3c2c07.tar.xz |
Fix a potential memleak if two threads fingerprint a credential simultaneously
Diffstat (limited to 'src/libstrongswan/credentials/cred_encoding.c')
-rw-r--r-- | src/libstrongswan/credentials/cred_encoding.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/libstrongswan/credentials/cred_encoding.c b/src/libstrongswan/credentials/cred_encoding.c index edd76205b..ac3266f4c 100644 --- a/src/libstrongswan/credentials/cred_encoding.c +++ b/src/libstrongswan/credentials/cred_encoding.c @@ -180,8 +180,13 @@ static bool encode(private_cred_encoding_t *this, cred_encoding_type_t type, chunk = malloc_thing(chunk_t); *chunk = *encoding; this->lock->write_lock(this->lock); - this->cache[type]->put(this->cache[type], cache, chunk); + chunk = this->cache[type]->put(this->cache[type], cache, chunk); this->lock->unlock(this->lock); + if (chunk) + { + free(chunk->ptr); + free(chunk); + } } return success; } |