From: David Carlier Date: Sat, 9 Dec 2017 22:28:21 +0000 (+0000) Subject: Improve explicit_bzero implementation X-Git-Tag: php-7.3.0alpha1~779 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e835e3c1324bd5e285afd8403f7554c7a2fe3f4f;p=php Improve explicit_bzero implementation 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. --- diff --git a/main/explicit_bzero.c b/main/explicit_bzero.c index e99e082e6d..a6d99337fb 100644 --- a/main/explicit_bzero.c +++ b/main/explicit_bzero.c @@ -30,15 +30,18 @@ #include -__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 /*