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 8b4bfc9a9SJens Wiklander #include <stdint.h> 91d171f95SJens Wiklander 101d171f95SJens Wiklander #define ASAN_DATA_RED_ZONE -1 111d171f95SJens Wiklander #define ASAN_HEAP_RED_ZONE -2 121d171f95SJens Wiklander 13b4bfc9a9SJens Wiklander #define ASAN_BLOCK_SIZE U(8) 14b4bfc9a9SJens Wiklander #define ASAN_BLOCK_SHIFT U(3) 151d171f95SJens Wiklander #define ASAN_BLOCK_MASK (ASAN_BLOCK_SIZE - 1) 161d171f95SJens Wiklander 17757331fcSJens Wiklander #ifndef __ASSEMBLER__ 18*555bde4bSJens Wiklander #include <compiler.h> 19abccd909SJens Wiklander #include <string.h> 201d171f95SJens Wiklander #include <types_ext.h> 211d171f95SJens Wiklander 22bce4951cSJens Wiklander void asan_set_shadowed(const void *va_begin, const void *va_end); 231d171f95SJens Wiklander void asan_start(void); 241d171f95SJens Wiklander 251d171f95SJens Wiklander #ifdef CFG_CORE_SANITIZE_KADDRESS 26bce4951cSJens Wiklander void asan_tag_no_access(const void *begin, const void *end); 27bce4951cSJens Wiklander void asan_tag_access(const void *begin, const void *end); 28bce4951cSJens Wiklander void asan_tag_heap_free(const void *begin, const void *end); 29abccd909SJens Wiklander void *asan_memset_unchecked(void *s, int c, size_t n); 3006fe4216SJens Wiklander void *asan_memcpy_unchecked(void *__restrict s1, const void *__restrict s2, 3106fe4216SJens Wiklander size_t n); 321d171f95SJens Wiklander #else 33bce4951cSJens Wiklander static inline void asan_tag_no_access(const void *begin __unused, 34bce4951cSJens Wiklander const void *end __unused) 351d171f95SJens Wiklander { 361d171f95SJens Wiklander } 37bce4951cSJens Wiklander static inline void asan_tag_access(const void *begin __unused, 38bce4951cSJens Wiklander const void *end __unused) 391d171f95SJens Wiklander { 401d171f95SJens Wiklander } 41bce4951cSJens Wiklander static inline void asan_tag_heap_free(const void *begin __unused, 42bce4951cSJens Wiklander const void *end __unused) 431d171f95SJens Wiklander { 441d171f95SJens Wiklander } 45abccd909SJens Wiklander 46abccd909SJens Wiklander static inline void *asan_memset_unchecked(void *s, int c, size_t n) 47abccd909SJens Wiklander { 48abccd909SJens Wiklander return memset(s, c, n); 49abccd909SJens Wiklander } 50abccd909SJens Wiklander 5106fe4216SJens Wiklander static inline void *asan_memcpy_unchecked(void *__restrict s1, 5206fe4216SJens Wiklander const void *__restrict s2, size_t n) 5306fe4216SJens Wiklander { 5406fe4216SJens Wiklander return memcpy(s1, s2, n); 5506fe4216SJens Wiklander } 5606fe4216SJens Wiklander 571d171f95SJens Wiklander #endif 581d171f95SJens Wiklander 59757331fcSJens Wiklander #endif /*__ASSEMBLER__*/ 601d171f95SJens Wiklander #endif /*__KERNEL_ASAN_H*/ 61