aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2009-06-04 15:49:19 +0200
committerMartin Willi <martin@strongswan.org>2009-06-09 11:18:56 +0200
commit513a1a2835d94a7b409b40051628c7a2d1107af3 (patch)
tree4c7029004c20b32e92d85d265f934d3a165f66a9 /src
parent4977018c23a93469296891e65bd2d3c33eeb5511 (diff)
downloadstrongswan-513a1a2835d94a7b409b40051628c7a2d1107af3.tar.bz2
strongswan-513a1a2835d94a7b409b40051628c7a2d1107af3.tar.xz
initialize gcrypt threadsave, currently for pthread only
Diffstat (limited to 'src')
-rw-r--r--src/libstrongswan/plugins/gcrypt/gcrypt_plugin.c26
-rw-r--r--src/libstrongswan/utils/leak_detective.c3
2 files changed, 28 insertions, 1 deletions
diff --git a/src/libstrongswan/plugins/gcrypt/gcrypt_plugin.c b/src/libstrongswan/plugins/gcrypt/gcrypt_plugin.c
index 1b3c66d1d..c31dbe33d 100644
--- a/src/libstrongswan/plugins/gcrypt/gcrypt_plugin.c
+++ b/src/libstrongswan/plugins/gcrypt/gcrypt_plugin.c
@@ -16,6 +16,11 @@
#include "gcrypt_plugin.h"
#include <library.h>
+#include <debug.h>
+
+#include <errno.h>
+#include <gcrypt.h>
+#include <pthread.h>
typedef struct private_gcrypt_plugin_t private_gcrypt_plugin_t;
@@ -31,6 +36,11 @@ struct private_gcrypt_plugin_t {
};
/**
+ * Thread callback implementations for pthread
+ */
+GCRY_THREAD_OPTION_PTHREAD_IMPL;
+
+/**
* Implementation of gcrypt_plugin_t.destroy
*/
static void destroy(private_gcrypt_plugin_t *this)
@@ -43,7 +53,21 @@ static void destroy(private_gcrypt_plugin_t *this)
*/
plugin_t *plugin_create()
{
- private_gcrypt_plugin_t *this = malloc_thing(private_gcrypt_plugin_t);
+ private_gcrypt_plugin_t *this;
+
+ gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
+
+ if (!gcry_check_version(GCRYPT_VERSION))
+ {
+ DBG1("libgcrypt version mismatch");
+ return NULL;
+ }
+
+ /* we currently do not use secure memory */
+ gcry_control(GCRYCTL_DISABLE_SECMEM, 0);
+ gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
+
+ this = malloc_thing(private_gcrypt_plugin_t);
this->public.plugin.destroy = (void(*)(plugin_t*))destroy;
diff --git a/src/libstrongswan/utils/leak_detective.c b/src/libstrongswan/utils/leak_detective.c
index 65317e37c..2e7b7c0b7 100644
--- a/src/libstrongswan/utils/leak_detective.c
+++ b/src/libstrongswan/utils/leak_detective.c
@@ -200,6 +200,9 @@ char *whitelist[] = {
"DH_new_method",
"ENGINE_load_builtin_engines",
"OPENSSL_config",
+ /* libgcrypt */
+ "gcry_control",
+ "gcry_check_version",
};
/**