Commit | Line | Data |
---|---|---|
26deb043 CL |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #ifndef __ASM_KASAN_H | |
3 | #define __ASM_KASAN_H | |
4 | ||
90db9dbe | 5 | #if defined(CONFIG_KASAN) && !defined(CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX) |
26deb043 CL |
6 | #define _GLOBAL_KASAN(fn) _GLOBAL(__##fn) |
7 | #define _GLOBAL_TOC_KASAN(fn) _GLOBAL_TOC(__##fn) | |
8 | #define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(__##fn) | |
9 | #else | |
10 | #define _GLOBAL_KASAN(fn) _GLOBAL(fn) | |
11 | #define _GLOBAL_TOC_KASAN(fn) _GLOBAL_TOC(fn) | |
12 | #define EXPORT_SYMBOL_KASAN(fn) | |
13 | #endif | |
14 | ||
b4abe38f CL |
15 | #ifndef __ASSEMBLY__ |
16 | ||
17 | #include <asm/page.h> | |
48d2f040 | 18 | #include <linux/sizes.h> |
b4abe38f CL |
19 | |
20 | #define KASAN_SHADOW_SCALE_SHIFT 3 | |
21 | ||
0a956d52 | 22 | #if defined(CONFIG_EXECMEM) && defined(CONFIG_PPC32) |
48d2f040 CL |
23 | #define KASAN_KERN_START ALIGN_DOWN(PAGE_OFFSET - SZ_256M, SZ_256M) |
24 | #else | |
25 | #define KASAN_KERN_START PAGE_OFFSET | |
26 | #endif | |
27 | ||
b4abe38f | 28 | #define KASAN_SHADOW_START (KASAN_SHADOW_OFFSET + \ |
48d2f040 | 29 | (KASAN_KERN_START >> KASAN_SHADOW_SCALE_SHIFT)) |
b4abe38f CL |
30 | |
31 | #define KASAN_SHADOW_OFFSET ASM_CONST(CONFIG_KASAN_SHADOW_OFFSET) | |
32 | ||
41b7a347 | 33 | #ifdef CONFIG_PPC32 |
3a66a24f | 34 | #define KASAN_SHADOW_END (-(-KASAN_SHADOW_START >> KASAN_SHADOW_SCALE_SHIFT)) |
41b7a347 DA |
35 | #elif defined(CONFIG_PPC_BOOK3S_64) |
36 | /* | |
37 | * The shadow ends before the highest accessible address | |
38 | * because we don't need a shadow for the shadow. Instead: | |
39 | * c00e000000000000 << 3 + a80e000000000000 = c00fc00000000000 | |
40 | */ | |
41 | #define KASAN_SHADOW_END 0xc00fc00000000000UL | |
c7b9ed7c CL |
42 | |
43 | #else | |
44 | ||
45 | /* | |
46 | * The shadow ends before the highest accessible address | |
47 | * because we don't need a shadow for the shadow. | |
48 | * But it doesn't hurt to have a shadow for the shadow, | |
49 | * keep shadow end aligned eases things. | |
50 | */ | |
51 | #define KASAN_SHADOW_END 0xc000200000000000UL | |
52 | ||
41b7a347 | 53 | #endif |
b4abe38f | 54 | |
2edb16ef | 55 | #ifdef CONFIG_KASAN |
41b7a347 DA |
56 | #ifdef CONFIG_PPC_BOOK3S_64 |
57 | DECLARE_STATIC_KEY_FALSE(powerpc_kasan_enabled_key); | |
58 | ||
59 | static __always_inline bool kasan_arch_is_ready(void) | |
60 | { | |
61 | if (static_branch_likely(&powerpc_kasan_enabled_key)) | |
62 | return true; | |
63 | return false; | |
64 | } | |
65 | ||
66 | #define kasan_arch_is_ready kasan_arch_is_ready | |
67 | #endif | |
68 | ||
2edb16ef | 69 | void kasan_early_init(void); |
b506923e | 70 | void kasan_mmu_init(void); |
2edb16ef | 71 | void kasan_init(void); |
3d4247fc | 72 | void kasan_late_init(void); |
2edb16ef CL |
73 | #else |
74 | static inline void kasan_init(void) { } | |
b506923e | 75 | static inline void kasan_mmu_init(void) { } |
3d4247fc | 76 | static inline void kasan_late_init(void) { } |
2edb16ef CL |
77 | #endif |
78 | ||
7974c473 | 79 | void kasan_update_early_region(unsigned long k_start, unsigned long k_end, pte_t pte); |
ec97d022 CL |
80 | int kasan_init_shadow_page_tables(unsigned long k_start, unsigned long k_end); |
81 | int kasan_init_region(void *start, size_t size); | |
82 | ||
b4abe38f | 83 | #endif /* __ASSEMBLY */ |
26deb043 | 84 | #endif |