From 6dbe4dc4752484e1628e854dce46ef48faaf3384 Mon Sep 17 00:00:00 2001 From: Rich Salz Date: Sat, 10 Feb 2018 13:36:47 -0500 Subject: [PATCH] Copy name string in BIO_meth_new Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/5318) --- crypto/bio/bio_err.c | 3 ++- crypto/bio/bio_meth.c | 14 ++++++++++---- crypto/err/openssl.txt | 1 + include/internal/bio.h | 2 +- include/openssl/bioerr.h | 1 + 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/crypto/bio/bio_err.c b/crypto/bio/bio_err.c index 50fc74bd85..20f3aa14f8 100644 --- a/crypto/bio/bio_err.c +++ b/crypto/bio/bio_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2018 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 @@ -30,6 +30,7 @@ static const ERR_STRING_DATA BIO_str_functs[] = { {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_LOOKUP, 0), "BIO_lookup"}, {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_LOOKUP_EX, 0), "BIO_lookup_ex"}, {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_MAKE_PAIR, 0), "bio_make_pair"}, + {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_METH_NEW, 0), "BIO_meth_new"}, {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_NEW, 0), "BIO_new"}, {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_NEW_DGRAM_SCTP, 0), "BIO_new_dgram_sctp"}, {ERR_PACK(ERR_LIB_BIO, BIO_F_BIO_NEW_FILE, 0), "BIO_new_file"}, diff --git a/crypto/bio/bio_meth.c b/crypto/bio/bio_meth.c index 1c5d196239..a1fff14160 100644 --- a/crypto/bio/bio_meth.c +++ b/crypto/bio/bio_meth.c @@ -37,16 +37,22 @@ BIO_METHOD *BIO_meth_new(int type, const char *name) { BIO_METHOD *biom = OPENSSL_zalloc(sizeof(BIO_METHOD)); - if (biom != NULL) { - biom->type = type; - biom->name = name; + if (biom == NULL + || (biom->name = OPENSSL_strdup(name)) == NULL) { + OPENSSL_free(biom); + BIOerr(BIO_F_BIO_METH_NEW, ERR_R_MALLOC_FAILURE); + return NULL; } + biom->type = type; return biom; } void BIO_meth_free(BIO_METHOD *biom) { - OPENSSL_free(biom); + if (biom != NULL) { + OPENSSL_free(biom->name); + OPENSSL_free(biom); + } } int (*BIO_meth_get_write(BIO_METHOD *biom)) (BIO *, const char *, int) diff --git a/crypto/err/openssl.txt b/crypto/err/openssl.txt index fb3be57208..3ed71fe53a 100644 --- a/crypto/err/openssl.txt +++ b/crypto/err/openssl.txt @@ -127,6 +127,7 @@ BIO_F_BIO_LISTEN:139:BIO_listen BIO_F_BIO_LOOKUP:135:BIO_lookup BIO_F_BIO_LOOKUP_EX:143:BIO_lookup_ex BIO_F_BIO_MAKE_PAIR:121:bio_make_pair +BIO_F_BIO_METH_NEW:146:BIO_meth_new BIO_F_BIO_NEW:108:BIO_new BIO_F_BIO_NEW_DGRAM_SCTP:145:BIO_new_dgram_sctp BIO_F_BIO_NEW_FILE:109:BIO_new_file diff --git a/include/internal/bio.h b/include/internal/bio.h index 4428947f2d..5334d480de 100644 --- a/include/internal/bio.h +++ b/include/internal/bio.h @@ -11,7 +11,7 @@ struct bio_method_st { int type; - const char *name; + char *name; int (*bwrite) (BIO *, const char *, size_t, size_t *); int (*bwrite_old) (BIO *, const char *, int); int (*bread) (BIO *, char *, size_t, size_t *); diff --git a/include/openssl/bioerr.h b/include/openssl/bioerr.h index b0dee2bc34..7a552d6105 100644 --- a/include/openssl/bioerr.h +++ b/include/openssl/bioerr.h @@ -35,6 +35,7 @@ int ERR_load_BIO_strings(void); # define BIO_F_BIO_LOOKUP 135 # define BIO_F_BIO_LOOKUP_EX 143 # define BIO_F_BIO_MAKE_PAIR 121 +# define BIO_F_BIO_METH_NEW 146 # define BIO_F_BIO_NEW 108 # define BIO_F_BIO_NEW_DGRAM_SCTP 145 # define BIO_F_BIO_NEW_FILE 109 -- 2.25.1