diff --git a/arch/arm/src/common/arm_backtrace_fp.c b/arch/arm/src/common/arm_backtrace_fp.c index 1610334c723..80b942d903a 100644 --- a/arch/arm/src/common/arm_backtrace_fp.c +++ b/arch/arm/src/common/arm_backtrace_fp.c @@ -43,9 +43,7 @@ * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif +nosanitize_address static int backtrace(uintptr_t *base, uintptr_t *limit, uintptr_t *fp, uintptr_t *pc, void **buffer, int size, int *skip) @@ -106,9 +104,7 @@ static int backtrace(uintptr_t *base, uintptr_t *limit, * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif +nosanitize_address int up_backtrace(struct tcb_s *tcb, void **buffer, int size, int skip) { diff --git a/arch/arm/src/common/arm_backtrace_thumb.c b/arch/arm/src/common/arm_backtrace_thumb.c index 3ef63390237..4a8d45c13f6 100644 --- a/arch/arm/src/common/arm_backtrace_thumb.c +++ b/arch/arm/src/common/arm_backtrace_thumb.c @@ -99,10 +99,7 @@ static void **g_backtrace_code_regions; * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif -static int getlroffset(uint8_t *lr) +nosanitize_address static int getlroffset(uint8_t *lr) { lr = (uint8_t *)((uintptr_t)lr & 0xfffffffe); @@ -130,10 +127,7 @@ static int getlroffset(uint8_t *lr) * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif -static bool in_code_region(void *pc) +nosanitize_address static bool in_code_region(void *pc) { int i = 0; @@ -181,9 +175,7 @@ static bool in_code_region(void *pc) * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif +nosanitize_address static void *backtrace_push_internal(void **psp, void **ppc) { uint8_t *sp = *psp; @@ -311,9 +303,7 @@ static void *backtrace_push_internal(void **psp, void **ppc) * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif +nosanitize_address static int backtrace_push(void *limit, void **sp, void *pc, void **buffer, int size, int *skip) { @@ -361,9 +351,7 @@ static int backtrace_push(void *limit, void **sp, void *pc, * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif +nosanitize_address static int backtrace_branch(void *limit, void *sp, void **buffer, int size, int *skip) { @@ -445,10 +433,7 @@ static int backtrace_branch(void *limit, void *sp, * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif -void up_backtrace_init_code_regions(void **regions) +nosanitize_address void up_backtrace_init_code_regions(void **regions) { g_backtrace_code_regions = regions; } @@ -477,9 +462,7 @@ void up_backtrace_init_code_regions(void **regions) * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif +nosanitize_address int up_backtrace(struct tcb_s *tcb, void **buffer, int size, int skip) { diff --git a/arch/arm/src/tlsr82/tc32/tc32_backtrace.c b/arch/arm/src/tlsr82/tc32/tc32_backtrace.c index 0995a8f527d..017f212dc0a 100644 --- a/arch/arm/src/tlsr82/tc32/tc32_backtrace.c +++ b/arch/arm/src/tlsr82/tc32/tc32_backtrace.c @@ -81,10 +81,7 @@ static void **g_backtrace_code_regions; * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif -static int getlroffset(uint8_t *lr) +nosanitize_address static int getlroffset(uint8_t *lr) { lr = (uint8_t *)((uintptr_t)lr & 0xfffffffe); @@ -116,10 +113,7 @@ static int getlroffset(uint8_t *lr) * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif -static bool in_code_region(void *pc) +nosanitize_address static bool in_code_region(void *pc) { int i = 0; @@ -167,9 +161,7 @@ static bool in_code_region(void *pc) * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif +nosanitize_address static void *backtrace_push_internal(void **psp, void **ppc) { uint8_t *sp = *psp; @@ -290,9 +282,7 @@ static void *backtrace_push_internal(void **psp, void **ppc) * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif +nosanitize_address static int backtrace_push(void *limit, void **sp, void *pc, void **buffer, int size, int *skip) { @@ -340,9 +330,7 @@ static int backtrace_push(void *limit, void **sp, void *pc, * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif +nosanitize_address static int backtrace_branch(void *limit, void *sp, void **buffer, int size, int *skip) { @@ -425,10 +413,7 @@ static int backtrace_branch(void *limit, void *sp, * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif -void up_backtrace_init_code_regions(void **regions) +nosanitize_address void up_backtrace_init_code_regions(void **regions) { g_backtrace_code_regions = regions; } @@ -457,9 +442,7 @@ void up_backtrace_init_code_regions(void **regions) * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif +nosanitize_address int up_backtrace(struct tcb_s *tcb, void **buffer, int size, int skip) { struct tcb_s *rtcb = running_task(); diff --git a/arch/arm64/src/common/arm64_backtrace.c b/arch/arm64/src/common/arm64_backtrace.c index 340e67f1f74..7b72ef0c373 100644 --- a/arch/arm64/src/common/arm64_backtrace.c +++ b/arch/arm64/src/common/arm64_backtrace.c @@ -44,9 +44,7 @@ * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif +nosanitize_address static int backtrace(uintptr_t *base, uintptr_t *limit, uintptr_t *fp, uintptr_t *pc, void **buffer, int size, int *skip) @@ -107,9 +105,7 @@ static int backtrace(uintptr_t *base, uintptr_t *limit, * ****************************************************************************/ -#ifdef CONFIG_MM_KASAN -__attribute__((no_sanitize_address)) -#endif +nosanitize_address int up_backtrace(struct tcb_s *tcb, void **buffer, int size, int skip) { diff --git a/include/nuttx/compiler.h b/include/nuttx/compiler.h index 6fd45247890..227ceb488ac 100644 --- a/include/nuttx/compiler.h +++ b/include/nuttx/compiler.h @@ -191,6 +191,10 @@ # define noinstrument_function __attribute__ ((no_instrument_function)) +/* The nosanitize_address attribute informs GCC don't sanitize it */ + +# define nosanitize_address __attribute__ ((no_sanitize_address)) + /* The nostackprotect_function attribute disables stack protection in * sensitive functions, e.g., stack coloration routines. */ @@ -460,6 +464,7 @@ # define inline_function # define noinline_function # define noinstrument_function +# define nosanitize_address # define nostackprotect_function # define unused_code @@ -591,6 +596,7 @@ # define inline_function # define noinline_function # define noinstrument_function +# define nosanitize_address # define nostackprotect_function # define unused_code # define unused_data @@ -691,6 +697,7 @@ # define inline_function # define noinline_function # define noinstrument_function +# define nosanitize_address # define nostackprotect_function # define unused_code # define unused_data @@ -757,6 +764,7 @@ # define inline_function # define noinline_function # define noinstrument_function +# define nosanitize_address # define nostackprotect_function # define unused_code # define unused_data