firmware/br-ext-chip-allwinner/board/v83x/kernel/patches/00000-arch_arm64_xen_hyperc...

33 lines
1.0 KiB
Diff

diff -drupN a/arch/arm64/xen/hypercall.S b/arch/arm64/xen/hypercall.S
--- a/arch/arm64/xen/hypercall.S 2018-08-06 17:23:04.000000000 +0300
+++ b/arch/arm64/xen/hypercall.S 2022-06-12 05:28:14.000000000 +0300
@@ -49,6 +49,7 @@
#include <linux/linkage.h>
#include <asm/assembler.h>
+#include <asm/uaccess.h>
#include <xen/interface/xen.h>
@@ -91,6 +92,20 @@ ENTRY(privcmd_call)
mov x2, x3
mov x3, x4
mov x4, x5
+ /*
+ * Privcmd calls are issued by the userspace. The kernel needs to
+ * enable access to TTBR0_EL1 as the hypervisor would issue stage 1
+ * translations to user memory via AT instructions. Since AT
+ * instructions are not affected by the PAN bit (ARMv8.1), we only
+ * need the explicit uaccess_enable/disable if the TTBR0 PAN emulation
+ * is enabled (it implies that hardware UAO and PAN disabled).
+ */
+ uaccess_ttbr0_enable x6, x7, x8
hvc XEN_IMM
+
+ /*
+ * Disable userspace access from kernel once the hyp call completed.
+ */
+ uaccess_ttbr0_disable x6, x7
ret
ENDPROC(privcmd_call);