Fix a build error with MSVC

Also fixes a minor bug on Windows with timers running over ~49 days.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
Gilles Peskine
2026-02-19 14:16:42 +01:00
parent 7ea318246c
commit 5890b22b82
5 changed files with 16 additions and 6 deletions

View File

@@ -3,3 +3,11 @@ API changes
TF-PSA-Crypto configuration, unless MBEDTLS_TIMING_ALT is enabled.
As a benefit, platforms where the default implementation is not
supported now only need to implement MBEDTLS_PLATFORM_MS_TIME_ALT.
* When MBEDTLS_TIMING_ALT is enabled, the function
mbedtls_timing_get_timer() now returns unsigned long long instead
of unsigned long.
Bugfix
* mbedtls_timing_get_delay() now correctly treats a timer as expired
after more than 2^32 ms (about 49 days) on platforms where long is
a 32-bit type.

View File

@@ -53,7 +53,7 @@ typedef struct mbedtls_timing_delay_context {
#endif /* MBEDTLS_TIMING_ALT */
/* Internal use */
unsigned long mbedtls_timing_get_timer(struct mbedtls_timing_hr_time *val, int reset);
unsigned long long mbedtls_timing_get_timer(struct mbedtls_timing_hr_time *val, int reset);
/**
* \brief Set a pair of delays to watch

View File

@@ -13,7 +13,7 @@
#if !defined(MBEDTLS_TIMING_ALT)
unsigned long mbedtls_timing_get_timer(struct mbedtls_timing_hr_time *val, int reset)
unsigned long long mbedtls_timing_get_timer(struct mbedtls_timing_hr_time *val, int reset)
{
if (reset) {
val->ms = mbedtls_ms_time();
@@ -45,7 +45,7 @@ void mbedtls_timing_set_delay(void *data, uint32_t int_ms, uint32_t fin_ms)
int mbedtls_timing_get_delay(void *data)
{
mbedtls_timing_delay_context *ctx = (mbedtls_timing_delay_context *) data;
unsigned long elapsed_ms;
unsigned long long elapsed_ms;
if (ctx->fin_ms == 0) {
return -1;

View File

@@ -360,7 +360,9 @@ static unsigned elapsed_time(void)
return 0;
}
return mbedtls_timing_get_timer(&hires, 0);
/* Wraps after ~49.7 days (assuming 32-bit int).
* Don't run udp_proxy that long! */
return (unsigned) mbedtls_timing_get_timer(&hires, 0);
}
typedef struct {

View File

@@ -82,7 +82,7 @@ int main(int argc, char *argv[])
int exit_code = MBEDTLS_EXIT_FAILURE;
unsigned i, j;
struct mbedtls_timing_hr_time timer;
unsigned long ms;
unsigned long long ms;
psa_status_t status = psa_crypto_init();
if (status != PSA_SUCCESS) {
@@ -151,7 +151,7 @@ int main(int argc, char *argv[])
mbedtls_printf(".");
}
ms = mbedtls_timing_get_timer(&timer, 0);
mbedtls_printf("\n%u iterations -> %lu ms\n", opt.iterations, ms);
mbedtls_printf("\n%u iterations -> %llu ms\n", opt.iterations, ms);
exit_code = MBEDTLS_EXIT_SUCCESS;
exit: