xref: /optee_os/core/include/kernel/asan.h (revision 757331fc1216e0c1742c00123cc8c3349de3e884)
11bb92983SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */
21d171f95SJens Wiklander /*
31d171f95SJens Wiklander  * Copyright (c) 2016, Linaro Limited
41d171f95SJens Wiklander  */
51d171f95SJens Wiklander #ifndef __KERNEL_ASAN_H
61d171f95SJens Wiklander #define __KERNEL_ASAN_H
71d171f95SJens Wiklander 
81d171f95SJens Wiklander 
91d171f95SJens Wiklander #define ASAN_DATA_RED_ZONE	-1
101d171f95SJens Wiklander #define ASAN_HEAP_RED_ZONE	-2
111d171f95SJens Wiklander 
121d171f95SJens Wiklander #define ASAN_BLOCK_SIZE		8
131d171f95SJens Wiklander #define ASAN_BLOCK_SHIFT	3
141d171f95SJens Wiklander #define ASAN_BLOCK_MASK		(ASAN_BLOCK_SIZE - 1)
151d171f95SJens Wiklander 
16*757331fcSJens Wiklander #ifndef __ASSEMBLER__
17abccd909SJens Wiklander #include <string.h>
181d171f95SJens Wiklander #include <types_ext.h>
191d171f95SJens Wiklander 
20bce4951cSJens Wiklander void asan_set_shadowed(const void *va_begin, const void *va_end);
211d171f95SJens Wiklander void asan_start(void);
221d171f95SJens Wiklander 
231d171f95SJens Wiklander #ifdef CFG_CORE_SANITIZE_KADDRESS
24bce4951cSJens Wiklander void asan_tag_no_access(const void *begin, const void *end);
25bce4951cSJens Wiklander void asan_tag_access(const void *begin, const void *end);
26bce4951cSJens Wiklander void asan_tag_heap_free(const void *begin, const void *end);
27abccd909SJens Wiklander void *asan_memset_unchecked(void *s, int c, size_t n);
2806fe4216SJens Wiklander void *asan_memcpy_unchecked(void *__restrict s1, const void *__restrict s2,
2906fe4216SJens Wiklander 			    size_t n);
301d171f95SJens Wiklander #else
31bce4951cSJens Wiklander static inline void asan_tag_no_access(const void *begin __unused,
32bce4951cSJens Wiklander 				      const void *end __unused)
331d171f95SJens Wiklander {
341d171f95SJens Wiklander }
35bce4951cSJens Wiklander static inline void asan_tag_access(const void *begin __unused,
36bce4951cSJens Wiklander 				   const void *end __unused)
371d171f95SJens Wiklander {
381d171f95SJens Wiklander }
39bce4951cSJens Wiklander static inline void asan_tag_heap_free(const void *begin __unused,
40bce4951cSJens Wiklander 				      const void *end __unused)
411d171f95SJens Wiklander {
421d171f95SJens Wiklander }
43abccd909SJens Wiklander 
44abccd909SJens Wiklander static inline void *asan_memset_unchecked(void *s, int c, size_t n)
45abccd909SJens Wiklander {
46abccd909SJens Wiklander 	return memset(s, c, n);
47abccd909SJens Wiklander }
48abccd909SJens Wiklander 
4906fe4216SJens Wiklander static inline void *asan_memcpy_unchecked(void *__restrict s1,
5006fe4216SJens Wiklander 					  const void *__restrict s2, size_t n)
5106fe4216SJens Wiklander {
5206fe4216SJens Wiklander 	return memcpy(s1, s2, n);
5306fe4216SJens Wiklander }
5406fe4216SJens Wiklander 
551d171f95SJens Wiklander #endif
561d171f95SJens Wiklander 
57*757331fcSJens Wiklander #endif /*__ASSEMBLER__*/
581d171f95SJens Wiklander #endif /*__KERNEL_ASAN_H*/
59