]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Fix error handling in CRYPTO_get_ex_new_index
authorBernd Edlinger <bernd.edlinger@hotmail.de>
Tue, 19 Sep 2023 18:15:18 +0000 (20:15 +0200)
committerBernd Edlinger <bernd.edlinger@hotmail.de>
Thu, 21 Sep 2023 12:43:08 +0000 (14:43 +0200)
If an out of memory error happens when the index zero
is reserved in a newly created ip->meth stack object,
that reservation is not done in a second attempt, which makes
various X_set_ex_data overwrite the value of X_set_app_data.

Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/22149)

crypto/ex_data.c

index c9ec9d33370d2ec7345242e22cba37241f83d6e7..0412f38e9baae8eeac11073016fc208fbb80cc52 100644 (file)
@@ -171,6 +171,8 @@ int ossl_crypto_get_ex_new_index_ex(OSSL_LIB_CTX *ctx, int class_index,
          * "app_data" routines use ex_data index zero.  See RT 3710. */
         if (ip->meth == NULL
             || !sk_EX_CALLBACK_push(ip->meth, NULL)) {
+            sk_EX_CALLBACK_free(ip->meth);
+            ip->meth = NULL;
             ERR_raise(ERR_LIB_CRYPTO, ERR_R_CRYPTO_LIB);
             goto err;
         }