aboutsummaryrefslogtreecommitdiff
path: root/arch/arm64/include/asm/kasan.h
diff options
context:
space:
mode:
authorAlex Shi <alex.shi@linaro.org>2016-04-27 09:52:15 +0800
committerAlex Shi <alex.shi@linaro.org>2016-04-27 09:52:15 +0800
commite0ac66e00b01f6ff4e8274a4b5c008a26583c1b9 (patch)
treec845d5e80991f0eef3a38381036c8261baffb08a /arch/arm64/include/asm/kasan.h
parente9cd0f1ce300f433a478bd1973dea112b5fbb800 (diff)
parent7b44c3df0b89d05c80e15eb0522a21d033d1314f (diff)
Merge branch 'v3.18/topic/KASAN' into linux-linaro-lsk-v3.18lsk-v3.18-16.04
Diffstat (limited to 'arch/arm64/include/asm/kasan.h')
-rw-r--r--arch/arm64/include/asm/kasan.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/arch/arm64/include/asm/kasan.h b/arch/arm64/include/asm/kasan.h
new file mode 100644
index 000000000000..2774fa384c47
--- /dev/null
+++ b/arch/arm64/include/asm/kasan.h
@@ -0,0 +1,38 @@
+#ifndef __ASM_KASAN_H
+#define __ASM_KASAN_H
+
+#ifndef __ASSEMBLY__
+
+#ifdef CONFIG_KASAN
+
+#include <linux/linkage.h>
+#include <asm/memory.h>
+
+/*
+ * KASAN_SHADOW_START: beginning of the kernel virtual addresses.
+ * KASAN_SHADOW_END: KASAN_SHADOW_START + 1/8 of kernel virtual addresses.
+ */
+#define KASAN_SHADOW_START (VA_START)
+#define KASAN_SHADOW_END (KASAN_SHADOW_START + (1UL << (VA_BITS - 3)))
+
+/*
+ * This value is used to map an address to the corresponding shadow
+ * address by the following formula:
+ * shadow_addr = (address >> 3) + KASAN_SHADOW_OFFSET;
+ *
+ * (1 << 61) shadow addresses - [KASAN_SHADOW_OFFSET,KASAN_SHADOW_END]
+ * cover all 64-bits of virtual addresses. So KASAN_SHADOW_OFFSET
+ * should satisfy the following equation:
+ * KASAN_SHADOW_OFFSET = KASAN_SHADOW_END - (1ULL << 61)
+ */
+#define KASAN_SHADOW_OFFSET (KASAN_SHADOW_END - (1ULL << (64 - 3)))
+
+void kasan_init(void);
+asmlinkage void kasan_early_init(void);
+
+#else
+static inline void kasan_init(void) { }
+#endif
+
+#endif
+#endif