Skip to content

Commit 4db7a76

Browse files
committedOct 29, 2023
softhsm: fix segfault during shutdown with openssl 3.0.12
For details see: openssl/openssl#22508 softhsm/SoftHSMv2#729 Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
1 parent b5deda0 commit 4db7a76

File tree

2 files changed

+660
-0
lines changed

2 files changed

+660
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,656 @@
1+
From: Neil Horman <nhorman@openssl.org>
2+
Date: Fri, 27 Oct 2023 14:57:37 -0400
3+
Subject: [PATCH] Prevent accessing of global c++ objects once they are deleted
4+
5+
Fixes (Maybe) #729
6+
---
7+
src/lib/SoftHSM.cpp | 3 ++
8+
src/lib/main.cpp | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++++
9+
2 files changed, 141 insertions(+)
10+
11+
diff --git a/src/lib/SoftHSM.cpp b/src/lib/SoftHSM.cpp
12+
index 0a0c32cc68dc..0b64344e9d3e 100644
13+
--- a/src/lib/SoftHSM.cpp
14+
+++ b/src/lib/SoftHSM.cpp
15+
@@ -88,6 +88,8 @@
16+
17+
// Initialise the one-and-only instance
18+
19+
+int objects_deleted = 0;
20+
+
21+
#ifdef HAVE_CXX11
22+
23+
std::unique_ptr<MutexFactory> MutexFactory::instance(nullptr);
24+
@@ -406,6 +408,7 @@ SoftHSM::~SoftHSM()
25+
26+
isInitialised = false;
27+
28+
+ objects_deleted = 1;
29+
resetMutexFactoryCallbacks();
30+
}
31+
32+
diff --git a/src/lib/main.cpp b/src/lib/main.cpp
33+
index 2dfd0eb87164..e89f18c1096e 100644
34+
--- a/src/lib/main.cpp
35+
+++ b/src/lib/main.cpp
36+
@@ -49,6 +49,8 @@
37+
#define PKCS_API
38+
#endif
39+
40+
+extern int objects_deleted;
41+
+
42+
// PKCS #11 function list
43+
static CK_FUNCTION_LIST functionList =
44+
{
45+
@@ -130,6 +132,8 @@ PKCS_API CK_RV C_Initialize(CK_VOID_PTR pInitArgs)
46+
{
47+
try
48+
{
49+
+ if (objects_deleted == 1)
50+
+ return CKR_FUNCTION_FAILED;
51+
return SoftHSM::i()->C_Initialize(pInitArgs);
52+
}
53+
catch (...)
54+
@@ -145,6 +149,8 @@ PKCS_API CK_RV C_Finalize(CK_VOID_PTR pReserved)
55+
{
56+
try
57+
{
58+
+ if (objects_deleted == 1)
59+
+ return CKR_FUNCTION_FAILED;
60+
return SoftHSM::i()->C_Finalize(pReserved);
61+
}
62+
catch (...)
63+
@@ -160,6 +166,8 @@ PKCS_API CK_RV C_GetInfo(CK_INFO_PTR pInfo)
64+
{
65+
try
66+
{
67+
+ if (objects_deleted == 1)
68+
+ return CKR_FUNCTION_FAILED;
69+
return SoftHSM::i()->C_GetInfo(pInfo);
70+
}
71+
catch (...)
72+
@@ -175,6 +183,8 @@ PKCS_API CK_RV C_GetFunctionList(CK_FUNCTION_LIST_PTR_PTR ppFunctionList)
73+
{
74+
try
75+
{
76+
+ if (objects_deleted == 1)
77+
+ return CKR_FUNCTION_FAILED;
78+
if (ppFunctionList == NULL_PTR) return CKR_ARGUMENTS_BAD;
79+
80+
*ppFunctionList = &functionList;
81+
@@ -194,6 +204,8 @@ PKCS_API CK_RV C_GetSlotList(CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList, CK
82+
{
83+
try
84+
{
85+
+ if (objects_deleted == 1)
86+
+ return CKR_FUNCTION_FAILED;
87+
return SoftHSM::i()->C_GetSlotList(tokenPresent, pSlotList, pulCount);
88+
}
89+
catch (...)
90+
@@ -209,6 +221,8 @@ PKCS_API CK_RV C_GetSlotInfo(CK_SLOT_ID slotID, CK_SLOT_INFO_PTR pInfo)
91+
{
92+
try
93+
{
94+
+ if (objects_deleted == 1)
95+
+ return CKR_FUNCTION_FAILED;
96+
return SoftHSM::i()->C_GetSlotInfo(slotID, pInfo);
97+
}
98+
catch (...)
99+
@@ -224,6 +238,8 @@ PKCS_API CK_RV C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo)
100+
{
101+
try
102+
{
103+
+ if (objects_deleted == 1)
104+
+ return CKR_FUNCTION_FAILED;
105+
return SoftHSM::i()->C_GetTokenInfo(slotID, pInfo);
106+
}
107+
catch (...)
108+
@@ -239,6 +255,8 @@ PKCS_API CK_RV C_GetMechanismList(CK_SLOT_ID slotID, CK_MECHANISM_TYPE_PTR pMech
109+
{
110+
try
111+
{
112+
+ if (objects_deleted == 1)
113+
+ return CKR_FUNCTION_FAILED;
114+
return SoftHSM::i()->C_GetMechanismList(slotID, pMechanismList, pulCount);
115+
}
116+
catch (...)
117+
@@ -254,6 +272,8 @@ PKCS_API CK_RV C_GetMechanismInfo(CK_SLOT_ID slotID, CK_MECHANISM_TYPE type, CK_
118+
{
119+
try
120+
{
121+
+ if (objects_deleted == 1)
122+
+ return CKR_FUNCTION_FAILED;
123+
return SoftHSM::i()->C_GetMechanismInfo(slotID, type, pInfo);
124+
}
125+
catch (...)
126+
@@ -269,6 +289,8 @@ PKCS_API CK_RV C_InitToken(CK_SLOT_ID slotID, CK_UTF8CHAR_PTR pPin, CK_ULONG ulP
127+
{
128+
try
129+
{
130+
+ if (objects_deleted == 1)
131+
+ return CKR_FUNCTION_FAILED;
132+
return SoftHSM::i()->C_InitToken(slotID, pPin, ulPinLen, pLabel);
133+
}
134+
catch (...)
135+
@@ -284,6 +306,8 @@ PKCS_API CK_RV C_InitPIN(CK_SESSION_HANDLE hSession, CK_UTF8CHAR_PTR pPin, CK_UL
136+
{
137+
try
138+
{
139+
+ if (objects_deleted == 1)
140+
+ return CKR_FUNCTION_FAILED;
141+
return SoftHSM::i()->C_InitPIN(hSession, pPin, ulPinLen);
142+
}
143+
catch (...)
144+
@@ -299,6 +323,8 @@ PKCS_API CK_RV C_SetPIN(CK_SESSION_HANDLE hSession, CK_UTF8CHAR_PTR pOldPin, CK_
145+
{
146+
try
147+
{
148+
+ if (objects_deleted == 1)
149+
+ return CKR_FUNCTION_FAILED;
150+
return SoftHSM::i()->C_SetPIN(hSession, pOldPin, ulOldLen, pNewPin, ulNewLen);
151+
}
152+
catch (...)
153+
@@ -314,6 +340,8 @@ PKCS_API CK_RV C_OpenSession(CK_SLOT_ID slotID, CK_FLAGS flags, CK_VOID_PTR pApp
154+
{
155+
try
156+
{
157+
+ if (objects_deleted == 1)
158+
+ return CKR_FUNCTION_FAILED;
159+
return SoftHSM::i()->C_OpenSession(slotID, flags, pApplication, notify, phSession);
160+
}
161+
catch (...)
162+
@@ -329,6 +357,8 @@ PKCS_API CK_RV C_CloseSession(CK_SESSION_HANDLE hSession)
163+
{
164+
try
165+
{
166+
+ if (objects_deleted == 1)
167+
+ return CKR_FUNCTION_FAILED;
168+
return SoftHSM::i()->C_CloseSession(hSession);
169+
}
170+
catch (...)
171+
@@ -344,6 +374,8 @@ PKCS_API CK_RV C_CloseAllSessions(CK_SLOT_ID slotID)
172+
{
173+
try
174+
{
175+
+ if (objects_deleted == 1)
176+
+ return CKR_FUNCTION_FAILED;
177+
return SoftHSM::i()->C_CloseAllSessions(slotID);
178+
}
179+
catch (...)
180+
@@ -359,6 +391,8 @@ PKCS_API CK_RV C_GetSessionInfo(CK_SESSION_HANDLE hSession, CK_SESSION_INFO_PTR
181+
{
182+
try
183+
{
184+
+ if (objects_deleted == 1)
185+
+ return CKR_FUNCTION_FAILED;
186+
return SoftHSM::i()->C_GetSessionInfo(hSession, pInfo);
187+
}
188+
catch (...)
189+
@@ -374,6 +408,8 @@ PKCS_API CK_RV C_GetOperationState(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pOper
190+
{
191+
try
192+
{
193+
+ if (objects_deleted == 1)
194+
+ return CKR_FUNCTION_FAILED;
195+
return SoftHSM::i()->C_GetOperationState(hSession, pOperationState, pulOperationStateLen);
196+
}
197+
catch (...)
198+
@@ -389,6 +425,8 @@ PKCS_API CK_RV C_SetOperationState(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pOper
199+
{
200+
try
201+
{
202+
+ if (objects_deleted == 1)
203+
+ return CKR_FUNCTION_FAILED;
204+
return SoftHSM::i()->C_SetOperationState(hSession, pOperationState, ulOperationStateLen, hEncryptionKey, hAuthenticationKey);
205+
}
206+
catch (...)
207+
@@ -404,6 +442,8 @@ PKCS_API CK_RV C_Login(CK_SESSION_HANDLE hSession, CK_USER_TYPE userType, CK_UTF
208+
{
209+
try
210+
{
211+
+ if (objects_deleted == 1)
212+
+ return CKR_FUNCTION_FAILED;
213+
return SoftHSM::i()->C_Login(hSession, userType, pPin, ulPinLen);
214+
}
215+
catch (...)
216+
@@ -419,6 +459,8 @@ PKCS_API CK_RV C_Logout(CK_SESSION_HANDLE hSession)
217+
{
218+
try
219+
{
220+
+ if (objects_deleted == 1)
221+
+ return CKR_FUNCTION_FAILED;
222+
return SoftHSM::i()->C_Logout(hSession);
223+
}
224+
catch (...)
225+
@@ -434,6 +476,8 @@ PKCS_API CK_RV C_CreateObject(CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pTemp
226+
{
227+
try
228+
{
229+
+ if (objects_deleted == 1)
230+
+ return CKR_FUNCTION_FAILED;
231+
return SoftHSM::i()->C_CreateObject(hSession, pTemplate, ulCount, phObject);
232+
}
233+
catch (...)
234+
@@ -449,6 +493,8 @@ PKCS_API CK_RV C_CopyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject
235+
{
236+
try
237+
{
238+
+ if (objects_deleted == 1)
239+
+ return CKR_FUNCTION_FAILED;
240+
return SoftHSM::i()->C_CopyObject(hSession, hObject, pTemplate, ulCount, phNewObject);
241+
}
242+
catch (...)
243+
@@ -464,6 +510,8 @@ PKCS_API CK_RV C_DestroyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObj
244+
{
245+
try
246+
{
247+
+ if (objects_deleted == 1)
248+
+ return CKR_FUNCTION_FAILED;
249+
return SoftHSM::i()->C_DestroyObject(hSession, hObject);
250+
}
251+
catch (...)
252+
@@ -479,6 +527,8 @@ PKCS_API CK_RV C_GetObjectSize(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObj
253+
{
254+
try
255+
{
256+
+ if (objects_deleted == 1)
257+
+ return CKR_FUNCTION_FAILED;
258+
return SoftHSM::i()->C_GetObjectSize(hSession, hObject, pulSize);
259+
}
260+
catch (...)
261+
@@ -494,6 +544,8 @@ PKCS_API CK_RV C_GetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE
262+
{
263+
try
264+
{
265+
+ if (objects_deleted == 1)
266+
+ return CKR_FUNCTION_FAILED;
267+
return SoftHSM::i()->C_GetAttributeValue(hSession, hObject, pTemplate, ulCount);
268+
}
269+
catch (...)
270+
@@ -509,6 +561,8 @@ PKCS_API CK_RV C_SetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE
271+
{
272+
try
273+
{
274+
+ if (objects_deleted == 1)
275+
+ return CKR_FUNCTION_FAILED;
276+
return SoftHSM::i()->C_SetAttributeValue(hSession, hObject, pTemplate, ulCount);
277+
}
278+
catch (...)
279+
@@ -524,6 +578,8 @@ PKCS_API CK_RV C_FindObjectsInit(CK_SESSION_HANDLE hSession, CK_ATTRIBUTE_PTR pT
280+
{
281+
try
282+
{
283+
+ if (objects_deleted == 1)
284+
+ return CKR_FUNCTION_FAILED;
285+
return SoftHSM::i()->C_FindObjectsInit(hSession, pTemplate, ulCount);
286+
}
287+
catch (...)
288+
@@ -539,6 +595,8 @@ PKCS_API CK_RV C_FindObjects(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE_PTR ph
289+
{
290+
try
291+
{
292+
+ if (objects_deleted == 1)
293+
+ return CKR_FUNCTION_FAILED;
294+
return SoftHSM::i()->C_FindObjects(hSession, phObject, ulMaxObjectCount, pulObjectCount);
295+
}
296+
catch (...)
297+
@@ -554,6 +612,8 @@ PKCS_API CK_RV C_FindObjectsFinal(CK_SESSION_HANDLE hSession)
298+
{
299+
try
300+
{
301+
+ if (objects_deleted == 1)
302+
+ return CKR_FUNCTION_FAILED;
303+
return SoftHSM::i()->C_FindObjectsFinal(hSession);
304+
}
305+
catch (...)
306+
@@ -569,6 +629,8 @@ PKCS_API CK_RV C_EncryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMecha
307+
{
308+
try
309+
{
310+
+ if (objects_deleted == 1)
311+
+ return CKR_FUNCTION_FAILED;
312+
return SoftHSM::i()->C_EncryptInit(hSession, pMechanism, hObject);
313+
}
314+
catch (...)
315+
@@ -584,6 +646,8 @@ PKCS_API CK_RV C_Encrypt(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG
316+
{
317+
try
318+
{
319+
+ if (objects_deleted == 1)
320+
+ return CKR_FUNCTION_FAILED;
321+
return SoftHSM::i()->C_Encrypt(hSession, pData, ulDataLen, pEncryptedData, pulEncryptedDataLen);
322+
}
323+
catch (...)
324+
@@ -599,6 +663,8 @@ PKCS_API CK_RV C_EncryptUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK
325+
{
326+
try
327+
{
328+
+ if (objects_deleted == 1)
329+
+ return CKR_FUNCTION_FAILED;
330+
return SoftHSM::i()->C_EncryptUpdate(hSession, pData, ulDataLen, pEncryptedData, pulEncryptedDataLen);
331+
}
332+
catch (...)
333+
@@ -614,6 +680,8 @@ PKCS_API CK_RV C_EncryptFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncrypted
334+
{
335+
try
336+
{
337+
+ if (objects_deleted == 1)
338+
+ return CKR_FUNCTION_FAILED;
339+
return SoftHSM::i()->C_EncryptFinal(hSession, pEncryptedData, pulEncryptedDataLen);
340+
}
341+
catch (...)
342+
@@ -629,6 +697,8 @@ PKCS_API CK_RV C_DecryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMecha
343+
{
344+
try
345+
{
346+
+ if (objects_deleted == 1)
347+
+ return CKR_FUNCTION_FAILED;
348+
return SoftHSM::i()->C_DecryptInit(hSession, pMechanism, hObject);
349+
}
350+
catch (...)
351+
@@ -644,6 +714,8 @@ PKCS_API CK_RV C_Decrypt(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedData,
352+
{
353+
try
354+
{
355+
+ if (objects_deleted == 1)
356+
+ return CKR_FUNCTION_FAILED;
357+
return SoftHSM::i()->C_Decrypt(hSession, pEncryptedData, ulEncryptedDataLen, pData, pulDataLen);
358+
}
359+
catch (...)
360+
@@ -659,6 +731,8 @@ PKCS_API CK_RV C_DecryptUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncrypte
361+
{
362+
try
363+
{
364+
+ if (objects_deleted == 1)
365+
+ return CKR_FUNCTION_FAILED;
366+
return SoftHSM::i()->C_DecryptUpdate(hSession, pEncryptedData, ulEncryptedDataLen, pData, pDataLen);
367+
}
368+
catch (...)
369+
@@ -674,6 +748,8 @@ PKCS_API CK_RV C_DecryptFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_
370+
{
371+
try
372+
{
373+
+ if (objects_deleted == 1)
374+
+ return CKR_FUNCTION_FAILED;
375+
return SoftHSM::i()->C_DecryptFinal(hSession, pData, pDataLen);
376+
}
377+
catch (...)
378+
@@ -689,6 +765,8 @@ PKCS_API CK_RV C_DigestInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan
379+
{
380+
try
381+
{
382+
+ if (objects_deleted == 1)
383+
+ return CKR_FUNCTION_FAILED;
384+
return SoftHSM::i()->C_DigestInit(hSession, pMechanism);
385+
}
386+
catch (...)
387+
@@ -704,6 +782,8 @@ PKCS_API CK_RV C_Digest(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG
388+
{
389+
try
390+
{
391+
+ if (objects_deleted == 1)
392+
+ return CKR_FUNCTION_FAILED;
393+
return SoftHSM::i()->C_Digest(hSession, pData, ulDataLen, pDigest, pulDigestLen);
394+
}
395+
catch (...)
396+
@@ -719,6 +799,8 @@ PKCS_API CK_RV C_DigestUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_
397+
{
398+
try
399+
{
400+
+ if (objects_deleted == 1)
401+
+ return CKR_FUNCTION_FAILED;
402+
return SoftHSM::i()->C_DigestUpdate(hSession, pPart, ulPartLen);
403+
}
404+
catch (...)
405+
@@ -734,6 +816,8 @@ PKCS_API CK_RV C_DigestKey(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject)
406+
{
407+
try
408+
{
409+
+ if (objects_deleted == 1)
410+
+ return CKR_FUNCTION_FAILED;
411+
return SoftHSM::i()->C_DigestKey(hSession, hObject);
412+
}
413+
catch (...)
414+
@@ -749,6 +833,8 @@ PKCS_API CK_RV C_DigestFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pDigest, CK
415+
{
416+
try
417+
{
418+
+ if (objects_deleted == 1)
419+
+ return CKR_FUNCTION_FAILED;
420+
return SoftHSM::i()->C_DigestFinal(hSession, pDigest, pulDigestLen);
421+
}
422+
catch (...)
423+
@@ -764,6 +850,8 @@ PKCS_API CK_RV C_SignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanis
424+
{
425+
try
426+
{
427+
+ if (objects_deleted == 1)
428+
+ return CKR_FUNCTION_FAILED;
429+
return SoftHSM::i()->C_SignInit(hSession, pMechanism, hKey);
430+
}
431+
catch (...)
432+
@@ -779,6 +867,8 @@ PKCS_API CK_RV C_Sign(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ul
433+
{
434+
try
435+
{
436+
+ if (objects_deleted == 1)
437+
+ return CKR_FUNCTION_FAILED;
438+
return SoftHSM::i()->C_Sign(hSession, pData, ulDataLen, pSignature, pulSignatureLen);
439+
}
440+
catch (...)
441+
@@ -794,6 +884,8 @@ PKCS_API CK_RV C_SignUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_UL
442+
{
443+
try
444+
{
445+
+ if (objects_deleted == 1)
446+
+ return CKR_FUNCTION_FAILED;
447+
return SoftHSM::i()->C_SignUpdate(hSession, pPart, ulPartLen);
448+
}
449+
catch (...)
450+
@@ -809,6 +901,8 @@ PKCS_API CK_RV C_SignFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature, C
451+
{
452+
try
453+
{
454+
+ if (objects_deleted == 1)
455+
+ return CKR_FUNCTION_FAILED;
456+
return SoftHSM::i()->C_SignFinal(hSession, pSignature, pulSignatureLen);
457+
}
458+
catch (...)
459+
@@ -824,6 +918,8 @@ PKCS_API CK_RV C_SignRecoverInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pM
460+
{
461+
try
462+
{
463+
+ if (objects_deleted == 1)
464+
+ return CKR_FUNCTION_FAILED;
465+
return SoftHSM::i()->C_SignRecoverInit(hSession, pMechanism, hKey);
466+
}
467+
catch (...)
468+
@@ -839,6 +935,8 @@ PKCS_API CK_RV C_SignRecover(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_U
469+
{
470+
try
471+
{
472+
+ if (objects_deleted == 1)
473+
+ return CKR_FUNCTION_FAILED;
474+
return SoftHSM::i()->C_SignRecover(hSession, pData, ulDataLen, pSignature, pulSignatureLen);
475+
}
476+
catch (...)
477+
@@ -854,6 +952,8 @@ PKCS_API CK_RV C_VerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechan
478+
{
479+
try
480+
{
481+
+ if (objects_deleted == 1)
482+
+ return CKR_FUNCTION_FAILED;
483+
return SoftHSM::i()->C_VerifyInit(hSession, pMechanism, hKey);
484+
}
485+
catch (...)
486+
@@ -869,6 +969,8 @@ PKCS_API CK_RV C_Verify(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG
487+
{
488+
try
489+
{
490+
+ if (objects_deleted == 1)
491+
+ return CKR_FUNCTION_FAILED;
492+
return SoftHSM::i()->C_Verify(hSession, pData, ulDataLen, pSignature, ulSignatureLen);
493+
}
494+
catch (...)
495+
@@ -884,6 +986,8 @@ PKCS_API CK_RV C_VerifyUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart, CK_
496+
{
497+
try
498+
{
499+
+ if (objects_deleted == 1)
500+
+ return CKR_FUNCTION_FAILED;
501+
return SoftHSM::i()->C_VerifyUpdate(hSession, pPart, ulPartLen);
502+
}
503+
catch (...)
504+
@@ -899,6 +1003,8 @@ PKCS_API CK_RV C_VerifyFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature,
505+
{
506+
try
507+
{
508+
+ if (objects_deleted == 1)
509+
+ return CKR_FUNCTION_FAILED;
510+
return SoftHSM::i()->C_VerifyFinal(hSession, pSignature, ulSignatureLen);
511+
}
512+
catch (...)
513+
@@ -914,6 +1020,8 @@ PKCS_API CK_RV C_VerifyRecoverInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR
514+
{
515+
try
516+
{
517+
+ if (objects_deleted == 1)
518+
+ return CKR_FUNCTION_FAILED;
519+
return SoftHSM::i()->C_VerifyRecoverInit(hSession, pMechanism, hKey);
520+
}
521+
catch (...)
522+
@@ -929,6 +1037,8 @@ PKCS_API CK_RV C_VerifyRecover(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignatur
523+
{
524+
try
525+
{
526+
+ if (objects_deleted == 1)
527+
+ return CKR_FUNCTION_FAILED;
528+
return SoftHSM::i()->C_VerifyRecover(hSession, pSignature, ulSignatureLen, pData, pulDataLen);
529+
}
530+
catch (...)
531+
@@ -944,6 +1054,8 @@ PKCS_API CK_RV C_DigestEncryptUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPa
532+
{
533+
try
534+
{
535+
+ if (objects_deleted == 1)
536+
+ return CKR_FUNCTION_FAILED;
537+
return SoftHSM::i()->C_DigestEncryptUpdate(hSession, pPart, ulPartLen, pEncryptedPart, pulEncryptedPartLen);
538+
}
539+
catch (...)
540+
@@ -959,6 +1071,8 @@ PKCS_API CK_RV C_DecryptDigestUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPa
541+
{
542+
try
543+
{
544+
+ if (objects_deleted == 1)
545+
+ return CKR_FUNCTION_FAILED;
546+
return SoftHSM::i()->C_DecryptDigestUpdate(hSession, pPart, ulPartLen, pDecryptedPart, pulDecryptedPartLen);
547+
}
548+
catch (...)
549+
@@ -974,6 +1088,8 @@ PKCS_API CK_RV C_SignEncryptUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart
550+
{
551+
try
552+
{
553+
+ if (objects_deleted == 1)
554+
+ return CKR_FUNCTION_FAILED;
555+
return SoftHSM::i()->C_SignEncryptUpdate(hSession, pPart, ulPartLen, pEncryptedPart, pulEncryptedPartLen);
556+
}
557+
catch (...)
558+
@@ -989,6 +1105,8 @@ PKCS_API CK_RV C_DecryptVerifyUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEn
559+
{
560+
try
561+
{
562+
+ if (objects_deleted == 1)
563+
+ return CKR_FUNCTION_FAILED;
564+
return SoftHSM::i()->C_DecryptVerifyUpdate(hSession, pEncryptedPart, ulEncryptedPartLen, pPart, pulPartLen);
565+
}
566+
catch (...)
567+
@@ -1004,6 +1122,8 @@ PKCS_API CK_RV C_GenerateKey(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMecha
568+
{
569+
try
570+
{
571+
+ if (objects_deleted == 1)
572+
+ return CKR_FUNCTION_FAILED;
573+
return SoftHSM::i()->C_GenerateKey(hSession, pMechanism, pTemplate, ulCount, phKey);
574+
}
575+
catch (...)
576+
@@ -1029,6 +1149,8 @@ PKCS_API CK_RV C_GenerateKeyPair
577+
{
578+
try
579+
{
580+
+ if (objects_deleted == 1)
581+
+ return CKR_FUNCTION_FAILED;
582+
return SoftHSM::i()->C_GenerateKeyPair(hSession, pMechanism, pPublicKeyTemplate, ulPublicKeyAttributeCount, pPrivateKeyTemplate, ulPrivateKeyAttributeCount, phPublicKey, phPrivateKey);
583+
}
584+
catch (...)
585+
@@ -1052,6 +1174,8 @@ PKCS_API CK_RV C_WrapKey
586+
{
587+
try
588+
{
589+
+ if (objects_deleted == 1)
590+
+ return CKR_FUNCTION_FAILED;
591+
return SoftHSM::i()->C_WrapKey(hSession, pMechanism, hWrappingKey, hKey, pWrappedKey, pulWrappedKeyLen);
592+
}
593+
catch (...)
594+
@@ -1077,6 +1201,8 @@ PKCS_API CK_RV C_UnwrapKey
595+
{
596+
try
597+
{
598+
+ if (objects_deleted == 1)
599+
+ return CKR_FUNCTION_FAILED;
600+
return SoftHSM::i()->C_UnwrapKey(hSession, pMechanism, hUnwrappingKey, pWrappedKey, ulWrappedKeyLen, pTemplate, ulCount, phKey);
601+
}
602+
catch (...)
603+
@@ -1100,6 +1226,8 @@ PKCS_API CK_RV C_DeriveKey
604+
{
605+
try
606+
{
607+
+ if (objects_deleted == 1)
608+
+ return CKR_FUNCTION_FAILED;
609+
return SoftHSM::i()->C_DeriveKey(hSession, pMechanism, hBaseKey, pTemplate, ulCount, phKey);
610+
}
611+
catch (...)
612+
@@ -1115,6 +1243,8 @@ PKCS_API CK_RV C_SeedRandom(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSeed, CK_UL
613+
{
614+
try
615+
{
616+
+ if (objects_deleted == 1)
617+
+ return CKR_FUNCTION_FAILED;
618+
return SoftHSM::i()->C_SeedRandom(hSession, pSeed, ulSeedLen);
619+
}
620+
catch (...)
621+
@@ -1130,6 +1260,8 @@ PKCS_API CK_RV C_GenerateRandom(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pRandomD
622+
{
623+
try
624+
{
625+
+ if (objects_deleted == 1)
626+
+ return CKR_FUNCTION_FAILED;
627+
return SoftHSM::i()->C_GenerateRandom(hSession, pRandomData, ulRandomLen);
628+
}
629+
catch (...)
630+
@@ -1145,6 +1277,8 @@ PKCS_API CK_RV C_GetFunctionStatus(CK_SESSION_HANDLE hSession)
631+
{
632+
try
633+
{
634+
+ if (objects_deleted == 1)
635+
+ return CKR_FUNCTION_FAILED;
636+
return SoftHSM::i()->C_GetFunctionStatus(hSession);
637+
}
638+
catch (...)
639+
@@ -1160,6 +1294,8 @@ PKCS_API CK_RV C_CancelFunction(CK_SESSION_HANDLE hSession)
640+
{
641+
try
642+
{
643+
+ if (objects_deleted == 1)
644+
+ return CKR_FUNCTION_FAILED;
645+
return SoftHSM::i()->C_CancelFunction(hSession);
646+
}
647+
catch (...)
648+
@@ -1175,6 +1311,8 @@ PKCS_API CK_RV C_WaitForSlotEvent(CK_FLAGS flags, CK_SLOT_ID_PTR pSlot, CK_VOID_
649+
{
650+
try
651+
{
652+
+ if (objects_deleted == 1)
653+
+ return CKR_FUNCTION_FAILED;
654+
return SoftHSM::i()->C_WaitForSlotEvent(flags, pSlot, pReserved);
655+
}
656+
catch (...)

‎patches/softhsm-2.6.1/series

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# generated by git-ptx-patches
2+
#tag:base --start-number 1
3+
0001-Prevent-accessing-of-global-c-objects-once-they-are-.patch
4+
# 4e7b13f384378f31b3cf250e0be9d4c0 - git-ptx-patches magic

0 commit comments

Comments
 (0)
Please sign in to comment.