Commit f666172c46 for openssl.org
commit f666172c4651d5a0a5f6425f899b3ef1a1b2eaac
Author: Greensi7 <adam.tabak04@gmail.com>
Date: Thu Aug 13 23:17:46 2026 +0200
Fix memory leak in ossl_decoder_instance_new_forprov()
On failed memory allocation in decoder_lib.c and ossl_decoder_instance_new_forprov()
allocation of return value OSSL_DECODER_INSTANCE* is not checked
causing decoderctx to leak.
Found by : store fuzzer (MFAIL-test)
Reviewed-by: Jakub Zelenka <jakub.zelenka@openssl.foundation>
Reviewed-by: Neil Horman <nhorman@openssl.org>
MergeDate: Tue Sep 15 14:20:03 2026
(Merged from https://github.com/openssl/openssl/pull/32413)
diff --git a/crypto/encode_decode/decoder_lib.c b/crypto/encode_decode/decoder_lib.c
index 7be00d21a1..3711f2653b 100644
--- a/crypto/encode_decode/decoder_lib.c
+++ b/crypto/encode_decode/decoder_lib.c
@@ -231,6 +231,7 @@ OSSL_DECODER_INSTANCE *
ossl_decoder_instance_new_forprov(OSSL_DECODER *decoder, void *provctx,
const char *input_structure)
{
+ OSSL_DECODER_INSTANCE *decoder_inst = NULL;
void *decoderctx;
if (!ossl_assert(decoder != NULL)) {
@@ -251,7 +252,10 @@ ossl_decoder_instance_new_forprov(OSSL_DECODER *decoder, void *provctx,
return 0;
}
}
- return ossl_decoder_instance_new(decoder, decoderctx);
+ decoder_inst = ossl_decoder_instance_new(decoder, decoderctx);
+ if (decoder_inst == NULL)
+ decoder->freectx(decoderctx);
+ return decoder_inst;
}
OSSL_DECODER_INSTANCE *ossl_decoder_instance_new(OSSL_DECODER *decoder,