cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

kasan.h (1973B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __ASM_KASAN_H
      3#define __ASM_KASAN_H
      4
      5#ifdef CONFIG_KASAN
      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
     15#ifndef __ASSEMBLY__
     16
     17#include <asm/page.h>
     18#include <linux/sizes.h>
     19
     20#define KASAN_SHADOW_SCALE_SHIFT	3
     21
     22#ifdef CONFIG_MODULES
     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
     28#define KASAN_SHADOW_START	(KASAN_SHADOW_OFFSET + \
     29				 (KASAN_KERN_START >> KASAN_SHADOW_SCALE_SHIFT))
     30
     31#define KASAN_SHADOW_OFFSET	ASM_CONST(CONFIG_KASAN_SHADOW_OFFSET)
     32
     33#ifdef CONFIG_PPC32
     34#define KASAN_SHADOW_END	(-(-KASAN_SHADOW_START >> KASAN_SHADOW_SCALE_SHIFT))
     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
     42#endif
     43
     44#ifdef CONFIG_KASAN
     45#ifdef CONFIG_PPC_BOOK3S_64
     46DECLARE_STATIC_KEY_FALSE(powerpc_kasan_enabled_key);
     47
     48static __always_inline bool kasan_arch_is_ready(void)
     49{
     50	if (static_branch_likely(&powerpc_kasan_enabled_key))
     51		return true;
     52	return false;
     53}
     54
     55#define kasan_arch_is_ready kasan_arch_is_ready
     56#endif
     57
     58void kasan_early_init(void);
     59void kasan_mmu_init(void);
     60void kasan_init(void);
     61void kasan_late_init(void);
     62#else
     63static inline void kasan_init(void) { }
     64static inline void kasan_mmu_init(void) { }
     65static inline void kasan_late_init(void) { }
     66#endif
     67
     68void kasan_update_early_region(unsigned long k_start, unsigned long k_end, pte_t pte);
     69int kasan_init_shadow_page_tables(unsigned long k_start, unsigned long k_end);
     70int kasan_init_region(void *start, size_t size);
     71
     72#endif /* __ASSEMBLY */
     73#endif