[PATCH 1 of 4] Core: use explicit_bzero if possible
Vadim Fedorenko
vadim.fedorenko at cdnnow.ru
Mon Apr 17 23:07:07 UTC 2023
# HG changeset patch
# User Vadim Fedorenko <vadim.fedorenko at cdnnow.ru>
# Date 1681771172 -10800
# Tue Apr 18 01:39:32 2023 +0300
# Node ID 0a1c8cb5c05141f3ea3135d9f01688f7693fc7df
# Parent 252a7acd35ceff4fca7a8c60a9aa6d4d22b688bf
Core: use explicit_bzero if possible.
GCC 11+ expanded the scope of dead store elimination optimization
and memory barrier trick doesn't work anymore. But there is new
function exists in glibc to explicitly clear the buffer -
explicit_bzero(). Let's use it instead.
---
auto/unix | 10 ++++++++++
src/core/ngx_string.c | 4 ++++
src/core/ngx_string.h | 5 ++++-
3 files changed, 18 insertions(+), 1 deletion(-)
diff -r 252a7acd35ce -r 0a1c8cb5c051 auto/unix
--- a/auto/unix Mon Apr 17 14:08:00 2023 +0400
+++ b/auto/unix Tue Apr 18 01:39:32 2023 +0300
@@ -1002,3 +1002,13 @@
if (getaddrinfo("localhost", NULL, NULL, &res) != 0) return 1;
freeaddrinfo(res)'
. auto/feature
+
+
+ngx_feature="explicit_bzero()"
+ngx_feature_name="NGX_HAVE_EXPLICIT_BZERO"
+ngx_feature_run=no
+ngx_feature_incs='#include <string.h>'
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="char p[16]; explicit_bzero(p, sizeof(p));"
+. auto/feature
diff -r 252a7acd35ce -r 0a1c8cb5c051 src/core/ngx_string.c
--- a/src/core/ngx_string.c Mon Apr 17 14:08:00 2023 +0400
+++ b/src/core/ngx_string.c Tue Apr 18 01:39:32 2023 +0300
@@ -2080,6 +2080,8 @@
}
+#if !(NGX_HAVE_EXPLICIT_BZERO)
+
void
ngx_explicit_memzero(void *buf, size_t n)
{
@@ -2087,6 +2089,8 @@
ngx_memory_barrier();
}
+#endif
+
#if (NGX_MEMCPY_LIMIT)
diff -r 252a7acd35ce -r 0a1c8cb5c051 src/core/ngx_string.h
--- a/src/core/ngx_string.h Mon Apr 17 14:08:00 2023 +0400
+++ b/src/core/ngx_string.h Tue Apr 18 01:39:32 2023 +0300
@@ -87,8 +87,11 @@
*/
#define ngx_memzero(buf, n) (void) memset(buf, 0, n)
#define ngx_memset(buf, c, n) (void) memset(buf, c, n)
-
+#if (NGX_HAVE_EXPLICIT_BZERO)
+#define ngx_explicit_memzero(buf, n) explicit_bzero(buf, n)
+#else
void ngx_explicit_memzero(void *buf, size_t n);
+#endif
#if (NGX_MEMCPY_LIMIT)
More information about the nginx-devel
mailing list