diff --git a/configure b/configure index a285a6ec3d7..ec4798fe519 100755 --- a/configure +++ b/configure @@ -15742,7 +15742,7 @@ fi LIBS_including_readline="$LIBS" LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'` -for ac_func in backtrace_symbols copyfile copy_file_range elf_aux_info getauxval getifaddrs getpeerucred inet_pton kqueue localeconv_l mbstowcs_l posix_fallocate ppoll pthread_is_threaded_np setproctitle setproctitle_fast strsignal syncfs sync_file_range uselocale wcstombs_l +for ac_func in backtrace_symbols copyfile copy_file_range elf_aux_info explicit_memset getauxval getifaddrs getpeerucred inet_pton kqueue localeconv_l mbstowcs_l memset_explicit posix_fallocate ppoll pthread_is_threaded_np setproctitle setproctitle_fast strsignal syncfs sync_file_range uselocale wcstombs_l do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" diff --git a/configure.ac b/configure.ac index 476a76c7991..b2f6fdbe6ac 100644 --- a/configure.ac +++ b/configure.ac @@ -1841,6 +1841,7 @@ AC_CHECK_FUNCS(m4_normalize([ copyfile copy_file_range elf_aux_info + explicit_memset getauxval getifaddrs getpeerucred @@ -1848,6 +1849,7 @@ AC_CHECK_FUNCS(m4_normalize([ kqueue localeconv_l mbstowcs_l + memset_explicit posix_fallocate ppoll pthread_is_threaded_np diff --git a/meson.build b/meson.build index 5122706477d..3ee8c2325f9 100644 --- a/meson.build +++ b/meson.build @@ -3015,6 +3015,7 @@ func_checks = [ ['dlsym', {'dependencies': [dl_dep], 'define': false}], ['elf_aux_info'], ['explicit_bzero'], + ['explicit_memset'], ['getauxval'], ['getifaddrs'], ['getopt', {'dependencies': [getopt_dep, gnugetopt_dep], 'skip': always_replace_getopt}], @@ -3026,6 +3027,7 @@ func_checks = [ ['kqueue'], ['localeconv_l'], ['mbstowcs_l'], + ['memset_explicit'], ['mkdtemp'], ['posix_fadvise'], ['posix_fallocate'], diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index a0bd84376e7..538822cbc70 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -128,6 +128,9 @@ /* Define to 1 if you have the `explicit_bzero' function. */ #undef HAVE_EXPLICIT_BZERO +/* Define to 1 if you have the `explicit_memset' function. */ +#undef HAVE_EXPLICIT_MEMSET + /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ #undef HAVE_FSEEKO @@ -277,6 +280,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H +/* Define to 1 if you have the `memset_explicit' function. */ +#undef HAVE_MEMSET_EXPLICIT + /* Define to 1 if you have the `mkdtemp' function. */ #undef HAVE_MKDTEMP diff --git a/src/port/explicit_bzero.c b/src/port/explicit_bzero.c index 2147fc3b315..6be7660d28f 100644 --- a/src/port/explicit_bzero.c +++ b/src/port/explicit_bzero.c @@ -16,7 +16,23 @@ #include "c.h" -#if HAVE_DECL_MEMSET_S +#if defined(HAVE_MEMSET_EXPLICIT) + +void +explicit_bzero(void *buf, size_t len) +{ + (void) memset_explicit(buf, 0, len); +} + +#elif defined(HAVE_EXPLICIT_MEMSET) + +void +explicit_bzero(void *buf, size_t len) +{ + (void) explicit_memset(buf, 0, len); +} + +#elif HAVE_DECL_MEMSET_S void explicit_bzero(void *buf, size_t len)