Skip to content

Commit 77f9faf

Browse files
Ron EldorRon Eldor
authored andcommitted
Use a mutex in platform setup \ teardown functions
Use a singleton Mutex in platforms_alt functions, to be shared with the trng function, to save RAM. Rename `platform_alt.c` to `platform_alt.cpp` as the mutex is in a `singletonPtr` template class.
1 parent c94b586 commit 77f9faf

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

features/mbedtls/platform/src/mbed_trng.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,19 @@
1717
#if DEVICE_TRNG
1818

1919
#include "hal/trng_api.h"
20+
#include "platform/SingletonPtr.h"
2021
#include "platform/PlatformMutex.h"
2122

23+
SingletonPtr<PlatformMutex> mbedtls_mutex;
24+
2225
extern "C"
2326
int mbedtls_hardware_poll( void *data, unsigned char *output, size_t len, size_t *olen ) {
24-
static PlatformMutex trng_mutex;
2527
trng_t trng_obj;
26-
trng_mutex.lock();
28+
mbedtls_mutex->lock();
2729
trng_init(&trng_obj);
2830
int ret = trng_get_bytes(&trng_obj, output, len, olen);
2931
trng_free(&trng_obj);
30-
trng_mutex.unlock();
32+
mbedtls_mutex->unlock();
3133
return ret;
3234
}
3335

features/mbedtls/platform/src/platform_alt.c renamed to features/mbedtls/platform/src/platform_alt.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,33 +20,38 @@
2020

2121
#include "mbedtls/platform.h"
2222
#if defined(MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT)
23-
#include "mbed_critical.h"
23+
#include "platform/SingletonPtr.h"
24+
#include "platform/PlatformMutex.h"
2425

2526
mbedtls_platform_context plat_ctx = { { 0 } };
27+
extern SingletonPtr<PlatformMutex> mbedtls_mutex;
2628

2729
int mbedtls_platform_setup( mbedtls_platform_context *unused_ctx )
2830
{
2931
int ret = 0;
30-
31-
core_util_atomic_incr_u32( ( volatile uint32_t * )&plat_ctx.reference_count, 1 );
32+
mbedtls_mutex->lock();
33+
++plat_ctx.reference_count;
3234

3335
if( plat_ctx.reference_count == 1 )
3436
{
3537
/* call platform specific code to setup crypto driver */
3638
ret = crypto_platform_setup( &plat_ctx.platform_impl_ctx );
3739
}
40+
mbedtls_mutex->unlock();
3841
return ( ret );
3942
}
4043

4144
void mbedtls_platform_teardown( mbedtls_platform_context *unused_ctx )
4245
{
43-
core_util_atomic_decr_u32( ( volatile uint32_t * )&plat_ctx.reference_count, 1 );
46+
mbedtls_mutex->lock();
47+
--plat_ctx.reference_count;
4448
if( plat_ctx.reference_count < 1 )
4549
{
4650
/* call platform specific code to terminate crypto driver */
4751
crypto_platform_terminate( &plat_ctx.platform_impl_ctx );
4852
plat_ctx.reference_count = 0;
4953
}
54+
mbedtls_mutex->unlock();
5055
}
5156

5257
#endif /* MBEDTLS_PLATFORM_SETUP_TEARDOWN_ALT*/

0 commit comments

Comments
 (0)