0001
0002 #ifndef __ASM_KASAN_H
0003 #define __ASM_KASAN_H
0004
0005 #ifdef CONFIG_KASAN
0006 #define _GLOBAL_KASAN(fn) _GLOBAL(__##fn)
0007 #define _GLOBAL_TOC_KASAN(fn) _GLOBAL_TOC(__##fn)
0008 #define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(__##fn)
0009 #else
0010 #define _GLOBAL_KASAN(fn) _GLOBAL(fn)
0011 #define _GLOBAL_TOC_KASAN(fn) _GLOBAL_TOC(fn)
0012 #define EXPORT_SYMBOL_KASAN(fn)
0013 #endif
0014
0015 #ifndef __ASSEMBLY__
0016
0017 #include <asm/page.h>
0018 #include <linux/sizes.h>
0019
0020 #define KASAN_SHADOW_SCALE_SHIFT 3
0021
0022 #if defined(CONFIG_MODULES) && defined(CONFIG_PPC32)
0023 #define KASAN_KERN_START ALIGN_DOWN(PAGE_OFFSET - SZ_256M, SZ_256M)
0024 #else
0025 #define KASAN_KERN_START PAGE_OFFSET
0026 #endif
0027
0028 #define KASAN_SHADOW_START (KASAN_SHADOW_OFFSET + \
0029 (KASAN_KERN_START >> KASAN_SHADOW_SCALE_SHIFT))
0030
0031 #define KASAN_SHADOW_OFFSET ASM_CONST(CONFIG_KASAN_SHADOW_OFFSET)
0032
0033 #ifdef CONFIG_PPC32
0034 #define KASAN_SHADOW_END (-(-KASAN_SHADOW_START >> KASAN_SHADOW_SCALE_SHIFT))
0035 #elif defined(CONFIG_PPC_BOOK3S_64)
0036
0037
0038
0039
0040
0041 #define KASAN_SHADOW_END 0xc00fc00000000000UL
0042
0043 #else
0044
0045
0046
0047
0048
0049
0050
0051 #define KASAN_SHADOW_END 0xc000200000000000UL
0052
0053 #endif
0054
0055 #ifdef CONFIG_KASAN
0056 #ifdef CONFIG_PPC_BOOK3S_64
0057 DECLARE_STATIC_KEY_FALSE(powerpc_kasan_enabled_key);
0058
0059 static __always_inline bool kasan_arch_is_ready(void)
0060 {
0061 if (static_branch_likely(&powerpc_kasan_enabled_key))
0062 return true;
0063 return false;
0064 }
0065
0066 #define kasan_arch_is_ready kasan_arch_is_ready
0067 #endif
0068
0069 void kasan_early_init(void);
0070 void kasan_mmu_init(void);
0071 void kasan_init(void);
0072 void kasan_late_init(void);
0073 #else
0074 static inline void kasan_init(void) { }
0075 static inline void kasan_mmu_init(void) { }
0076 static inline void kasan_late_init(void) { }
0077 #endif
0078
0079 void kasan_update_early_region(unsigned long k_start, unsigned long k_end, pte_t pte);
0080 int kasan_init_shadow_page_tables(unsigned long k_start, unsigned long k_end);
0081 int kasan_init_region(void *start, size_t size);
0082
0083 #endif
0084 #endif