mirror of
https://github.com/php/php-src.git
synced 2024-11-23 09:54:15 +08:00
Disable ifunc resolvers if memory sanitizer is used
Just marking them as no_sanitize("memory") is unforunately not sufficient, as the function still gets instrumented -- the attribute only disables reporting.
This commit is contained in:
parent
cf29c0f212
commit
2c8819b89c
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user