]> granicus.if.org Git - php/commitdiff
Improve explicit_bzero implementation
authorDavid Carlier <devnexen@gmail.com>
Sat, 9 Dec 2017 22:28:21 +0000 (22:28 +0000)
committerNikita Popov <nikita.ppv@gmail.com>
Sat, 16 Dec 2017 22:07:48 +0000 (23:07 +0100)
Using the weak symbol explicit_bzero_hook does not work if LTO is
enabled. Instead avoid memset optimizations using an asm memory
barrier.

Use a fallback implementation where the memory is zeroed through
volatile.

main/explicit_bzero.c

index e99e082e6da2cbebdbe33c051bb45130170600b7..a6d99337fb318a9a8e6b162982881a89c0e0a1be 100644 (file)
 
 #include <string.h>
 
-__attribute__((weak)) void
-__explicit_bzero_hook(void *dst, size_t siz)
-{
-}
-
 PHPAPI void php_explicit_bzero(void *dst, size_t siz)
 {
+#ifdef __GNUC__
        memset(dst, 0, siz);
-       __explicit_bzero_hook(dst, siz);
+       asm __volatile__("" :: "r"(dst) : "memory"); 
+#else
+       size_t i = 0;
+       volatile unsigned char *buf = (volatile unsigned char *)dst;
+
+       for (; i < siz; i ++)
+               buf[i] = 0;
+#endif
 }
 #endif
 /*