From: Pauli Date: Wed, 26 Jan 2022 04:21:51 +0000 (+1100) Subject: prov: add a safe memdup function for context cloning X-Git-Tag: openssl-3.2.0-alpha1~3003 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5b030ec0800d4ad6022ecd00e18a19f77ada0b04;p=thirdparty%2Fopenssl.git prov: add a safe memdup function for context cloning Reviewed-by: Shane Lontis (Merged from https://github.com/openssl/openssl/pull/17572) --- 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; +}