From 0a446e81ed77c20aa87563d45ef0ef8f5fa283d8 Mon Sep 17 00:00:00 2001 From: Theo Buehler Date: Sat, 18 Nov 2023 10:53:09 +0100 Subject: [PATCH 1/3] Prefix some compat symbols with libressl_ See #928. This isn't a full fix, but should remove much of the friction already. --- include/compat/stdio.h | 2 ++ include/compat/stdlib.h | 10 ++++++++++ include/compat/string.h | 11 +++++++++++ 3 files changed, 23 insertions(+) diff --git a/include/compat/stdio.h b/include/compat/stdio.h index d5725c9ac9..4ddd63aee1 100644 --- a/include/compat/stdio.h +++ b/include/compat/stdio.h @@ -20,7 +20,9 @@ #ifndef HAVE_ASPRINTF #include +#define vasprintf libressl_vasprintf int vasprintf(char **str, const char *fmt, va_list ap); +#define asprintf libressl_asprintf int asprintf(char **str, const char *fmt, ...); #endif diff --git a/include/compat/stdlib.h b/include/compat/stdlib.h index 2eaea244c0..76dc07c35a 100644 --- a/include/compat/stdlib.h +++ b/include/compat/stdlib.h @@ -20,26 +20,36 @@ #include #ifndef HAVE_ARC4RANDOM_BUF +#define arc4random libressl_arc4random uint32_t arc4random(void); +#define arc4random_buf libressl_arc4random_buf void arc4random_buf(void *_buf, size_t n); +#define arc4random_uniform libressl_arc4random_uniform uint32_t arc4random_uniform(uint32_t upper_bound); #endif #ifndef HAVE_FREEZERO +#define freezero libressl_freezero void freezero(void *ptr, size_t sz); #endif #ifndef HAVE_GETPROGNAME +#define getprogname libressl_getprogname const char * getprogname(void); #endif +#ifndef HAVE_REALLOCARRAY +#define reallocarray libressl_reallocarray void *reallocarray(void *, size_t, size_t); +#endif #ifndef HAVE_RECALLOCARRAY +#define recallocarray libressl_recallocarray void *recallocarray(void *, size_t, size_t, size_t); #endif #ifndef HAVE_STRTONUM +#define strtonum libressl_strtonum long long strtonum(const char *nptr, long long minval, long long maxval, const char **errstr); #endif diff --git a/include/compat/string.h b/include/compat/string.h index 4bf7519b5b..6a82793f62 100644 --- a/include/compat/string.h +++ b/include/compat/string.h @@ -27,43 +27,54 @@ #endif #ifndef HAVE_STRCASECMP +#define strcasecmp libressl_strcasecmp int strcasecmp(const char *s1, const char *s2); +#define strncasecmp libressl_strncasecmp int strncasecmp(const char *s1, const char *s2, size_t len); #endif #ifndef HAVE_STRLCPY +#define strlcpy libressl_strlcpy size_t strlcpy(char *dst, const char *src, size_t siz); #endif #ifndef HAVE_STRLCAT +#define strlcat libressl_strlcat size_t strlcat(char *dst, const char *src, size_t siz); #endif #ifndef HAVE_STRNDUP +#define strndup libressl_strndup char * strndup(const char *str, size_t maxlen); /* the only user of strnlen is strndup, so only build it if needed */ #ifndef HAVE_STRNLEN +#define strnlen libressl_strnlen size_t strnlen(const char *str, size_t maxlen); #endif #endif #ifndef HAVE_STRSEP +#define strsep libressl_strsep char *strsep(char **stringp, const char *delim); #endif #ifndef HAVE_EXPLICIT_BZERO +#define explicit_bzero libressl_explicit_bzero void explicit_bzero(void *, size_t); #endif #ifndef HAVE_TIMINGSAFE_BCMP +#define timingsafe_bcmp libressl_timingsafe_bcmp int timingsafe_bcmp(const void *b1, const void *b2, size_t n); #endif #ifndef HAVE_TIMINGSAFE_MEMCMP +#define timingsafe_memcmp libressl_timingsafe_memcmp int timingsafe_memcmp(const void *b1, const void *b2, size_t len); #endif #ifndef HAVE_MEMMEM +#define memmem libressl_memmem void * memmem(const void *big, size_t big_len, const void *little, size_t little_len); #endif From 9e7eb88ac8bc3b3b178b38c5a04e95e14c4d5379 Mon Sep 17 00:00:00 2001 From: Theo Buehler Date: Mon, 11 Dec 2023 17:40:31 +0100 Subject: [PATCH 2/3] Add configure check for strcasecmp --- m4/check-libc.m4 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/m4/check-libc.m4 b/m4/check-libc.m4 index dc8d6bd7c8..50fb8e13d1 100644 --- a/m4/check-libc.m4 +++ b/m4/check-libc.m4 @@ -9,7 +9,7 @@ AC_HEADER_RESOLV # Check for general libc functions AC_CHECK_FUNCS([asprintf freezero memmem]) AC_CHECK_FUNCS([readpassphrase reallocarray recallocarray]) -AC_CHECK_FUNCS([strlcat strlcpy strndup strnlen strsep strtonum]) +AC_CHECK_FUNCS([strcasecmp strlcat strlcpy strndup strnlen strsep strtonum]) AC_CHECK_FUNCS([timegm _mkgmtime timespecsub]) AC_CHECK_FUNCS([getopt getprogname syslog syslog_r]) AC_CACHE_CHECK([for getpagesize], ac_cv_func_getpagesize, [ @@ -30,6 +30,7 @@ AM_CONDITIONAL([HAVE_MEMMEM], [test "x$ac_cv_func_memmem" = xyes]) AM_CONDITIONAL([HAVE_READPASSPHRASE], [test "x$ac_cv_func_readpassphrase" = xyes]) AM_CONDITIONAL([HAVE_REALLOCARRAY], [test "x$ac_cv_func_reallocarray" = xyes]) AM_CONDITIONAL([HAVE_RECALLOCARRAY], [test "x$ac_cv_func_recallocarray" = xyes]) +AM_CONDITIONAL([HAVE_STRCASECMP], [test "x$ac_cv_func_strcasecmp" = xyes]) AM_CONDITIONAL([HAVE_STRLCAT], [test "x$ac_cv_func_strlcat" = xyes]) AM_CONDITIONAL([HAVE_STRLCPY], [test "x$ac_cv_func_strlcpy" = xyes]) AM_CONDITIONAL([HAVE_STRNDUP], [test "x$ac_cv_func_strndup" = xyes]) From c54bd8ba318dec4b4fbf4df1d92acbe2c032f3fd Mon Sep 17 00:00:00 2001 From: Theo Buehler Date: Mon, 11 Dec 2023 17:56:33 +0100 Subject: [PATCH 3/3] Fix a few symbols in EXTRA_EXPORT I thought we stopped doing this, but that's for a separate thread. --- crypto/CMakeLists.txt | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index 6056471510..8046efe87f 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt @@ -767,13 +767,13 @@ endif() if(NOT HAVE_ASPRINTF) set(CRYPTO_SRC ${CRYPTO_SRC} compat/bsd-asprintf.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} asprintf) - set(EXTRA_EXPORT ${EXTRA_EXPORT} vasprintf) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_asprintf) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_vasprintf) endif() if(NOT HAVE_FREEZERO) set(CRYPTO_SRC ${CRYPTO_SRC} compat/freezero.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} freezero) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_freezero) endif() if(NOT HAVE_GETOPT) @@ -799,46 +799,46 @@ endif() if(NOT HAVE_REALLOCARRAY) set(CRYPTO_SRC ${CRYPTO_SRC} compat/reallocarray.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} reallocarray) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_reallocarray) endif() if(NOT HAVE_RECALLOCARRAY) set(CRYPTO_SRC ${CRYPTO_SRC} compat/recallocarray.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} recallocarray) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_recallocarray) endif() if(NOT HAVE_STRCASECMP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strcasecmp.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} strcasecmp) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_strcasecmp) endif() if(NOT HAVE_STRLCAT) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strlcat.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} strlcat) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_strlcat) endif() if(NOT HAVE_STRLCPY) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strlcpy.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} strlcpy) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_strlcpy) endif() if(NOT HAVE_STRNDUP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strndup.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} strndup) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_strndup) if(NOT HAVE_STRNLEN) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strnlen.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} strnlen) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_strnlen) endif() endif() if(NOT HAVE_STRSEP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strsep.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} strsep) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_strsep) endif() if(NOT HAVE_STRTONUM) set(CRYPTO_SRC ${CRYPTO_SRC} compat/strtonum.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} strtonum) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_strtonum) endif() if(NOT HAVE_SYSLOG_R) @@ -857,15 +857,15 @@ if(NOT HAVE_EXPLICIT_BZERO) set(CRYPTO_SRC ${CRYPTO_SRC} compat/explicit_bzero.c) set_source_files_properties(compat/explicit_bzero.c PROPERTIES COMPILE_FLAGS -O0) endif() - set(EXTRA_EXPORT ${EXTRA_EXPORT} explicit_bzero) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_explicit_bzero) endif() if(NOT HAVE_ARC4RANDOM_BUF) set(CRYPTO_SRC ${CRYPTO_SRC} compat/arc4random.c) set(CRYPTO_SRC ${CRYPTO_SRC} compat/arc4random_uniform.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} arc4random) - set(EXTRA_EXPORT ${EXTRA_EXPORT} arc4random_buf) - set(EXTRA_EXPORT ${EXTRA_EXPORT} arc4random_uniform) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_arc4random) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_arc4random_buf) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_arc4random_uniform) if(NOT HAVE_GETENTROPY) if(WIN32) @@ -891,12 +891,12 @@ endif() if(NOT HAVE_TIMINGSAFE_BCMP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/timingsafe_bcmp.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} timingsafe_bcmp) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_timingsafe_bcmp) endif() if(NOT HAVE_TIMINGSAFE_MEMCMP) set(CRYPTO_SRC ${CRYPTO_SRC} compat/timingsafe_memcmp.c) - set(EXTRA_EXPORT ${EXTRA_EXPORT} timingsafe_memcmp) + set(EXTRA_EXPORT ${EXTRA_EXPORT} libressl_timingsafe_memcmp) endif() if(NOT ENABLE_ASM) @@ -919,6 +919,7 @@ foreach(SYM IN LISTS CRYPTO_UNEXPORT) string(REPLACE "${SYM}\n" "" SYMS ${SYMS}) endforeach() file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/crypto_p.sym ${SYMS}) +# XXX should we still be doing this? if(EXTRA_EXPORT) list(SORT EXTRA_EXPORT) foreach(SYM IN LISTS EXTRA_EXPORT)