From fcfd4a6158c7e046316fb05362bd29c79d5f1103 Mon Sep 17 00:00:00 2001 From: Ingo Franzki Date: Wed, 8 Mar 2023 16:24:44 +0100 Subject: [PATCH] libseckey: Fix error checking when building ECDSA signatures MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OpenSSL function i2d_ECDSA_SIG() returns a negative value in case of an error, so check the returned length for <= zero to detect an error. Reported-by: Holger Dengler Reviewed-by: Holger Dengler Signed-off-by: Ingo Franzki Signed-off-by: Jan Höppner --- libseckey/sk_utilities.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/libseckey/sk_utilities.c b/libseckey/sk_utilities.c index 16f88d85..e1c7f28c 100644 --- a/libseckey/sk_utilities.c +++ b/libseckey/sk_utilities.c @@ -776,6 +776,10 @@ int SK_UTIL_build_ecdsa_signature(const unsigned char *raw_sig, bn_s = NULL; der_len = i2d_ECDSA_SIG(ec_sig, NULL); + if (der_len <= 0) { + rc = -EIO; + goto out; + } if (sig == NULL) { *sig_len = der_len; @@ -788,13 +792,14 @@ int SK_UTIL_build_ecdsa_signature(const unsigned char *raw_sig, memset(sig, 0, *sig_len); der = sig; - *sig_len = i2d_ECDSA_SIG(ec_sig, &der); - - if (*sig_len == 0) { + der_len = i2d_ECDSA_SIG(ec_sig, &der); + if (der_len <= 0) { rc = -EIO; goto out; } + *sig_len = der_len; + out: if (ec_sig != NULL) ECDSA_SIG_free(ec_sig);