kasan.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /* Copyright (C) 2019 Andes Technology Corporation */
  3. #ifndef __ASM_KASAN_H
  4. #define __ASM_KASAN_H
  5. #ifndef __ASSEMBLY__
  6. #ifdef CONFIG_KASAN
  7. /*
  8. * The following comment was copied from arm64:
  9. * KASAN_SHADOW_START: beginning of the kernel virtual addresses.
  10. * KASAN_SHADOW_END: KASAN_SHADOW_START + 1/N of kernel virtual addresses,
  11. * where N = (1 << KASAN_SHADOW_SCALE_SHIFT).
  12. *
  13. * KASAN_SHADOW_OFFSET:
  14. * This value is used to map an address to the corresponding shadow
  15. * address by the following formula:
  16. * shadow_addr = (address >> KASAN_SHADOW_SCALE_SHIFT) + KASAN_SHADOW_OFFSET
  17. *
  18. * (1 << (64 - KASAN_SHADOW_SCALE_SHIFT)) shadow addresses that lie in range
  19. * [KASAN_SHADOW_OFFSET, KASAN_SHADOW_END) cover all 64-bits of virtual
  20. * addresses. So KASAN_SHADOW_OFFSET should satisfy the following equation:
  21. * KASAN_SHADOW_OFFSET = KASAN_SHADOW_END -
  22. * (1ULL << (64 - KASAN_SHADOW_SCALE_SHIFT))
  23. */
  24. #define KASAN_SHADOW_SCALE_SHIFT 3
  25. #define KASAN_SHADOW_SIZE (UL(1) << ((VA_BITS - 1) - KASAN_SHADOW_SCALE_SHIFT))
  26. /*
  27. * Depending on the size of the virtual address space, the region may not be
  28. * aligned on PGDIR_SIZE, so force its alignment to ease its population.
  29. */
  30. #define KASAN_SHADOW_START ((KASAN_SHADOW_END - KASAN_SHADOW_SIZE) & PGDIR_MASK)
  31. #define KASAN_SHADOW_END MODULES_LOWEST_VADDR
  32. #define KASAN_SHADOW_OFFSET _AC(CONFIG_KASAN_SHADOW_OFFSET, UL)
  33. void kasan_init(void);
  34. asmlinkage void kasan_early_init(void);
  35. void kasan_swapper_init(void);
  36. #endif
  37. #endif
  38. #endif /* __ASM_KASAN_H */