diff options
author | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-02-11 12:20:17 +0300 |
---|---|---|
committer | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-02-11 12:20:17 +0300 |
commit | 052532eb6a2c1801fbb52dd18f9381c4c545b5d7 (patch) | |
tree | 269096e997b3766d1f97b750eb9aae6f4fc1ce2c | |
parent | 432e645033ef49cb72384ba055652b2668ec73fd (diff) | |
download | ydb-052532eb6a2c1801fbb52dd18f9381c4c545b5d7.tar.gz |
intermediate changes
ref:8462e250ef53263ca169374e23a12ca5d871ec07
-rw-r--r-- | contrib/libs/libc_compat/explicit_bzero.c | 55 | ||||
-rw-r--r-- | contrib/libs/libc_compat/ya.make | 4 |
2 files changed, 59 insertions, 0 deletions
diff --git a/contrib/libs/libc_compat/explicit_bzero.c b/contrib/libs/libc_compat/explicit_bzero.c new file mode 100644 index 00000000000..7ae5e812640 --- /dev/null +++ b/contrib/libs/libc_compat/explicit_bzero.c @@ -0,0 +1,55 @@ +/*------------------------------------------------------------------------- + * + * explicit_bzero.c + * + * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * + * IDENTIFICATION + * src/port/explicit_bzero.c + * + *------------------------------------------------------------------------- + */ + +#include <stddef.h> + +#if defined(HAVE_MEMSET_S) + +void +explicit_bzero(void *buf, size_t len) +{ + (void) memset_s(buf, len, 0, len); +} + +#elif defined(WIN32) + +void +explicit_bzero(void *buf, size_t len) +{ + (void) SecureZeroMemory(buf, len); +} + +#else + +/* + * Indirect call through a volatile pointer to hopefully avoid dead-store + * optimisation eliminating the call. (Idea taken from OpenSSH.) We can't + * assume bzero() is present either, so for simplicity we define our own. + */ + +static void +bzero2(void *buf, size_t len) +{ + memset(buf, 0, len); +} + +static void (*volatile bzero_p) (void *, size_t) = bzero2; + +void +explicit_bzero(void *buf, size_t len) +{ + bzero_p(buf, len); +} + +#endif diff --git a/contrib/libs/libc_compat/ya.make b/contrib/libs/libc_compat/ya.make index b92184c165a..49964fef9cc 100644 --- a/contrib/libs/libc_compat/ya.make +++ b/contrib/libs/libc_compat/ya.make @@ -61,6 +61,7 @@ ENDIF() IF (OS_DARWIN) SRCS( + explicit_bzero.c reallocarray.c ) ENDIF() @@ -70,6 +71,7 @@ IF (OS_WINDOWS) GLOBAL contrib/libs/libc_compat/include/windows ) SRCS( + explicit_bzero.c reallocarray.c stpcpy.c strlcat.c @@ -101,6 +103,8 @@ IF (OS_LINUX AND NOT MUSL) GLOBAL contrib/libs/libc_compat/include/random ) SRCS( + # explicit_bzero was added in glibc=2.25 + explicit_bzero.c # getrandom was added in glibc=2.25 getrandom.c # memfd_create was added in glibc=2.27 |