diff --git a/crypto/bio/bio_lib.c b/crypto/bio/bio_lib.c index 19cd06983..cc859da74 100644 --- a/crypto/bio/bio_lib.c +++ b/crypto/bio/bio_lib.c @@ -535,8 +535,10 @@ BIO *BIO_dup_chain(BIO *in) /* copy app data */ if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_BIO, &new_bio->ex_data, - &bio->ex_data)) + &bio->ex_data)) { + BIO_free(new_bio); goto err; + } if (ret == NULL) { eoc = new_bio; @@ -548,7 +550,8 @@ BIO *BIO_dup_chain(BIO *in) } return (ret); err: - BIO_free(ret); + BIO_free_all(ret); + return (NULL); }