@@ -42,6 +42,11 @@ static THREAD_LS_T TPM2_CTX* gActiveTPM;
4242static volatile int gWolfCryptRefCount = 0 ;
4343#endif
4444
45+ #if !defined(WOLFTPM2_NO_WOLFCRYPT ) && !defined(WOLFTPM_NO_LOCK ) && \
46+ !defined(SINGLE_THREADED )
47+ static wolfSSL_Mutex gHwLock WOLFSSL_MUTEX_INITIALIZER_CLAUSE (gHwLock );
48+ #endif
49+
4550#ifdef WOLFTPM_LINUX_DEV
4651#define INTERNAL_SEND_COMMAND TPM2_LINUX_SendCommand
4752#define TPM2_INTERNAL_CLEANUP (ctx )
@@ -61,43 +66,24 @@ static volatile int gWolfCryptRefCount = 0;
6166/******************************************************************************/
6267static TPM_RC TPM2_AcquireLock (TPM2_CTX * ctx )
6368{
64- #if defined(WOLFTPM2_NO_WOLFCRYPT ) || defined(WOLFTPM_NO_LOCK )
65- (void )ctx ;
66- #else
67- int ret ;
68-
69- if (!ctx -> hwLockInit ) {
70- if (wc_InitMutex (& ctx -> hwLock ) != 0 ) {
71- #ifdef DEBUG_WOLFTPM
72- printf ("TPM Mutex Init failed\n" );
73- #endif
74- return TPM_RC_FAILURE ;
75- }
76- ctx -> hwLockInit = 1 ;
77- ctx -> lockCount = 0 ;
78- }
79-
80- if (ctx -> lockCount == 0 ) {
81- ret = wc_LockMutex (& ctx -> hwLock );
82- if (ret != 0 )
83- return TPM_RC_FAILURE ;
69+ #if !defined(WOLFTPM2_NO_WOLFCRYPT ) && !defined(WOLFTPM_NO_LOCK ) && \
70+ !defined(SINGLE_THREADED )
71+ int ret = wc_LockMutex (& gHwLock );
72+ if (ret != 0 ) {
73+ return TPM_RC_FAILURE ;
8474 }
85- ctx -> lockCount ++ ;
8675#endif
76+ (void )ctx ;
8777 return TPM_RC_SUCCESS ;
8878}
8979
9080static void TPM2_ReleaseLock (TPM2_CTX * ctx )
9181{
92- #if defined(WOLFTPM2_NO_WOLFCRYPT ) || defined(WOLFTPM_NO_LOCK )
93- (void )ctx ;
94- #else
95- ctx -> lockCount -- ;
96- if (ctx -> lockCount == 0 ) {
97- wc_UnLockMutex (& ctx -> hwLock );
98- }
99-
82+ #if !defined(WOLFTPM2_NO_WOLFCRYPT ) && !defined(WOLFTPM_NO_LOCK ) && \
83+ !defined(SINGLE_THREADED )
84+ wc_UnLockMutex (& gHwLock );
10085#endif
86+ (void )ctx ;
10187}
10288
10389static int TPM2_CommandProcess (TPM2_CTX * ctx , TPM2_Packet * packet ,
@@ -507,6 +493,9 @@ static inline int TPM2_WolfCrypt_Init(void)
507493 if (rc == 0 )
508494 rc = wc_SetSeed_Cb (wc_GenerateSeed );
509495 #endif
496+ #ifndef WOLFSSL_MUTEX_INITIALIZER
497+ wc_InitMutex (& gHwMutex );
498+ #endif
510499 }
511500 gWolfCryptRefCount ++ ;
512501
@@ -697,19 +686,16 @@ TPM_RC TPM2_Cleanup(TPM2_CTX* ctx)
697686 wc_FreeRng (& ctx -> rng );
698687 }
699688 #endif
700- #ifndef WOLFTPM_NO_LOCK
701- if (ctx -> hwLockInit ) {
702- ctx -> hwLockInit = 0 ;
703- wc_FreeMutex (& ctx -> hwLock );
704- }
705- #endif
706689
707690 /* track wolf initialize reference count in wolfTPM. wolfCrypt does not
708- properly track reference count in v4.1 or older releases */
691+ * properly track reference count in v4.1 or older releases */
709692 gWolfCryptRefCount -- ;
710693 if (gWolfCryptRefCount < 0 )
711694 gWolfCryptRefCount = 0 ;
712695 if (gWolfCryptRefCount == 0 ) {
696+ #ifndef WOLFSSL_MUTEX_INITIALIZER
697+ wc_FreeMutex (& gHwMutex );
698+ #endif
713699 wolfCrypt_Cleanup ();
714700 }
715701#endif /* !WOLFTPM2_NO_WOLFCRYPT */
0 commit comments