From 11d84bea8681c6b7fc78bd3dcda84896bea73189 Mon Sep 17 00:00:00 2001 From: Daniel Pouzzner Date: Mon, 11 Aug 2025 16:13:34 -0500 Subject: [PATCH] wolfcrypt/src/rsa.c: fix improperly handled SAVE_VECTOR_REGISTERS() retval in wc_CheckProbablePrime_ex(), and in wc_MakeRsaKey(), make sure not to RESTORE_VECTOR_REGISTERS() if SAVE_VECTOR_REGISTERS() failed. --- .wolfssl_known_macro_extras | 1 - wolfcrypt/src/rsa.c | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.wolfssl_known_macro_extras b/.wolfssl_known_macro_extras index 643c0af731..5e2dae25ea 100644 --- a/.wolfssl_known_macro_extras +++ b/.wolfssl_known_macro_extras @@ -561,7 +561,6 @@ USE_STSAFE_VERBOSE USE_TLSV13 USE_WOLF_STRNSTR USS_API -WC_16BIT_CPU WC_AESXTS_STREAM_NO_REQUEST_ACCOUNTING WC_AES_BS_WORD_SIZE WC_AES_GCM_DEC_AUTH_EARLY diff --git a/wolfcrypt/src/rsa.c b/wolfcrypt/src/rsa.c index a0670397d2..7014e6dede 100644 --- a/wolfcrypt/src/rsa.c +++ b/wolfcrypt/src/rsa.c @@ -4763,12 +4763,11 @@ int wc_CheckProbablePrime_ex(const byte* pRaw, word32 pRawSz, if (ret == MP_OKAY) ret = mp_read_unsigned_bin(e, eRaw, eRawSz); - if (ret == MP_OKAY) { + if (ret == MP_OKAY) SAVE_VECTOR_REGISTERS(ret = _svr_ret;); - if (ret == MP_OKAY) - ret = _CheckProbablePrime(p, Q, e, nlen, isPrime, rng); - + if (ret == 0) { + ret = _CheckProbablePrime(p, Q, e, nlen, isPrime, rng); RESTORE_VECTOR_REGISTERS(); } @@ -5173,7 +5172,8 @@ int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng) } #endif - RESTORE_VECTOR_REGISTERS(); + if (err != WC_NO_ERR_TRACE(WC_ACCEL_INHIBIT_E)) + RESTORE_VECTOR_REGISTERS(); /* Last value p - 1. */ mp_forcezero(tmp1);