diff --git a/Zend/zend_cpuinfo.h b/Zend/zend_cpuinfo.h index 87bc75c39a4..009944e7129 100644 --- a/Zend/zend_cpuinfo.h +++ b/Zend/zend_cpuinfo.h @@ -111,11 +111,7 @@ ZEND_API int zend_cpu_supports(zend_cpu_feature feature); * CPU support helpers from asan. * See also https://github.com/google/sanitizers/issues/342. */ #if __has_attribute(no_sanitize_address) -# if __has_feature(memory_sanitizer) -# define ZEND_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) __attribute__((no_sanitize("memory"))) -# else -# define ZEND_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) -# endif +# define ZEND_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) #else # define ZEND_NO_SANITIZE_ADDRESS #endif diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h index aae08a49c16..9416a362e36 100644 --- a/Zend/zend_portability.h +++ b/Zend/zend_portability.h @@ -524,6 +524,14 @@ static zend_always_inline double _zend_get_nan(void) /* {{{ */ /* Intrinsics macros start. */ +/* Memory sanitizer is incompatible with ifunc resolvers. Even if the resolver + * is marked as no_sanitize("memory") it will still be instrumented and crash. */ +#if defined(__has_feature) +# if __has_feature(memory_sanitizer) +# undef HAVE_FUNC_ATTRIBUTE_IFUNC +# endif +#endif + #if defined(HAVE_FUNC_ATTRIBUTE_IFUNC) && defined(HAVE_FUNC_ATTRIBUTE_TARGET) # define ZEND_INTRIN_HAVE_IFUNC_TARGET 1 #endif