aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-02-11 12:20:17 +0300
committerarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-02-11 12:20:17 +0300
commit052532eb6a2c1801fbb52dd18f9381c4c545b5d7 (patch)
tree269096e997b3766d1f97b750eb9aae6f4fc1ce2c
parent432e645033ef49cb72384ba055652b2668ec73fd (diff)
downloadydb-052532eb6a2c1801fbb52dd18f9381c4c545b5d7.tar.gz
intermediate changes
ref:8462e250ef53263ca169374e23a12ca5d871ec07
-rw-r--r--contrib/libs/libc_compat/explicit_bzero.c55
-rw-r--r--contrib/libs/libc_compat/ya.make4
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