Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
heap_kasan.h
Go to the documentation of this file.
1/*
2 * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
11
12#ifndef ZEPHYR_INCLUDE_SYS_HEAP_KASAN_H_
13#define ZEPHYR_INCLUDE_SYS_HEAP_KASAN_H_
14
15#include <stdint.h>
16#include <stddef.h>
17#include <zephyr/sys/sys_heap.h>
18#include <zephyr/sys/bitarray.h>
19#include <zephyr/toolchain.h>
20#include <zephyr/init.h>
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26#if defined(CONFIG_SYS_HEAP_KASAN) || defined(__DOXYGEN__)
27
33
36#define SYS_HEAP_KASAN_GRANULE ((size_t)CONFIG_SYS_HEAP_KASAN_GRANULE)
38
40#define SYS_HEAP_KASAN_SHADOW_BITS(_sz) ((_sz) / SYS_HEAP_KASAN_GRANULE)
42#define SYS_HEAP_KASAN_SHADOW_BUNDLES(_sz) DIV_ROUND_UP(SYS_HEAP_KASAN_SHADOW_BITS(_sz), 32)
43
53void heap_kasan_report(uintptr_t addr, size_t size);
54
70
91#define SYS_HEAP_KASAN_ENABLE(_heap_name, _heap_sz) \
92 static uint32_t \
93 _heap_name##_kasan_bundles[SYS_HEAP_KASAN_SHADOW_BUNDLES(_heap_sz)] __noinit \
94 __aligned(4); \
95 static sys_bitarray_t _heap_name##_kasan_ba = { \
96 .num_bits = SYS_HEAP_KASAN_SHADOW_BITS(_heap_sz), \
97 .num_bundles = SYS_HEAP_KASAN_SHADOW_BUNDLES(_heap_sz), \
98 .bundles = _heap_name##_kasan_bundles, \
99 }; \
100 static int _heap_name##_kasan_init_fn(void) \
101 { \
102 heap_kasan_register(&(_heap_name), &_heap_name##_kasan_ba); \
103 return 0; \
104 } \
105 SYS_INIT(_heap_name##_kasan_init_fn, PRE_KERNEL_1, 0)
106
123#define K_HEAP_KASAN_ENABLE(_heap_name, _heap_sz) \
124 static uint32_t _heap_name##_kasan_bundles[SYS_HEAP_KASAN_SHADOW_BUNDLES( \
125 MAX(_heap_sz, Z_HEAP_MIN_SIZE))] __noinit __aligned(4); \
126 static sys_bitarray_t _heap_name##_kasan_ba = { \
127 .num_bits = SYS_HEAP_KASAN_SHADOW_BITS(MAX(_heap_sz, Z_HEAP_MIN_SIZE)), \
128 .num_bundles = SYS_HEAP_KASAN_SHADOW_BUNDLES(MAX(_heap_sz, Z_HEAP_MIN_SIZE)), \
129 .bundles = _heap_name##_kasan_bundles, \
130 }; \
131 static int _heap_name##_kasan_init_fn(void) \
132 { \
133 heap_kasan_register(&(_heap_name).heap, &_heap_name##_kasan_ba); \
134 return 0; \
135 } \
136 SYS_INIT(_heap_name##_kasan_init_fn, PRE_KERNEL_1, 0)
137
139
140#else /* !CONFIG_SYS_HEAP_KASAN */
141
143#define SYS_HEAP_KASAN_ENABLE(_heap_name, _heap_sz) /* no-op */
144#define K_HEAP_KASAN_ENABLE(_heap_name, _heap_sz) /* no-op */
146
147#endif /* CONFIG_SYS_HEAP_KASAN */
148
149#ifdef __cplusplus
150}
151#endif
152
153#endif /* ZEPHYR_INCLUDE_SYS_HEAP_KASAN_H_ */
Header file for the bit array API.
struct sys_bitarray sys_bitarray_t
Bitarray structure.
Definition bitarray.h:50
void heap_kasan_report(uintptr_t addr, size_t size)
Report a heap KASAN violation.
void heap_kasan_register(struct sys_heap *heap, sys_bitarray_t *ba)
Associate a shadow bitarray with a heap for KASAN tracking.
__UINTPTR_TYPE__ uintptr_t
Definition stdint.h:105
Definition sys_heap.h:60
Macros to abstract toolchain specific capabilities.