mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-08 22:45:43 +00:00
268 lines
7.2 KiB
Diff
268 lines
7.2 KiB
Diff
|
From 3af195918143906fd262059302139d59cf4a0a70 Mon Sep 17 00:00:00 2001
|
||
|
From: Al Viro <viro@zeniv.linux.org.uk>
|
||
|
Date: Mon, 26 Dec 2016 04:10:19 -0500
|
||
|
Subject: [PATCH 2/2] arm64: don't pull uaccess.h into *.S
|
||
|
|
||
|
Split asm-only parts of arm64 uaccess.h into a new header and use that
|
||
|
from *.S.
|
||
|
|
||
|
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
|
||
|
---
|
||
|
arch/arm64/include/asm/asm-uaccess.h | 65 ++++++++++++++++++++++++++++++++++++
|
||
|
arch/arm64/include/asm/uaccess.h | 64 -----------------------------------
|
||
|
arch/arm64/kernel/entry.S | 2 +-
|
||
|
arch/arm64/lib/clear_user.S | 2 +-
|
||
|
arch/arm64/lib/copy_from_user.S | 2 +-
|
||
|
arch/arm64/lib/copy_in_user.S | 2 +-
|
||
|
arch/arm64/lib/copy_to_user.S | 2 +-
|
||
|
arch/arm64/mm/cache.S | 2 +-
|
||
|
arch/arm64/xen/hypercall.S | 2 +-
|
||
|
9 files changed, 72 insertions(+), 71 deletions(-)
|
||
|
create mode 100644 arch/arm64/include/asm/asm-uaccess.h
|
||
|
|
||
|
diff --git a/arch/arm64/include/asm/asm-uaccess.h b/arch/arm64/include/asm/asm-uaccess.h
|
||
|
new file mode 100644
|
||
|
index 000000000000..df411f3e083c
|
||
|
--- /dev/null
|
||
|
+++ b/arch/arm64/include/asm/asm-uaccess.h
|
||
|
@@ -0,0 +1,65 @@
|
||
|
+#ifndef __ASM_ASM_UACCESS_H
|
||
|
+#define __ASM_ASM_UACCESS_H
|
||
|
+
|
||
|
+#include <asm/alternative.h>
|
||
|
+#include <asm/kernel-pgtable.h>
|
||
|
+#include <asm/sysreg.h>
|
||
|
+#include <asm/assembler.h>
|
||
|
+
|
||
|
+/*
|
||
|
+ * User access enabling/disabling macros.
|
||
|
+ */
|
||
|
+#ifdef CONFIG_ARM64_SW_TTBR0_PAN
|
||
|
+ .macro __uaccess_ttbr0_disable, tmp1
|
||
|
+ mrs \tmp1, ttbr1_el1 // swapper_pg_dir
|
||
|
+ add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of swapper_pg_dir
|
||
|
+ msr ttbr0_el1, \tmp1 // set reserved TTBR0_EL1
|
||
|
+ isb
|
||
|
+ .endm
|
||
|
+
|
||
|
+ .macro __uaccess_ttbr0_enable, tmp1
|
||
|
+ get_thread_info \tmp1
|
||
|
+ ldr \tmp1, [\tmp1, #TSK_TI_TTBR0] // load saved TTBR0_EL1
|
||
|
+ msr ttbr0_el1, \tmp1 // set the non-PAN TTBR0_EL1
|
||
|
+ isb
|
||
|
+ .endm
|
||
|
+
|
||
|
+ .macro uaccess_ttbr0_disable, tmp1
|
||
|
+alternative_if_not ARM64_HAS_PAN
|
||
|
+ __uaccess_ttbr0_disable \tmp1
|
||
|
+alternative_else_nop_endif
|
||
|
+ .endm
|
||
|
+
|
||
|
+ .macro uaccess_ttbr0_enable, tmp1, tmp2
|
||
|
+alternative_if_not ARM64_HAS_PAN
|
||
|
+ save_and_disable_irq \tmp2 // avoid preemption
|
||
|
+ __uaccess_ttbr0_enable \tmp1
|
||
|
+ restore_irq \tmp2
|
||
|
+alternative_else_nop_endif
|
||
|
+ .endm
|
||
|
+#else
|
||
|
+ .macro uaccess_ttbr0_disable, tmp1
|
||
|
+ .endm
|
||
|
+
|
||
|
+ .macro uaccess_ttbr0_enable, tmp1, tmp2
|
||
|
+ .endm
|
||
|
+#endif
|
||
|
+
|
||
|
+/*
|
||
|
+ * These macros are no-ops when UAO is present.
|
||
|
+ */
|
||
|
+ .macro uaccess_disable_not_uao, tmp1
|
||
|
+ uaccess_ttbr0_disable \tmp1
|
||
|
+alternative_if ARM64_ALT_PAN_NOT_UAO
|
||
|
+ SET_PSTATE_PAN(1)
|
||
|
+alternative_else_nop_endif
|
||
|
+ .endm
|
||
|
+
|
||
|
+ .macro uaccess_enable_not_uao, tmp1, tmp2
|
||
|
+ uaccess_ttbr0_enable \tmp1, \tmp2
|
||
|
+alternative_if ARM64_ALT_PAN_NOT_UAO
|
||
|
+ SET_PSTATE_PAN(0)
|
||
|
+alternative_else_nop_endif
|
||
|
+ .endm
|
||
|
+
|
||
|
+#endif
|
||
|
diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h
|
||
|
index d26750ca6e06..46da3ea638bb 100644
|
||
|
--- a/arch/arm64/include/asm/uaccess.h
|
||
|
+++ b/arch/arm64/include/asm/uaccess.h
|
||
|
@@ -22,8 +22,6 @@
|
||
|
#include <asm/kernel-pgtable.h>
|
||
|
#include <asm/sysreg.h>
|
||
|
|
||
|
-#ifndef __ASSEMBLY__
|
||
|
-
|
||
|
/*
|
||
|
* User space memory access functions
|
||
|
*/
|
||
|
@@ -424,66 +422,4 @@ extern long strncpy_from_user(char *dest, const char __user *src, long count);
|
||
|
extern __must_check long strlen_user(const char __user *str);
|
||
|
extern __must_check long strnlen_user(const char __user *str, long n);
|
||
|
|
||
|
-#else /* __ASSEMBLY__ */
|
||
|
-
|
||
|
-#include <asm/assembler.h>
|
||
|
-
|
||
|
-/*
|
||
|
- * User access enabling/disabling macros.
|
||
|
- */
|
||
|
-#ifdef CONFIG_ARM64_SW_TTBR0_PAN
|
||
|
- .macro __uaccess_ttbr0_disable, tmp1
|
||
|
- mrs \tmp1, ttbr1_el1 // swapper_pg_dir
|
||
|
- add \tmp1, \tmp1, #SWAPPER_DIR_SIZE // reserved_ttbr0 at the end of swapper_pg_dir
|
||
|
- msr ttbr0_el1, \tmp1 // set reserved TTBR0_EL1
|
||
|
- isb
|
||
|
- .endm
|
||
|
-
|
||
|
- .macro __uaccess_ttbr0_enable, tmp1
|
||
|
- get_thread_info \tmp1
|
||
|
- ldr \tmp1, [\tmp1, #TSK_TI_TTBR0] // load saved TTBR0_EL1
|
||
|
- msr ttbr0_el1, \tmp1 // set the non-PAN TTBR0_EL1
|
||
|
- isb
|
||
|
- .endm
|
||
|
-
|
||
|
- .macro uaccess_ttbr0_disable, tmp1
|
||
|
-alternative_if_not ARM64_HAS_PAN
|
||
|
- __uaccess_ttbr0_disable \tmp1
|
||
|
-alternative_else_nop_endif
|
||
|
- .endm
|
||
|
-
|
||
|
- .macro uaccess_ttbr0_enable, tmp1, tmp2
|
||
|
-alternative_if_not ARM64_HAS_PAN
|
||
|
- save_and_disable_irq \tmp2 // avoid preemption
|
||
|
- __uaccess_ttbr0_enable \tmp1
|
||
|
- restore_irq \tmp2
|
||
|
-alternative_else_nop_endif
|
||
|
- .endm
|
||
|
-#else
|
||
|
- .macro uaccess_ttbr0_disable, tmp1
|
||
|
- .endm
|
||
|
-
|
||
|
- .macro uaccess_ttbr0_enable, tmp1, tmp2
|
||
|
- .endm
|
||
|
-#endif
|
||
|
-
|
||
|
-/*
|
||
|
- * These macros are no-ops when UAO is present.
|
||
|
- */
|
||
|
- .macro uaccess_disable_not_uao, tmp1
|
||
|
- uaccess_ttbr0_disable \tmp1
|
||
|
-alternative_if ARM64_ALT_PAN_NOT_UAO
|
||
|
- SET_PSTATE_PAN(1)
|
||
|
-alternative_else_nop_endif
|
||
|
- .endm
|
||
|
-
|
||
|
- .macro uaccess_enable_not_uao, tmp1, tmp2
|
||
|
- uaccess_ttbr0_enable \tmp1, \tmp2
|
||
|
-alternative_if ARM64_ALT_PAN_NOT_UAO
|
||
|
- SET_PSTATE_PAN(0)
|
||
|
-alternative_else_nop_endif
|
||
|
- .endm
|
||
|
-
|
||
|
-#endif /* __ASSEMBLY__ */
|
||
|
-
|
||
|
#endif /* __ASM_UACCESS_H */
|
||
|
diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
|
||
|
index a7504f40d7ee..923841ffe4a9 100644
|
||
|
--- a/arch/arm64/kernel/entry.S
|
||
|
+++ b/arch/arm64/kernel/entry.S
|
||
|
@@ -31,7 +31,7 @@
|
||
|
#include <asm/memory.h>
|
||
|
#include <asm/ptrace.h>
|
||
|
#include <asm/thread_info.h>
|
||
|
-#include <linux/uaccess.h>
|
||
|
+#include <asm/asm-uaccess.h>
|
||
|
#include <asm/unistd.h>
|
||
|
|
||
|
/*
|
||
|
diff --git a/arch/arm64/lib/clear_user.S b/arch/arm64/lib/clear_user.S
|
||
|
index add4a1334085..e88fb99c1561 100644
|
||
|
--- a/arch/arm64/lib/clear_user.S
|
||
|
+++ b/arch/arm64/lib/clear_user.S
|
||
|
@@ -17,7 +17,7 @@
|
||
|
*/
|
||
|
#include <linux/linkage.h>
|
||
|
|
||
|
-#include <linux/uaccess.h>
|
||
|
+#include <asm/asm-uaccess.h>
|
||
|
|
||
|
.text
|
||
|
|
||
|
diff --git a/arch/arm64/lib/copy_from_user.S b/arch/arm64/lib/copy_from_user.S
|
||
|
index fd6cd05593f9..4b5d826895ff 100644
|
||
|
--- a/arch/arm64/lib/copy_from_user.S
|
||
|
+++ b/arch/arm64/lib/copy_from_user.S
|
||
|
@@ -17,7 +17,7 @@
|
||
|
#include <linux/linkage.h>
|
||
|
|
||
|
#include <asm/cache.h>
|
||
|
-#include <linux/uaccess.h>
|
||
|
+#include <asm/asm-uaccess.h>
|
||
|
|
||
|
/*
|
||
|
* Copy from user space to a kernel buffer (alignment handled by the hardware)
|
||
|
diff --git a/arch/arm64/lib/copy_in_user.S b/arch/arm64/lib/copy_in_user.S
|
||
|
index d828540ded6f..47184c3a97da 100644
|
||
|
--- a/arch/arm64/lib/copy_in_user.S
|
||
|
+++ b/arch/arm64/lib/copy_in_user.S
|
||
|
@@ -19,7 +19,7 @@
|
||
|
#include <linux/linkage.h>
|
||
|
|
||
|
#include <asm/cache.h>
|
||
|
-#include <linux/uaccess.h>
|
||
|
+#include <asm/asm-uaccess.h>
|
||
|
|
||
|
/*
|
||
|
* Copy from user space to user space (alignment handled by the hardware)
|
||
|
diff --git a/arch/arm64/lib/copy_to_user.S b/arch/arm64/lib/copy_to_user.S
|
||
|
index 3e6ae2663b82..351f0766f7a6 100644
|
||
|
--- a/arch/arm64/lib/copy_to_user.S
|
||
|
+++ b/arch/arm64/lib/copy_to_user.S
|
||
|
@@ -17,7 +17,7 @@
|
||
|
#include <linux/linkage.h>
|
||
|
|
||
|
#include <asm/cache.h>
|
||
|
-#include <linux/uaccess.h>
|
||
|
+#include <asm/asm-uaccess.h>
|
||
|
|
||
|
/*
|
||
|
* Copy to user space from a kernel buffer (alignment handled by the hardware)
|
||
|
diff --git a/arch/arm64/mm/cache.S b/arch/arm64/mm/cache.S
|
||
|
index 17f422a4dc55..83c27b6e6dca 100644
|
||
|
--- a/arch/arm64/mm/cache.S
|
||
|
+++ b/arch/arm64/mm/cache.S
|
||
|
@@ -23,7 +23,7 @@
|
||
|
#include <asm/assembler.h>
|
||
|
#include <asm/cpufeature.h>
|
||
|
#include <asm/alternative.h>
|
||
|
-#include <linux/uaccess.h>
|
||
|
+#include <asm/asm-uaccess.h>
|
||
|
|
||
|
/*
|
||
|
* flush_icache_range(start,end)
|
||
|
diff --git a/arch/arm64/xen/hypercall.S b/arch/arm64/xen/hypercall.S
|
||
|
index 47cf3f9d89ff..947830a459d2 100644
|
||
|
--- a/arch/arm64/xen/hypercall.S
|
||
|
+++ b/arch/arm64/xen/hypercall.S
|
||
|
@@ -49,7 +49,7 @@
|
||
|
|
||
|
#include <linux/linkage.h>
|
||
|
#include <asm/assembler.h>
|
||
|
-#include <linux/uaccess.h>
|
||
|
+#include <asm/asm-uaccess.h>
|
||
|
#include <xen/interface/xen.h>
|
||
|
|
||
|
|
||
|
--
|
||
|
2.11.0
|
||
|
|