libmbedtls: use mempool_calloc() for temporary memory
mbedtls_mpi_exp_mod_optionally_safe() needs a large chunk of temporary
memory for the mbedtls_mpi_core_exp_mod() function. The amount of memory
is too much to reliably allocate from the heap. So use mempool_calloc()
instead of mbedtls_calloc(), similar to using mbedtls_mpi_init_mempool()
instead of mbedtls_mpi_init().
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
Acked-by: Jerome Forissier <jerome.forissier@linaro.org>
Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
diff --git a/lib/libmbedtls/mbedtls/library/bignum.c b/lib/libmbedtls/mbedtls/library/bignum.c
index ce7fe1a..107a397 100644
--- a/lib/libmbedtls/mbedtls/library/bignum.c
+++ b/lib/libmbedtls/mbedtls/library/bignum.c
@@ -1756,7 +1756,8 @@
* Allocate working memory for mbedtls_mpi_core_exp_mod()
*/
size_t T_limbs = mbedtls_mpi_core_exp_mod_working_limbs(N->n, E->n);
- mbedtls_mpi_uint *T = (mbedtls_mpi_uint *) mbedtls_calloc(T_limbs, sizeof(mbedtls_mpi_uint));
+ mbedtls_mpi_uint *T = mempool_calloc(mbedtls_mpi_mempool, T_limbs,
+ sizeof(mbedtls_mpi_uint));
if (T == NULL) {
return MBEDTLS_ERR_MPI_ALLOC_FAILED;
}
@@ -1830,7 +1831,8 @@
cleanup:
- mbedtls_mpi_zeroize_and_free(T, T_limbs);
+ mbedtls_mpi_zeroize(T, T_limbs);
+ mempool_free(mbedtls_mpi_mempool, T);
if (prec_RR == NULL || prec_RR->p == NULL) {
mbedtls_mpi_free(&RR);