From 9284be583ffaee688afc6bd5c5b5b23cdf59ea00 Mon Sep 17 00:00:00 2001 From: miod <> Date: Fri, 27 Jun 2014 04:41:09 +0000 Subject: Remove M_ASN1_New* macros which are only used in X509_PKEY_new() are obfuscate it to hide memory leaks in the error paths, and fix aforementioned memory leaks. ok jsing@ logan@ deraadt@ --- src/lib/libcrypto/asn1/asn1_mac.h | 17 +---------------- src/lib/libcrypto/asn1/x_pkey.c | 21 +++++++++++++++------ src/lib/libssl/src/crypto/asn1/asn1_mac.h | 17 +---------------- src/lib/libssl/src/crypto/asn1/x_pkey.c | 21 +++++++++++++++------ 4 files changed, 32 insertions(+), 44 deletions(-) (limited to 'src') diff --git a/src/lib/libcrypto/asn1/asn1_mac.h b/src/lib/libcrypto/asn1/asn1_mac.h index 9d989eb797..fd524dc21c 100644 --- a/src/lib/libcrypto/asn1/asn1_mac.h +++ b/src/lib/libcrypto/asn1/asn1_mac.h @@ -1,4 +1,4 @@ -/* $OpenBSD: asn1_mac.h,v 1.13 2014/06/12 15:49:27 deraadt Exp $ */ +/* $OpenBSD: asn1_mac.h,v 1.14 2014/06/27 04:41:09 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * @@ -287,21 +287,6 @@ err:\ c.slen-=(c.p-c.q); \ } -/* New macros */ -#define M_ASN1_New_Malloc(ret,type) \ - if ((ret = malloc(sizeof(type))) == NULL) \ - { c.line=__LINE__; goto err2; } - -#define M_ASN1_New(arg,func) \ - if (((arg)=func()) == NULL) return(NULL) - -#define M_ASN1_New_Error(a) \ -/* err: ASN1_MAC_H_err((a),ERR_R_NESTED_ASN1_ERROR,c.line); \ - return(NULL);*/ \ - err2: ASN1_MAC_H_err((a),ERR_R_MALLOC_FAILURE,c.line); \ - return(NULL) - - /* BIG UGLY WARNING! This is so damn ugly I wanna puke. Unfortunately, some macros that use ASN1_const_CTX still insist on writing in the input stream. ARGH! ARGH! ARGH! Let's get rid of this macro package. diff --git a/src/lib/libcrypto/asn1/x_pkey.c b/src/lib/libcrypto/asn1/x_pkey.c index 2e7745315f..bbf7666b54 100644 --- a/src/lib/libcrypto/asn1/x_pkey.c +++ b/src/lib/libcrypto/asn1/x_pkey.c @@ -1,4 +1,4 @@ -/* $OpenBSD: x_pkey.c,v 1.11 2014/06/12 15:49:27 deraadt Exp $ */ +/* $OpenBSD: x_pkey.c,v 1.12 2014/06/27 04:41:09 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * @@ -107,12 +107,22 @@ X509_PKEY * X509_PKEY_new(void) { X509_PKEY *ret = NULL; - ASN1_CTX c; - M_ASN1_New_Malloc(ret, X509_PKEY); + if ((ret = malloc(sizeof(X509_PKEY))) == NULL) { + ASN1_MAC_H_err(ASN1_F_X509_PKEY_NEW, ERR_R_MALLOC_FAILURE, + __LINE__); + return NULL; + } ret->version = 0; - M_ASN1_New(ret->enc_algor, X509_ALGOR_new); - M_ASN1_New(ret->enc_pkey, M_ASN1_OCTET_STRING_new); + if ((ret->enc_algor = X509_ALGOR_new()) == NULL) { + free(ret); + return NULL; + } + if ((ret->enc_pkey = M_ASN1_OCTET_STRING_new()) == NULL) { + X509_ALGOR_free(ret->enc_algor); + free(ret); + return NULL; + } ret->dec_pkey = NULL; ret->key_length = 0; ret->key_data = NULL; @@ -121,7 +131,6 @@ X509_PKEY_new(void) memset(ret->cipher.iv, 0, EVP_MAX_IV_LENGTH); ret->references = 1; return (ret); - M_ASN1_New_Error(ASN1_F_X509_PKEY_NEW); } void diff --git a/src/lib/libssl/src/crypto/asn1/asn1_mac.h b/src/lib/libssl/src/crypto/asn1/asn1_mac.h index 9d989eb797..fd524dc21c 100644 --- a/src/lib/libssl/src/crypto/asn1/asn1_mac.h +++ b/src/lib/libssl/src/crypto/asn1/asn1_mac.h @@ -1,4 +1,4 @@ -/* $OpenBSD: asn1_mac.h,v 1.13 2014/06/12 15:49:27 deraadt Exp $ */ +/* $OpenBSD: asn1_mac.h,v 1.14 2014/06/27 04:41:09 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * @@ -287,21 +287,6 @@ err:\ c.slen-=(c.p-c.q); \ } -/* New macros */ -#define M_ASN1_New_Malloc(ret,type) \ - if ((ret = malloc(sizeof(type))) == NULL) \ - { c.line=__LINE__; goto err2; } - -#define M_ASN1_New(arg,func) \ - if (((arg)=func()) == NULL) return(NULL) - -#define M_ASN1_New_Error(a) \ -/* err: ASN1_MAC_H_err((a),ERR_R_NESTED_ASN1_ERROR,c.line); \ - return(NULL);*/ \ - err2: ASN1_MAC_H_err((a),ERR_R_MALLOC_FAILURE,c.line); \ - return(NULL) - - /* BIG UGLY WARNING! This is so damn ugly I wanna puke. Unfortunately, some macros that use ASN1_const_CTX still insist on writing in the input stream. ARGH! ARGH! ARGH! Let's get rid of this macro package. diff --git a/src/lib/libssl/src/crypto/asn1/x_pkey.c b/src/lib/libssl/src/crypto/asn1/x_pkey.c index 2e7745315f..bbf7666b54 100644 --- a/src/lib/libssl/src/crypto/asn1/x_pkey.c +++ b/src/lib/libssl/src/crypto/asn1/x_pkey.c @@ -1,4 +1,4 @@ -/* $OpenBSD: x_pkey.c,v 1.11 2014/06/12 15:49:27 deraadt Exp $ */ +/* $OpenBSD: x_pkey.c,v 1.12 2014/06/27 04:41:09 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * @@ -107,12 +107,22 @@ X509_PKEY * X509_PKEY_new(void) { X509_PKEY *ret = NULL; - ASN1_CTX c; - M_ASN1_New_Malloc(ret, X509_PKEY); + if ((ret = malloc(sizeof(X509_PKEY))) == NULL) { + ASN1_MAC_H_err(ASN1_F_X509_PKEY_NEW, ERR_R_MALLOC_FAILURE, + __LINE__); + return NULL; + } ret->version = 0; - M_ASN1_New(ret->enc_algor, X509_ALGOR_new); - M_ASN1_New(ret->enc_pkey, M_ASN1_OCTET_STRING_new); + if ((ret->enc_algor = X509_ALGOR_new()) == NULL) { + free(ret); + return NULL; + } + if ((ret->enc_pkey = M_ASN1_OCTET_STRING_new()) == NULL) { + X509_ALGOR_free(ret->enc_algor); + free(ret); + return NULL; + } ret->dec_pkey = NULL; ret->key_length = 0; ret->key_data = NULL; @@ -121,7 +131,6 @@ X509_PKEY_new(void) memset(ret->cipher.iv, 0, EVP_MAX_IV_LENGTH); ret->references = 1; return (ret); - M_ASN1_New_Error(ASN1_F_X509_PKEY_NEW); } void -- cgit v1.2.3-55-g6feb