Commit 71c431ab0f for openssl.org

commit 71c431ab0f5f15668c0056a833fabacc848faf5e
Author: Mounir IDRASSI <mounir.idrassi@idrix.fr>
Date:   Mon Sep 7 09:51:27 2026 +0900

    encode_key2any: cleanse private DER on failure in key_to_p8info()

    PKCS8_pkey_set0() can fail before taking ownership of the DER
    buffer, so clear it before freeing it.

    Fixes: cb58d81e68c7 "PROV SERIALIZER: add common functionality to serialize keys"
    Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com>
    Reviewed-by: Frederik Wedel-Heinen <fwh.openssl@gmail.com>
    Reviewed-by: Eugene Syromiatnikov <esyr@openssl.org>
    Merge-date: Tue Nov 10 11:48:49 2026
    Merged-from: https://github.com/openssl/openssl/pull/32714

diff --git a/providers/implementations/encode_decode/encode_key2any.c b/providers/implementations/encode_decode/encode_key2any.c
index 082487b92b..29f0b04c85 100644
--- a/providers/implementations/encode_decode/encode_key2any.c
+++ b/providers/implementations/encode_decode/encode_key2any.c
@@ -96,7 +96,7 @@ static PKCS8_PRIV_KEY_INFO *key_to_p8info(const void *key, int key_nid,
 {
     /* der, derlen store the key DER output and its length */
     unsigned char *der = NULL;
-    int derlen;
+    int derlen = 0;
     /* The final PKCS#8 info */
     PKCS8_PRIV_KEY_INFO *p8info = NULL;

@@ -104,6 +104,8 @@ static PKCS8_PRIV_KEY_INFO *key_to_p8info(const void *key, int key_nid,
         || (derlen = k2d(key, &der, (void *)ctx)) <= 0
         || !PKCS8_pkey_set0(p8info, OBJ_nid2obj(key_nid), 0,
             params_type, params, der, derlen)) {
+        if (der != NULL && derlen > 0)
+            OPENSSL_cleanse(der, derlen);
         ERR_raise(ERR_LIB_PROV, ERR_R_ASN1_LIB);
         PKCS8_PRIV_KEY_INFO_free(p8info);
         free_asn1_data(params_type, params);