From: Nikita Popov Date: Mon, 14 Jan 2019 10:43:02 +0000 (+0100) Subject: Fixed bug #77447 X-Git-Tag: php-7.3.2RC1~17 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c8c5a3ab8afdaa4692784a54a678cc565ecd1834;p=php Fixed bug #77447 By disabling asan for CPU support helpers used in ifunc resolvers. --- diff --git a/NEWS b/NEWS index 9d85fcd8d1..e65172c919 100644 --- a/NEWS +++ b/NEWS @@ -14,6 +14,8 @@ PHP NEWS . Fixed bug #77317 (__DIR__, __FILE__, realpath() reveal physical path for subst virtual drive). (Anatol) . Fixed bug #77263 (Segfault when using 2 RecursiveFilterIterator). (Dmitry) + . Fixed bug #77447 (PHP 7.3 built with ASAN crashes in + zend_cpu_supports_avx2). (Nikita) - Fileinfo: . Fixed bug #77346 (webm files incorrectly detected as diff --git a/Zend/zend_cpuinfo.h b/Zend/zend_cpuinfo.h index a72d1fbf18..2cd9626d11 100644 --- a/Zend/zend_cpuinfo.h +++ b/Zend/zend_cpuinfo.h @@ -100,12 +100,22 @@ typedef enum _zend_cpu_feature { void zend_cpu_startup(); ZEND_API int zend_cpu_supports(zend_cpu_feature feature); +/* Address sanitizer is incompatible with ifunc resolvers, so exclude the + * CPU support helpers from asan. + * See also https://github.com/google/sanitizers/issues/342. */ +#if __has_attribute(no_sanitize_address) +# define ZEND_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) +#else +# define ZEND_NO_SANITIZE_ADDRESS +#endif + #if PHP_HAVE_BUILTIN_CPU_SUPPORTS /* NOTE: you should use following inline function in * resolver functions (ifunc), as it could be called * before all PLT symbols are resloved. in other words, * resolver functions should not depends any external * functions */ +ZEND_NO_SANITIZE_ADDRESS static zend_always_inline int zend_cpu_supports_sse2() { #if PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); @@ -113,6 +123,7 @@ static zend_always_inline int zend_cpu_supports_sse2() { return __builtin_cpu_supports("sse2"); } +ZEND_NO_SANITIZE_ADDRESS static zend_always_inline int zend_cpu_supports_sse3() { #if PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); @@ -120,6 +131,7 @@ static zend_always_inline int zend_cpu_supports_sse3() { return __builtin_cpu_supports("sse3"); } +ZEND_NO_SANITIZE_ADDRESS static zend_always_inline int zend_cpu_supports_ssse3() { #if PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); @@ -127,6 +139,7 @@ static zend_always_inline int zend_cpu_supports_ssse3() { return __builtin_cpu_supports("ssse3"); } +ZEND_NO_SANITIZE_ADDRESS static zend_always_inline int zend_cpu_supports_sse41() { #if PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); @@ -134,6 +147,7 @@ static zend_always_inline int zend_cpu_supports_sse41() { return __builtin_cpu_supports("sse4.1"); } +ZEND_NO_SANITIZE_ADDRESS static zend_always_inline int zend_cpu_supports_sse42() { #if PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); @@ -141,6 +155,7 @@ static zend_always_inline int zend_cpu_supports_sse42() { return __builtin_cpu_supports("sse4.2"); } +ZEND_NO_SANITIZE_ADDRESS static zend_always_inline int zend_cpu_supports_avx() { #if PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); @@ -148,6 +163,7 @@ static zend_always_inline int zend_cpu_supports_avx() { return __builtin_cpu_supports("avx"); } +ZEND_NO_SANITIZE_ADDRESS static zend_always_inline int zend_cpu_supports_avx2() { #if PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init();