From 5b030ec0800d4ad6022ecd00e18a19f77ada0b04 Mon Sep 17 00:00:00 2001 From: Pauli Date: Wed, 26 Jan 2022 15:21:51 +1100 Subject: [PATCH] prov: add a safe memdup function for context cloning Reviewed-by: Shane Lontis (Merged from https://github.com/openssl/openssl/pull/17572) --- providers/common/include/prov/provider_util.h | 4 ++++ providers/common/provider_util.c | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/providers/common/include/prov/provider_util.h b/providers/common/include/prov/provider_util.h index dfe91f29bcd..0bf7f9c3b1b 100644 --- a/providers/common/include/prov/provider_util.h +++ b/providers/common/include/prov/provider_util.h @@ -136,3 +136,7 @@ typedef struct ag_capable_st { */ void ossl_prov_cache_exported_algorithms(const OSSL_ALGORITHM_CAPABLE *in, OSSL_ALGORITHM *out); + +/* Duplicate a lump of memory safely */ +int ossl_prov_memdup(const void *src, size_t src_len, + unsigned char **dest, size_t *dest_len); diff --git a/providers/common/provider_util.c b/providers/common/provider_util.c index 58d4db33793..3bcb0c9df3a 100644 --- a/providers/common/provider_util.c +++ b/providers/common/provider_util.c @@ -351,3 +351,20 @@ void ossl_prov_cache_exported_algorithms(const OSSL_ALGORITHM_CAPABLE *in, out[j++] = in[i].alg; } } + +/* Duplicate a lump of memory safely */ +int ossl_prov_memdup(const void *src, size_t src_len, + unsigned char **dest, size_t *dest_len) +{ + if (src != NULL) { + if ((*dest = OPENSSL_memdup(src, src_len)) == NULL) { + ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); + return 0; + } + *dest_len = src_len; + } else { + *dest = NULL; + *dest_len = 0; + } + return 1; +} -- 2.47.2