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 8*b4bfc9a9SJens Wiklander #include <stdint.h> 91d171f95SJens Wiklander 101d171f95SJens Wiklander #define ASAN_DATA_RED_ZONE -1 111d171f95SJens Wiklander #define ASAN_HEAP_RED_ZONE -2 121d171f95SJens Wiklander 13*b4bfc9a9SJens Wiklander #define ASAN_BLOCK_SIZE U(8) 14*b4bfc9a9SJens Wiklander #define ASAN_BLOCK_SHIFT U(3) 151d171f95SJens Wiklander #define ASAN_BLOCK_MASK (ASAN_BLOCK_SIZE - 1) 161d171f95SJens Wiklander 17757331fcSJens Wiklander #ifndef __ASSEMBLER__ 18abccd909SJens Wiklander #include <string.h> 191d171f95SJens Wiklander #include <types_ext.h> 201d171f95SJens Wiklander 21bce4951cSJens Wiklander void asan_set_shadowed(const void *va_begin, const void *va_end); 221d171f95SJens Wiklander void asan_start(void); 231d171f95SJens Wiklander 241d171f95SJens Wiklander #ifdef CFG_CORE_SANITIZE_KADDRESS 25bce4951cSJens Wiklander void asan_tag_no_access(const void *begin, const void *end); 26bce4951cSJens Wiklander void asan_tag_access(const void *begin, const void *end); 27bce4951cSJens Wiklander void asan_tag_heap_free(const void *begin, const void *end); 28abccd909SJens Wiklander void *asan_memset_unchecked(void *s, int c, size_t n); 2906fe4216SJens Wiklander void *asan_memcpy_unchecked(void *__restrict s1, const void *__restrict s2, 3006fe4216SJens Wiklander size_t n); 311d171f95SJens Wiklander #else 32bce4951cSJens Wiklander static inline void asan_tag_no_access(const void *begin __unused, 33bce4951cSJens Wiklander const void *end __unused) 341d171f95SJens Wiklander { 351d171f95SJens Wiklander } 36bce4951cSJens Wiklander static inline void asan_tag_access(const void *begin __unused, 37bce4951cSJens Wiklander const void *end __unused) 381d171f95SJens Wiklander { 391d171f95SJens Wiklander } 40bce4951cSJens Wiklander static inline void asan_tag_heap_free(const void *begin __unused, 41bce4951cSJens Wiklander const void *end __unused) 421d171f95SJens Wiklander { 431d171f95SJens Wiklander } 44abccd909SJens Wiklander 45abccd909SJens Wiklander static inline void *asan_memset_unchecked(void *s, int c, size_t n) 46abccd909SJens Wiklander { 47abccd909SJens Wiklander return memset(s, c, n); 48abccd909SJens Wiklander } 49abccd909SJens Wiklander 5006fe4216SJens Wiklander static inline void *asan_memcpy_unchecked(void *__restrict s1, 5106fe4216SJens Wiklander const void *__restrict s2, size_t n) 5206fe4216SJens Wiklander { 5306fe4216SJens Wiklander return memcpy(s1, s2, n); 5406fe4216SJens Wiklander } 5506fe4216SJens Wiklander 561d171f95SJens Wiklander #endif 571d171f95SJens Wiklander 58757331fcSJens Wiklander #endif /*__ASSEMBLER__*/ 591d171f95SJens Wiklander #endif /*__KERNEL_ASAN_H*/ 60