]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
err_set_debug(): Prevent possible recursion on malloc failure
authorTomas Mraz <tomas@openssl.org>
Mon, 3 Oct 2022 08:40:40 +0000 (10:40 +0200)
committerTomas Mraz <tomas@openssl.org>
Tue, 4 Oct 2022 13:34:15 +0000 (15:34 +0200)
Fixes #19331

Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/19332)

crypto/err/err_local.h

index d4e19dff241b0b034ddfedab2faf825d56795222..7d785ab6181e30eddce25c5f6a766c3bb63dcfb9 100644 (file)
@@ -7,6 +7,7 @@
  * https://www.openssl.org/source/license.html
  */
 
+#include <string.h>
 #include <openssl/err.h>
 #include <openssl/e_os2.h>
 
@@ -56,8 +57,11 @@ static ossl_inline void err_set_debug(ERR_STATE *es, size_t i,
     OPENSSL_free(es->err_file[i]);
     if (file == NULL || file[0] == '\0')
         es->err_file[i] = NULL;
-    else
-        es->err_file[i] = OPENSSL_strdup(file);
+    else if ((es->err_file[i] = CRYPTO_malloc(strlen(file) + 1,
+                                              NULL, 0)) != NULL)
+        /* We cannot use OPENSSL_strdup due to possible recursion */
+        strcpy(es->err_file[i], file);
+
     es->err_line[i] = line;
     OPENSSL_free(es->err_func[i]);
     if (fn == NULL || fn[0] == '\0')