PKCS#8: free data on error path in newpass_bag
authorPauli <paul.dale@oracle.com>
Sun, 13 Sep 2020 21:40:58 +0000 (07:40 +1000)
committerPauli <paul.dale@oracle.com>
Tue, 15 Sep 2020 21:22:43 +0000 (07:22 +1000)
Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Kurt Roeckx <kurt@roeckx.be>
(Merged from https://github.com/openssl/openssl/pull/12870)

crypto/pkcs12/p12_npas.c

index ee35c45abb45fd6db8725a8f7ac85fd4fe8ae62c..7f04ce10de376e21cc73342c032e80e82ae9c8fc 100644 (file)
@@ -157,8 +157,10 @@ static int newpass_bag(PKCS12_SAFEBAG *bag, const char *oldpass,
     if ((p8 = PKCS8_decrypt(bag->value.shkeybag, oldpass, -1)) == NULL)
         return 0;
     X509_SIG_get0(bag->value.shkeybag, &shalg, NULL);
-    if (!alg_get(shalg, &p8_nid, &p8_iter, &p8_saltlen))
+    if (!alg_get(shalg, &p8_nid, &p8_iter, &p8_saltlen)) {
+        PKCS8_PRIV_KEY_INFO_free(p8);
         return 0;
+    }
     p8new = PKCS8_encrypt(p8_nid, NULL, newpass, -1, NULL, p8_saltlen,
                           p8_iter, p8);
     PKCS8_PRIV_KEY_INFO_free(p8);