diff --git a/Include/internal/pycore_pythonrun.h b/Include/internal/pycore_pythonrun.h index 2a544edc431e6b..36cb701673f8c9 100644 --- a/Include/internal/pycore_pythonrun.h +++ b/Include/internal/pycore_pythonrun.h @@ -46,6 +46,7 @@ extern PyObject * _Py_CompileStringObjectWithModule( * stack consumption of PyEval_EvalDefault */ #if (defined(Py_DEBUG) \ || defined(_Py_ADDRESS_SANITIZER) \ + || defined(_Py_HWADDRESS_SANITIZER) \ || defined(_Py_THREAD_SANITIZER)) # define _PyOS_LOG2_STACK_MARGIN 12 #else diff --git a/Include/pyport.h b/Include/pyport.h index c975921beafb9e..6bfe0e05a678d6 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -561,6 +561,12 @@ extern "C" { # define _Py_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) # endif # endif +# if __has_feature(hwaddress_sanitizer) +# if !defined(_Py_HWADDRESS_SANITIZER) +# define _Py_HWADDRESS_SANITIZER +# define _Py_NO_SANITIZE_HWADDRESS __attribute__((no_sanitize("hwaddress"))) +# endif +# endif # if __has_feature(thread_sanitizer) # if !defined(_Py_THREAD_SANITIZER) # define _Py_THREAD_SANITIZER @@ -572,6 +578,10 @@ extern "C" { # define _Py_ADDRESS_SANITIZER # define _Py_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) # endif +# if defined(__SANITIZE_HWADDRESS__) +# define _Py_HWADDRESS_SANITIZER +# define _Py_NO_SANITIZE_HWADDRESS __attribute__((no_sanitize("hwaddress"))) +# endif # if defined(__SANITIZE_THREAD__) # define _Py_THREAD_SANITIZER # define _Py_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread)) diff --git a/Modules/_testinternalcapi.c b/Modules/_testinternalcapi.c index 619f9f50574429..43d56ae970be97 100644 --- a/Modules/_testinternalcapi.c +++ b/Modules/_testinternalcapi.c @@ -1863,7 +1863,8 @@ static PyObject * check_pyobject_freed_is_freed(PyObject *self, PyObject *Py_UNUSED(args)) { /* ASan or TSan would report an use-after-free error */ -#if defined(_Py_ADDRESS_SANITIZER) || defined(_Py_THREAD_SANITIZER) +#if defined(_Py_ADDRESS_SANITIZER) || defined(_Py_THREAD_SANITIZER) || \ + defined(_Py_HWADDRESS_SANITIZER) Py_RETURN_NONE; #else PyObject *op = PyObject_CallNoArgs((PyObject *)&PyBaseObject_Type);