aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/credentials/cred_encoding.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2011-05-02 15:03:56 +0200
committerMartin Willi <martin@revosec.ch>2011-05-02 15:05:41 +0200
commitaca6434ba914ca34ef22c602d95507cf1f3c2c07 (patch)
treeb866410151db56ed95eb9e7e28f7bd44caff2ddf /src/libstrongswan/credentials/cred_encoding.c
parent33bad71ce96b16a84cd784ddf206019d06c77b22 (diff)
downloadstrongswan-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.c7
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;
}