From 09f54863c5737526d05d1e5b2c2130b7481654ea Mon Sep 17 00:00:00 2001 From: Parminder Singh <61920513+parmi93@users.noreply.github.com> Date: Sat, 30 May 2026 15:30:58 +0100 Subject: [PATCH 1/2] fix(stse_generate_random): fix index overflow and incorrect chunk increment The previous implementation incremented the index by STSAFEA_MAXIMUM_RNG_SIZE even for the last chunk, which could cause an integer overflow and potentially an infinite loop when random_size is close to UINT16_MAX. Replaced index-based iteration with pointer arithmetic and random_size decrement to avoid overflow. Added early return STSE_OK for random_size == 0. --- api/stse_random.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/api/stse_random.c b/api/stse_random.c index 6e6a483..4ecfac3 100644 --- a/api/stse_random.c +++ b/api/stse_random.c @@ -30,6 +30,10 @@ stse_ReturnCode_t stse_generate_random( return (STSE_API_HANDLER_NOT_INITIALISED); } + if (random_size == 0) { + return (STSE_OK); + } + if (pRandom == NULL) { return (STSE_API_INVALID_PARAMETER); } @@ -38,17 +42,18 @@ stse_ReturnCode_t stse_generate_random( #ifdef STSE_CONF_STSAFE_L_SUPPORT if (pSTSE->device_type != STSAFE_L010) { #endif /* STSE_CONF_STSAFE_L_SUPPORT */ - for (PLAT_UI16 index = 0; index < random_size;) { - ret = stsafea_generate_random( - pSTSE, - &pRandom[index], - ((random_size - index) < STSAFEA_MAXIMUM_RNG_SIZE) ? (random_size - index) : STSAFEA_MAXIMUM_RNG_SIZE); + while (0 < random_size) { + PLAT_UI16 chunk = (random_size < STSAFEA_MAXIMUM_RNG_SIZE) ? + random_size : STSAFEA_MAXIMUM_RNG_SIZE; + + ret = stsafea_generate_random(pSTSE, pRandom, chunk); if (ret != STSE_OK) { break; } - index += STSAFEA_MAXIMUM_RNG_SIZE; + random_size -= chunk; + pRandom += chunk; } #ifdef STSE_CONF_STSAFE_L_SUPPORT } From bb592c72842cfa437ee398e2dc6571ad08d69106 Mon Sep 17 00:00:00 2001 From: Parminder Singh <61920513+parmi93@users.noreply.github.com> Date: Sat, 30 May 2026 15:35:11 +0100 Subject: [PATCH 2/2] doc(stse_generate_random): fix random_size doxygen tag from [in,out] to [in] --- api/stse_random.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/stse_random.h b/api/stse_random.h index f391def..cfa75b9 100644 --- a/api/stse_random.h +++ b/api/stse_random.h @@ -33,7 +33,7 @@ * \details This API use the STSE to generate random number * \param[in] pSTSE Pointer to target STSecureElement device * \param[in,out] pRandom Pointer to random buffer - * \param[in,out] random_size Random size + * \param[in] random_size Random size * \return \ref STSE_OK on success ; \ref stse_ReturnCode_t error code otherwise */ stse_ReturnCode_t stse_generate_random(