From cb1d435cac2a9a7bd6019f9f23648c8075251109 Mon Sep 17 00:00:00 2001 From: J Mohan Rao Arisankala Date: Thu, 5 May 2016 23:43:32 +0530 Subject: [PATCH] few missing allocation failure checks and releases on error paths - Missing checks for allocation failure. - releasing memory in few missing error paths Reviewed-by: Kurt Roeckx Reviewed-by: Matt Caswell --- crypto/bio/b_addr.c | 4 +++- crypto/bio/bio_err.c | 8 ++------ crypto/ec/ec_kmeth.c | 1 + crypto/evp/bio_b64.c | 7 ++++++- crypto/evp/bio_ok.c | 4 ++++ include/openssl/bio.h | 7 ++++--- 6 files changed, 20 insertions(+), 11 deletions(-) diff --git a/crypto/bio/b_addr.c b/crypto/bio/b_addr.c index 86c6c7eca8..1813f5a9bb 100644 --- a/crypto/bio/b_addr.c +++ b/crypto/bio/b_addr.c @@ -83,8 +83,10 @@ BIO_ADDR *BIO_ADDR_new(void) { BIO_ADDR *ret = OPENSSL_zalloc(sizeof(*ret)); - if (ret == NULL) + if (ret == NULL) { + BIOerr(BIO_F_BIO_ADDR_NEW, ERR_R_MALLOC_FAILURE); return NULL; + } ret->sa.sa_family = AF_UNSPEC; return ret; diff --git a/crypto/bio/bio_err.c b/crypto/bio/bio_err.c index 6bf1df66ab..e4b74adb8d 100644 --- a/crypto/bio/bio_err.c +++ b/crypto/bio/bio_err.c @@ -1,16 +1,11 @@ /* + * Generated by util/mkerr.pl DO NOT EDIT * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html -*/ - -/* - * NOTE: this file was auto generated by the mkerr.pl script: any changes - * made to it will be overwritten when the script next updates this file, - * only reason strings will be preserved. */ #include @@ -28,6 +23,7 @@ static ERR_STRING_DATA BIO_str_functs[] = { {ERR_FUNC(BIO_F_ADDR_STRINGS), "addr_strings"}, {ERR_FUNC(BIO_F_BIO_ACCEPT), "BIO_accept"}, {ERR_FUNC(BIO_F_BIO_ACCEPT_EX), "BIO_accept_ex"}, + {ERR_FUNC(BIO_F_BIO_ADDR_NEW), "BIO_ADDR_new"}, {ERR_FUNC(BIO_F_BIO_BER_GET_HEADER), "BIO_BER_GET_HEADER"}, {ERR_FUNC(BIO_F_BIO_CALLBACK_CTRL), "BIO_callback_ctrl"}, {ERR_FUNC(BIO_F_BIO_CONNECT), "BIO_connect"}, diff --git a/crypto/ec/ec_kmeth.c b/crypto/ec/ec_kmeth.c index 003421eabe..75e58d5316 100644 --- a/crypto/ec/ec_kmeth.c +++ b/crypto/ec/ec_kmeth.c @@ -166,6 +166,7 @@ EC_KEY *EC_KEY_new_method(ENGINE *engine) ret->references = 1; if (ret->meth->init != NULL && ret->meth->init(ret) == 0) { + ECerr(EC_F_EC_KEY_NEW_METHOD, ERR_R_INIT_FAIL); EC_KEY_free(ret); return NULL; } diff --git a/crypto/evp/bio_b64.c b/crypto/evp/bio_b64.c index cdb50b4584..6a95cf6dd6 100644 --- a/crypto/evp/bio_b64.c +++ b/crypto/evp/bio_b64.c @@ -118,10 +118,15 @@ static int b64_new(BIO *bi) ctx = OPENSSL_zalloc(sizeof(*ctx)); if (ctx == NULL) - return (0); + return 0; ctx->cont = 1; ctx->start = 1; + if (ctx->base64 == NULL) { + OPENSSL_free(ctx); + return 0; + } + ctx->base64 = EVP_ENCODE_CTX_new(); BIO_set_data(bi, ctx); BIO_set_init(bi, 1); diff --git a/crypto/evp/bio_ok.c b/crypto/evp/bio_ok.c index 0ac1a31a63..65577c0f6c 100644 --- a/crypto/evp/bio_ok.c +++ b/crypto/evp/bio_ok.c @@ -183,6 +183,10 @@ static int ok_new(BIO *bi) ctx->cont = 1; ctx->sigio = 1; ctx->md = EVP_MD_CTX_new(); + if (ctx->md == NULL) { + OPENSSL_free(ctx); + return 0; + } BIO_set_init(bi, 0); BIO_set_data(bi, ctx); diff --git a/include/openssl/bio.h b/include/openssl/bio.h index 03a6f04c75..f98f6ee11b 100644 --- a/include/openssl/bio.h +++ b/include/openssl/bio.h @@ -809,12 +809,12 @@ int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, bio_info_cb *)); /* BEGIN ERROR CODES */ + /* - * The following lines are auto generated by the script mkerr.pl. Any changes - * made after this point may be overwritten when the script is next run. + * Content after this point is generated by util/mkerr.pl + * DO NOT EDIT! */ void ERR_load_BIO_strings(void); - /* Error codes for the BIO functions. */ /* Function codes. */ @@ -822,6 +822,7 @@ void ERR_load_BIO_strings(void); # define BIO_F_ADDR_STRINGS 134 # define BIO_F_BIO_ACCEPT 101 # define BIO_F_BIO_ACCEPT_EX 137 +# define BIO_F_BIO_ADDR_NEW 144 # define BIO_F_BIO_BER_GET_HEADER 102 # define BIO_F_BIO_CALLBACK_CTRL 131 # define BIO_F_BIO_CONNECT 138 -- 2.25.1