Check for NULL cleanup function before using it in encoder_process
authorNeil Horman <nhorman@openssl.org>
Sat, 16 Dec 2023 20:32:48 +0000 (15:32 -0500)
committerNeil Horman <nhorman@openssl.org>
Fri, 16 Feb 2024 14:11:04 +0000 (09:11 -0500)
encoder_process assumes a cleanup function has been set in the currently
in-use encoder during processing, which can lead to segfaults if said
function hasn't been set

Add a NULL check for this condition, returning -1 if it is not set

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/23069)

(cherry picked from commit cf57c3ecfa416afbc47d36633981034809ee6792)

crypto/encode_decode/encoder_lib.c

index 7868da79b746cde293ac3007ad562bb6c6611d24..9a0c689ec0aadd14243c56efb1dacf1b5c20c91b 100644 (file)
@@ -59,6 +59,11 @@ int OSSL_ENCODER_to_bio(OSSL_ENCODER_CTX *ctx, BIO *out)
         return 0;
     }
 
+    if (ctx->cleanup == NULL || ctx->construct == NULL) {
+        ERR_raise(ERR_LIB_OSSL_ENCODER, ERR_R_INIT_FAIL);
+        return 0;
+    }
+
     return encoder_process(&data) > 0;
 }