Message ID | 20200430144831.59194-7-dbrazdil@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Split off nVHE hyp code | expand |
On Thu, 30 Apr 2020 15:48:22 +0100 David Brazdil <dbrazdil@google.com> wrote: > This snippet of assembly is used by cpu_errata.c to overwrite parts of KVM hyp > vector. It is never directly executed, so move it from .text to .rodata. > > Signed-off-by: David Brazdil <dbrazdil@google.com> > --- > arch/arm64/kvm/hyp/hyp-entry.S | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/arch/arm64/kvm/hyp/hyp-entry.S b/arch/arm64/kvm/hyp/hyp-entry.S > index 5986e1d78d3f..7e5f386c5c2d 100644 > --- a/arch/arm64/kvm/hyp/hyp-entry.S > +++ b/arch/arm64/kvm/hyp/hyp-entry.S > @@ -364,6 +364,11 @@ SYM_CODE_END(__bp_harden_hyp_vecs) > .popsection > > #ifndef __HYPERVISOR__ > + /* > + * This is not executed directly and is instead copied into the vectors > + * by install_bp_hardening_cb(). > + */ > + .pushsection .rodata > SYM_CODE_START(__smccc_workaround_1_smc) I wonder whether we should keep the SYM_CODE_START() annotation or not. It feels weird to say "code" in a rodata section, and the alignment doesn't matter as we copy it in place, as you noticed. > esb > sub sp, sp, #(8 * 4) > @@ -377,5 +382,6 @@ SYM_CODE_START(__smccc_workaround_1_smc) > 1: .org __smccc_workaround_1_smc + __SMCCC_WORKAROUND_1_SMC_SZ > .org 1b > SYM_CODE_END(__smccc_workaround_1_smc) > + .popsection > #endif /* __HYPERVISOR__ */ > #endif /* CONFIG_KVM_INDIRECT_VECTORS */ Otherwise, looks good. Thanks, M.
On Mon, May 11, 2020 at 11:04:59AM +0100, Marc Zyngier wrote: > On Thu, 30 Apr 2020 15:48:22 +0100 > David Brazdil <dbrazdil@google.com> wrote: > > > This snippet of assembly is used by cpu_errata.c to overwrite parts of KVM hyp > > vector. It is never directly executed, so move it from .text to .rodata. > > > > Signed-off-by: David Brazdil <dbrazdil@google.com> > > --- > > arch/arm64/kvm/hyp/hyp-entry.S | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/arch/arm64/kvm/hyp/hyp-entry.S b/arch/arm64/kvm/hyp/hyp-entry.S > > index 5986e1d78d3f..7e5f386c5c2d 100644 > > --- a/arch/arm64/kvm/hyp/hyp-entry.S > > +++ b/arch/arm64/kvm/hyp/hyp-entry.S > > @@ -364,6 +364,11 @@ SYM_CODE_END(__bp_harden_hyp_vecs) > > .popsection > > > > #ifndef __HYPERVISOR__ > > + /* > > + * This is not executed directly and is instead copied into the vectors > > + * by install_bp_hardening_cb(). > > + */ > > + .pushsection .rodata > > SYM_CODE_START(__smccc_workaround_1_smc) > > I wonder whether we should keep the SYM_CODE_START() annotation or not. > It feels weird to say "code" in a rodata section, and the alignment > doesn't matter as we copy it in place, as you noticed. The BTI patches hook these, but I don't see that being relevant for a vector entry as PSTATE.BTYPE is zapped to 0. Will
diff --git a/arch/arm64/kvm/hyp/hyp-entry.S b/arch/arm64/kvm/hyp/hyp-entry.S index 5986e1d78d3f..7e5f386c5c2d 100644 --- a/arch/arm64/kvm/hyp/hyp-entry.S +++ b/arch/arm64/kvm/hyp/hyp-entry.S @@ -364,6 +364,11 @@ SYM_CODE_END(__bp_harden_hyp_vecs) .popsection #ifndef __HYPERVISOR__ + /* + * This is not executed directly and is instead copied into the vectors + * by install_bp_hardening_cb(). + */ + .pushsection .rodata SYM_CODE_START(__smccc_workaround_1_smc) esb sub sp, sp, #(8 * 4) @@ -377,5 +382,6 @@ SYM_CODE_START(__smccc_workaround_1_smc) 1: .org __smccc_workaround_1_smc + __SMCCC_WORKAROUND_1_SMC_SZ .org 1b SYM_CODE_END(__smccc_workaround_1_smc) + .popsection #endif /* __HYPERVISOR__ */ #endif /* CONFIG_KVM_INDIRECT_VECTORS */
This snippet of assembly is used by cpu_errata.c to overwrite parts of KVM hyp vector. It is never directly executed, so move it from .text to .rodata. Signed-off-by: David Brazdil <dbrazdil@google.com> --- arch/arm64/kvm/hyp/hyp-entry.S | 6 ++++++ 1 file changed, 6 insertions(+)