From 608672896834c57133dd4dfaa4701fc8ae6973e1 Mon Sep 17 00:00:00 2001 From: Masashi Honma Date: Tue, 16 Nov 2021 09:35:10 +0900 Subject: [PATCH] Fix possible segfault occurs when mp_clear() is executed for uninitialized mp_int If NULL is passed as the digest argument of wc_DsaSign(), mp_clear() will be called before mp_init() is called. This can cause segmentation fault. Signed-off-by: Masashi Honma --- wolfcrypt/src/dsa.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/wolfcrypt/src/dsa.c b/wolfcrypt/src/dsa.c index ee937d51b..15a1d5b0a 100644 --- a/wolfcrypt/src/dsa.c +++ b/wolfcrypt/src/dsa.c @@ -664,14 +664,12 @@ int wc_DsaSign(const byte* digest, byte* out, DsaKey* key, WC_RNG* rng) int ret = 0, halfSz = 0; byte* tmp; /* initial output pointer */ + if (digest == NULL || out == NULL || key == NULL || rng == NULL) + return BAD_FUNC_ARG; + SAVE_VECTOR_REGISTERS(return _svr_ret;); do { - if (digest == NULL || out == NULL || key == NULL || rng == NULL) { - ret = BAD_FUNC_ARG; - break; - } - #ifdef WOLFSSL_SMALL_STACK k = (mp_int *)XMALLOC(sizeof *k, key->heap, DYNAMIC_TYPE_TMP_BUFFER); kInv = (mp_int *)XMALLOC(sizeof *kInv, key->heap,