summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Carlier <devnexen@gmail.com>2022-09-08 22:16:31 +0100
committerTomas Mraz <tomas@openssl.org>2022-11-23 18:21:43 +0100
commit64668674e8013a74cfa0898f475049e8e5443f35 (patch)
treed3dfd1784d8ec35d1954f9d58bb40df2423b9a8d
parent8cef32cd2e0381559b7590255643a68914e6eb36 (diff)
OSSL_CRYPTO_ALLOC attribute introduction proposal.
Giving hint to the compiler the returned pointer is not aliased (so realloc-like api is de facto excluded). Reviewed-by: Hugo Landau <hlandau@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/19180) (cherry picked from commit e1035957eba1e6ebdefd0e18dcbad5cbfa7a969a)
-rw-r--r--include/openssl/crypto.h.in14
-rw-r--r--include/openssl/macros.h10
2 files changed, 17 insertions, 7 deletions
diff --git a/include/openssl/crypto.h.in b/include/openssl/crypto.h.in
index 7232f647e8..fb0c7cbb87 100644
--- a/include/openssl/crypto.h.in
+++ b/include/openssl/crypto.h.in
@@ -318,11 +318,11 @@ void CRYPTO_get_mem_functions(CRYPTO_malloc_fn *malloc_fn,
CRYPTO_realloc_fn *realloc_fn,
CRYPTO_free_fn *free_fn);
-void *CRYPTO_malloc(size_t num, const char *file, int line);
-void *CRYPTO_zalloc(size_t num, const char *file, int line);
-void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line);
-char *CRYPTO_strdup(const char *str, const char *file, int line);
-char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line);
+OSSL_CRYPTO_ALLOC void *CRYPTO_malloc(size_t num, const char *file, int line);
+OSSL_CRYPTO_ALLOC void *CRYPTO_zalloc(size_t num, const char *file, int line);
+OSSL_CRYPTO_ALLOC void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line);
+OSSL_CRYPTO_ALLOC char *CRYPTO_strdup(const char *str, const char *file, int line);
+OSSL_CRYPTO_ALLOC char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line);
void CRYPTO_free(void *ptr, const char *file, int line);
void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line);
void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line);
@@ -331,8 +331,8 @@ void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num,
int CRYPTO_secure_malloc_init(size_t sz, size_t minsize);
int CRYPTO_secure_malloc_done(void);
-void *CRYPTO_secure_malloc(size_t num, const char *file, int line);
-void *CRYPTO_secure_zalloc(size_t num, const char *file, int line);
+OSSL_CRYPTO_ALLOC void *CRYPTO_secure_malloc(size_t num, const char *file, int line);
+OSSL_CRYPTO_ALLOC void *CRYPTO_secure_zalloc(size_t num, const char *file, int line);
void CRYPTO_secure_free(void *ptr, const char *file, int line);
void CRYPTO_secure_clear_free(void *ptr, size_t num,
const char *file, int line);
diff --git a/include/openssl/macros.h b/include/openssl/macros.h
index 42e35ed9d3..1db8ad9f56 100644
--- a/include/openssl/macros.h
+++ b/include/openssl/macros.h
@@ -312,4 +312,14 @@
# endif
# endif
+# ifndef OSSL_CRYPTO_ALLOC
+# if defined(__GNUC__)
+# define OSSL_CRYPTO_ALLOC __attribute__((malloc))
+# elif defined(_MSC_VER)
+# define OSSL_CRYPTO_ALLOC __declspec(restrict)
+# else
+# define OSSL_CRYPTO_ALLOC
+# endif
+# endif
+
#endif /* OPENSSL_MACROS_H */