From 7326c62efbac67775740a29e6a394013638a2970 Mon Sep 17 00:00:00 2001 From: Shelly Liberman Date: Tue, 1 Dec 2020 13:28:30 +0200 Subject: [PATCH] Add flow control to platform rnd buf Signed-off-by: Shelly Liberman --- include/mbedtls/config.h | 2 +- library/platform_util.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/include/mbedtls/config.h b/include/mbedtls/config.h index 43a98300e..ee25107d2 100644 --- a/include/mbedtls/config.h +++ b/include/mbedtls/config.h @@ -2988,7 +2988,7 @@ * * Uncomment to provide your own alternate implementation for mbedtls_platform_fault(), * used in library/platform_util.c to signal a fault injection in either - * mbedtls_platform_memcpy or mbedtls_platform_memset. + * mbedtls_platform_memcpy, mbedtls_platform_memset or mbedtls_platform_random_buf. * * You will need to provide a header "platform_fault.h" and an implementation at * compile time. diff --git a/library/platform_util.c b/library/platform_util.c index ecfdb84d1..c808750c6 100644 --- a/library/platform_util.c +++ b/library/platform_util.c @@ -334,6 +334,7 @@ uint32_t mbedtls_platform_random_uint32( void ) void mbedtls_platform_random_buf( uint8_t *buf, size_t len ) { + volatile size_t flow_control = 0; uint16_t val; while( len > 1 ) @@ -342,13 +343,19 @@ void mbedtls_platform_random_buf( uint8_t *buf, size_t len ) buf[len-1] = (uint8_t)val; buf[len-2] = (uint8_t)(val>>8); len -= 2; + flow_control += 2; } if( len == 1 ) { buf[0] = (uint8_t)mbedtls_platform_random_uint16(); + flow_control ++; } - return; + if ( flow_control == len ) + { + return; + } + mbedtls_platform_fault(); } uint32_t mbedtls_platform_random_in_range( uint32_t num )