From: Martin Willi Date: Thu, 18 Nov 2010 07:43:26 +0000 (+0100) Subject: Use static args for C_Initialize(), OpenSC does not get a copy of the pointers X-Git-Tag: 4.5.1~499 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cfa18d14f1281c3f58591eda643a81ef07ba08dd;p=thirdparty%2Fstrongswan.git Use static args for C_Initialize(), OpenSC does not get a copy of the pointers --- diff --git a/src/libstrongswan/plugins/pkcs11/pkcs11_library.c b/src/libstrongswan/plugins/pkcs11/pkcs11_library.c index 4373647811..e5af0c2922 100644 --- a/src/libstrongswan/plugins/pkcs11/pkcs11_library.c +++ b/src/libstrongswan/plugins/pkcs11/pkcs11_library.c @@ -806,12 +806,15 @@ static bool initialize(private_pkcs11_library_t *this, char *name, char *file, CK_C_GetFunctionList pC_GetFunctionList; CK_INFO info; CK_RV rv; - CK_C_INITIALIZE_ARGS args = { + static CK_C_INITIALIZE_ARGS args = { .CreateMutex = CreateMutex, .DestroyMutex = DestroyMutex, .LockMutex = LockMutex, .UnlockMutex = UnlockMutex, }; + static CK_C_INITIALIZE_ARGS args_os = { + .flags = CKF_OS_LOCKING_OK, + }; pC_GetFunctionList = dlsym(this->handle, "C_GetFunctionList"); if (!pC_GetFunctionList) @@ -836,9 +839,8 @@ static bool initialize(private_pkcs11_library_t *this, char *name, char *file, } if (rv == CKR_CANT_LOCK) { /* fallback to OS locking */ - memset(&args, 0, sizeof(args)); - args.flags = CKF_OS_LOCKING_OK; - rv = this->public.f->C_Initialize(&args); + os_locking = TRUE; + rv = this->public.f->C_Initialize(&args_os); } if (rv != CKR_OK) { @@ -865,7 +867,7 @@ static bool initialize(private_pkcs11_library_t *this, char *name, char *file, DBG1(DBG_CFG, " %s: %s v%d.%d", info.manufacturerID, info.libraryDescription, info.libraryVersion.major, info.libraryVersion.minor); - if (args.flags & CKF_OS_LOCKING_OK) + if (os_locking) { DBG1(DBG_CFG, " uses OS locking functions"); }