summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dsa/dsa_ameth.c
diff options
context:
space:
mode:
authortb <>2023-08-12 07:50:47 +0000
committertb <>2023-08-12 07:50:47 +0000
commitf5928511901ba790469237cdd03eba98ebd97973 (patch)
treed4bb9a302e2a9007c4e03757faff7454de03ec43 /src/lib/libcrypto/dsa/dsa_ameth.c
parent433040516cb1d48e0ce58ca213a9e7396a5a1dde (diff)
downloadopenbsd-f5928511901ba790469237cdd03eba98ebd97973.tar.gz
openbsd-f5928511901ba790469237cdd03eba98ebd97973.tar.bz2
openbsd-f5928511901ba790469237cdd03eba98ebd97973.zip
Free {priv,pub}_key before assigning to it
While it isn't the case for the default implementations, custom DH and DSA methods could conceivably populate private and public keys, which in turn would result in leaks in the pub/priv decode methods. ok jsing
Diffstat (limited to 'src/lib/libcrypto/dsa/dsa_ameth.c')
-rw-r--r--src/lib/libcrypto/dsa/dsa_ameth.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/lib/libcrypto/dsa/dsa_ameth.c b/src/lib/libcrypto/dsa/dsa_ameth.c
index 83fdf2129f..d6b0546c04 100644
--- a/src/lib/libcrypto/dsa/dsa_ameth.c
+++ b/src/lib/libcrypto/dsa/dsa_ameth.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dsa_ameth.c,v 1.53 2023/08/12 07:46:14 tb Exp $ */ 1/* $OpenBSD: dsa_ameth.c,v 1.54 2023/08/12 07:50:47 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2006. 3 * project 2006.
4 */ 4 */
@@ -114,6 +114,7 @@ dsa_pub_decode(EVP_PKEY *pkey, X509_PUBKEY *pubkey)
114 DSAerror(DSA_R_DECODE_ERROR); 114 DSAerror(DSA_R_DECODE_ERROR);
115 goto err; 115 goto err;
116 } 116 }
117 BN_free(dsa->pub_key);
117 if ((dsa->pub_key = ASN1_INTEGER_to_BN(aint, NULL)) == NULL) { 118 if ((dsa->pub_key = ASN1_INTEGER_to_BN(aint, NULL)) == NULL) {
118 DSAerror(DSA_R_BN_DECODE_ERROR); 119 DSAerror(DSA_R_BN_DECODE_ERROR);
119 goto err; 120 goto err;
@@ -236,6 +237,7 @@ dsa_priv_decode(EVP_PKEY *pkey, const PKCS8_PRIV_KEY_INFO *p8)
236 DSAerror(DSA_R_DECODE_ERROR); 237 DSAerror(DSA_R_DECODE_ERROR);
237 goto err; 238 goto err;
238 } 239 }
240 BN_free(dsa->priv_key);
239 if ((dsa->priv_key = ASN1_INTEGER_to_BN(aint, NULL)) == NULL) { 241 if ((dsa->priv_key = ASN1_INTEGER_to_BN(aint, NULL)) == NULL) {
240 DSAerror(DSA_R_BN_DECODE_ERROR); 242 DSAerror(DSA_R_BN_DECODE_ERROR);
241 goto err; 243 goto err;
@@ -246,6 +248,7 @@ dsa_priv_decode(EVP_PKEY *pkey, const PKCS8_PRIV_KEY_INFO *p8)
246 goto err; 248 goto err;
247 249
248 /* Calculate public key */ 250 /* Calculate public key */
251 BN_free(dsa->pub_key);
249 if ((dsa->pub_key = BN_new()) == NULL) { 252 if ((dsa->pub_key = BN_new()) == NULL) {
250 DSAerror(ERR_R_MALLOC_FAILURE); 253 DSAerror(ERR_R_MALLOC_FAILURE);
251 goto err; 254 goto err;