Commit 8d116a4ba10 for php.net
commit 8d116a4ba10703c54d947d95e152d25d75d45aa0
Author: Niels Dossche <7771979+nielsdos@users.noreply.github.com>
Date: Sun Jun 29 14:29:28 2025 +0200
Implement GH-15483: Use C23 memset_explicit() for ZEND_SECURE_ZERO() if available (#18713)
diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h
index 97bd038ecf3..7a41a496a0e 100644
--- a/Zend/zend_portability.h
+++ b/Zend/zend_portability.h
@@ -496,6 +496,8 @@ extern "C++" {
#ifdef ZEND_WIN32
#define ZEND_SECURE_ZERO(var, size) RtlSecureZeroMemory((var), (size))
+#elif defined(HAVE_MEMSET_EXPLICIT)
+#define ZEND_SECURE_ZERO(var, size) memset_explicit((var), 0, (size))
#else
#define ZEND_SECURE_ZERO(var, size) explicit_bzero((var), (size))
#endif
diff --git a/configure.ac b/configure.ac
index f6f305ba053..e4a8c31de47 100644
--- a/configure.ac
+++ b/configure.ac
@@ -564,6 +564,7 @@ AC_CHECK_FUNCS(m4_normalize([
memmem
mempcpy
memrchr
+ memset_explicit
mkstemp
mmap
nice
diff --git a/main/explicit_bzero.c b/main/explicit_bzero.c
index 75cd126ee9a..c49bdede662 100644
--- a/main/explicit_bzero.c
+++ b/main/explicit_bzero.c
@@ -28,8 +28,10 @@
PHPAPI void php_explicit_bzero(void *dst, size_t siz)
{
-#ifdef HAVE_EXPLICIT_MEMSET
- explicit_memset(dst, 0, siz);
+#ifdef HAVE_MEMSET_EXPLICIT /* C23 */
+ memset_explicit(dst, 0, siz);
+#elif defined(HAVE_EXPLICIT_MEMSET) /* NetBSD-specific */
+ explicit_memset(dst, 0, siz);
#elif defined(PHP_WIN32)
RtlSecureZeroMemory(dst, siz);
#elif defined(__GNUC__)