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