/[packages]/updates/8/kernel/current/SOURCES/arm64-entry-free-up-another-register-on-kpti-s-tramp_exit-path.patch
ViewVC logotype

Contents of /updates/8/kernel/current/SOURCES/arm64-entry-free-up-another-register-on-kpti-s-tramp_exit-path.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1789982 - (show annotations) (download)
Tue Mar 8 23:11:59 2022 UTC (2 years, 1 month ago) by tmb
File size: 2109 byte(s)
add current -stable queue
1 From foo@baz Tue Mar 8 08:47:19 PM CET 2022
2 From: James Morse <james.morse@arm.com>
3 Date: Tue, 23 Nov 2021 18:41:43 +0000
4 Subject: arm64: entry: Free up another register on kpti's tramp_exit path
5
6 From: James Morse <james.morse@arm.com>
7
8 commit 03aff3a77a58b5b52a77e00537a42090ad57b80b upstream.
9
10 Kpti stashes x30 in far_el1 while it uses x30 for all its work.
11
12 Making the vectors a per-cpu data structure will require a second
13 register.
14
15 Allow tramp_exit two registers before it unmaps the kernel, by
16 leaving x30 on the stack, and stashing x29 in far_el1.
17
18 Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
19 Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
20 Signed-off-by: James Morse <james.morse@arm.com>
21 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
22 ---
23 arch/arm64/kernel/entry.S | 19 +++++++++++++------
24 1 file changed, 13 insertions(+), 6 deletions(-)
25
26 --- a/arch/arm64/kernel/entry.S
27 +++ b/arch/arm64/kernel/entry.S
28 @@ -419,14 +419,16 @@ alternative_else_nop_endif
29 ldp x24, x25, [sp, #16 * 12]
30 ldp x26, x27, [sp, #16 * 13]
31 ldp x28, x29, [sp, #16 * 14]
32 - ldr lr, [sp, #S_LR]
33 - add sp, sp, #PT_REGS_SIZE // restore sp
34
35 .if \el == 0
36 -alternative_insn eret, nop, ARM64_UNMAP_KERNEL_AT_EL0
37 +alternative_if_not ARM64_UNMAP_KERNEL_AT_EL0
38 + ldr lr, [sp, #S_LR]
39 + add sp, sp, #PT_REGS_SIZE // restore sp
40 + eret
41 +alternative_else_nop_endif
42 #ifdef CONFIG_UNMAP_KERNEL_AT_EL0
43 bne 4f
44 - msr far_el1, x30
45 + msr far_el1, x29
46 tramp_alias x30, tramp_exit_native
47 br x30
48 4:
49 @@ -434,6 +436,9 @@ alternative_insn eret, nop, ARM64_UNMAP_
50 br x30
51 #endif
52 .else
53 + ldr lr, [sp, #S_LR]
54 + add sp, sp, #PT_REGS_SIZE // restore sp
55 +
56 /* Ensure any device/NC reads complete */
57 alternative_insn nop, "dmb sy", ARM64_WORKAROUND_1508412
58
59 @@ -674,10 +679,12 @@ alternative_else_nop_endif
60 .macro tramp_exit, regsize = 64
61 adr x30, tramp_vectors
62 msr vbar_el1, x30
63 - tramp_unmap_kernel x30
64 + ldr lr, [sp, #S_LR]
65 + tramp_unmap_kernel x29
66 .if \regsize == 64
67 - mrs x30, far_el1
68 + mrs x29, far_el1
69 .endif
70 + add sp, sp, #PT_REGS_SIZE // restore sp
71 eret
72 sb
73 .endm

  ViewVC Help
Powered by ViewVC 1.1.30