All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 00/21] arm64: Early CPU feature override, and applications to VHE, BTI and PAuth
@ 2021-01-18  9:45 ` Marc Zyngier
  0 siblings, 0 replies; 166+ messages in thread
From: Marc Zyngier @ 2021-01-18  9:45 UTC (permalink / raw)
  To: linux-arm-kernel, kvmarm, linux-kernel
  Cc: Catalin Marinas, Will Deacon, Mark Rutland, David Brazdil,
	Alexandru Elisei, Ard Biesheuvel, Jing Zhang, Ajay Patil,
	Prasad Sodagudi, Srinivas Ramana, James Morse, Julien Thierry,
	Suzuki K Poulose, kernel-team

It recently came to light that there is a need to be able to override
some CPU features very early on, before the kernel is fully up and
running. The reasons for this range from specific feature support
(such as using Protected KVM on VHE HW, which is the main motivation
for this work) to errata workaround (a feature is broken on a CPU and
needs to be turned off, or rather not enabled).

This series tries to offer a limited framework for this kind of
problems, by allowing a set of options to be passed on the
command-line and altering the feature set that the cpufeature
subsystem exposes to the rest of the kernel. Note that this doesn't
change anything for code that directly uses the CPU ID registers.

The series completely changes the way a VHE-capable system boots, by
*always* booting non-VHE first, and then upgrading to VHE when deemed
capable. Although it sounds scary, this is actually simple to
implement (and I wish I had done that five years ago). The "upgrade to
VHE" path is then conditioned on the VHE feature not being disabled
from the command-line.

Said command-line parsing borrows a lot from the kaslr code, and
subsequently allows the "nokaslr" option to be moved to the new
infrastructure (though it all looks a bit... odd).

Further patches now add support for disabling BTI and PAuth, the
latter being based on an initial series by Srinivas Ramana[0]. There
is some ongoing discussions about being able to disable MTE, but no
clear resolution on that subject yet.

This has been tested on multiple VHE and non-VHE systems.

* From v3 [3]:
  - Fixed the VHE_RESTART stub (duh!)
  - Switched to using arm64_ftr_safe_value() instead of the user
    provided value
  - Per-feature override warning

* From v2 [2]:
  - Simplify the VHE_RESTART stub
  - Fixed a number of spelling mistakes, and hopefully introduced a
    few more
  - Override features in __read_sysreg_by_encoding()
  - Allow both BTI and PAuth to be overridden on the command line
  - Rebased on -rc3

* From v1 [1]:
  - Fix SPE init on VHE when EL2 doesn't own SPE
  - Fix re-init when KASLR is used
  - Handle the resume path
  - Rebased to 5.11-rc2

[0] https://lore.kernel.org/r/1610152163-16554-1-git-send-email-sramana@codeaurora.org
[1] https://lore.kernel.org/r/20201228104958.1848833-1-maz@kernel.org
[2] https://lore.kernel.org/r/20210104135011.2063104-1-maz@kernel.org
[3] https://lore.kernel.org/r/20210111132811.2455113-1-maz@kernel.org

Marc Zyngier (20):
  arm64: Fix labels in el2_setup macros
  arm64: Fix outdated TCR setup comment
  arm64: Turn the MMU-on sequence into a macro
  arm64: Provide an 'upgrade to VHE' stub hypercall
  arm64: Initialise as nVHE before switching to VHE
  arm64: Move VHE-specific SPE setup to mutate_to_vhe()
  arm64: Simplify init_el2_state to be non-VHE only
  arm64: Move SCTLR_EL1 initialisation to EL-agnostic code
  arm64: cpufeature: Add global feature override facility
  arm64: cpufeature: Use IDreg override in __read_sysreg_by_encoding()
  arm64: Extract early FDT mapping from kaslr_early_init()
  arm64: cpufeature: Add an early command-line cpufeature override
    facility
  arm64: Allow ID_AA64MMFR1_EL1.VH to be overridden from the command
    line
  arm64: Honor VHE being disabled from the command-line
  arm64: Add an aliasing facility for the idreg override
  arm64: Make kvm-arm.mode={nvhe,protected} an alias of
    id_aa64mmfr1.vh=0
  KVM: arm64: Document HVC_VHE_RESTART stub hypercall
  arm64: Move "nokaslr" over to the early cpufeature infrastructure
  arm64: cpufeatures: Allow disabling of BTI from the command-line
  arm64: cpufeatures: Allow disabling of Pointer Auth from the
    command-line

Srinivas Ramana (1):
  arm64: Defer enabling pointer authentication on boot core

 .../admin-guide/kernel-parameters.txt         |   9 +
 Documentation/virt/kvm/arm/hyp-abi.rst        |   9 +
 arch/arm64/include/asm/assembler.h            |  17 ++
 arch/arm64/include/asm/cpufeature.h           |  10 +
 arch/arm64/include/asm/el2_setup.h            |  60 ++----
 arch/arm64/include/asm/pointer_auth.h         |  10 +
 arch/arm64/include/asm/setup.h                |  11 +
 arch/arm64/include/asm/stackprotector.h       |   1 +
 arch/arm64/include/asm/virt.h                 |   7 +-
 arch/arm64/kernel/Makefile                    |   2 +-
 arch/arm64/kernel/cpufeature.c                |  75 ++++++-
 arch/arm64/kernel/head.S                      |  75 ++-----
 arch/arm64/kernel/hyp-stub.S                  | 124 ++++++++++-
 arch/arm64/kernel/idreg-override.c            | 199 ++++++++++++++++++
 arch/arm64/kernel/kaslr.c                     |  44 +---
 arch/arm64/kernel/setup.c                     |  15 ++
 arch/arm64/kernel/sleep.S                     |   1 +
 arch/arm64/kvm/arm.c                          |   3 +
 arch/arm64/kvm/hyp/nvhe/hyp-init.S            |   2 +-
 arch/arm64/mm/mmu.c                           |   2 +-
 arch/arm64/mm/proc.S                          |  16 +-
 21 files changed, 523 insertions(+), 169 deletions(-)
 create mode 100644 arch/arm64/include/asm/setup.h
 create mode 100644 arch/arm64/kernel/idreg-override.c

-- 
2.29.2


^ permalink raw reply	[flat|nested] 166+ messages in thread

end of thread, other threads:[~2021-01-27  9:56 UTC | newest]

Thread overview: 166+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-18  9:45 [PATCH v4 00/21] arm64: Early CPU feature override, and applications to VHE, BTI and PAuth Marc Zyngier
2021-01-18  9:45 ` Marc Zyngier
2021-01-18  9:45 ` Marc Zyngier
2021-01-18  9:45 ` [PATCH v4 01/21] arm64: Fix labels in el2_setup macros Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18 11:13   ` David Brazdil
2021-01-18 11:13     ` David Brazdil
2021-01-18 11:13     ` David Brazdil
2021-01-18  9:45 ` [PATCH v4 02/21] arm64: Fix outdated TCR setup comment Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-20 18:18   ` Catalin Marinas
2021-01-20 18:18     ` Catalin Marinas
2021-01-20 18:18     ` Catalin Marinas
2021-01-18  9:45 ` [PATCH v4 03/21] arm64: Turn the MMU-on sequence into a macro Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-20 18:18   ` Catalin Marinas
2021-01-20 18:18     ` Catalin Marinas
2021-01-20 18:18     ` Catalin Marinas
2021-01-18  9:45 ` [PATCH v4 04/21] arm64: Provide an 'upgrade to VHE' stub hypercall Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18 11:25   ` David Brazdil
2021-01-18 11:25     ` David Brazdil
2021-01-18 11:25     ` David Brazdil
2021-01-24 18:44     ` Marc Zyngier
2021-01-24 18:44       ` Marc Zyngier
2021-01-24 18:44       ` Marc Zyngier
2021-01-18  9:45 ` [PATCH v4 05/21] arm64: Initialise as nVHE before switching to VHE Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45 ` [PATCH v4 06/21] arm64: Move VHE-specific SPE setup to mutate_to_vhe() Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45 ` [PATCH v4 07/21] arm64: Simplify init_el2_state to be non-VHE only Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45 ` [PATCH v4 08/21] arm64: Move SCTLR_EL1 initialisation to EL-agnostic code Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-20 18:35   ` Catalin Marinas
2021-01-20 18:35     ` Catalin Marinas
2021-01-20 18:35     ` Catalin Marinas
2021-01-18  9:45 ` [PATCH v4 09/21] arm64: cpufeature: Add global feature override facility Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-22 18:41   ` Catalin Marinas
2021-01-22 18:41     ` Catalin Marinas
2021-01-22 18:41     ` Catalin Marinas
2021-01-23 15:59   ` Suzuki K Poulose
2021-01-23 15:59     ` Suzuki K Poulose
2021-01-23 15:59     ` Suzuki K Poulose
2021-01-18  9:45 ` [PATCH v4 10/21] arm64: cpufeature: Use IDreg override in __read_sysreg_by_encoding() Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-22 18:53   ` Catalin Marinas
2021-01-22 18:53     ` Catalin Marinas
2021-01-22 18:53     ` Catalin Marinas
2021-01-23 16:04     ` Suzuki K Poulose
2021-01-23 16:04       ` Suzuki K Poulose
2021-01-23 16:04       ` Suzuki K Poulose
2021-01-18  9:45 ` [PATCH v4 11/21] arm64: Extract early FDT mapping from kaslr_early_init() Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-22 18:55   ` Catalin Marinas
2021-01-22 18:55     ` Catalin Marinas
2021-01-22 18:55     ` Catalin Marinas
2021-01-23 13:25   ` Catalin Marinas
2021-01-23 13:25     ` Catalin Marinas
2021-01-23 13:25     ` Catalin Marinas
2021-01-18  9:45 ` [PATCH v4 12/21] arm64: cpufeature: Add an early command-line cpufeature override facility Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18 13:07   ` David Brazdil
2021-01-18 13:07     ` David Brazdil
2021-01-18 13:07     ` David Brazdil
2021-01-23 13:23   ` Catalin Marinas
2021-01-23 13:23     ` Catalin Marinas
2021-01-23 13:23     ` Catalin Marinas
2021-01-23 13:43   ` Catalin Marinas
2021-01-23 13:43     ` Catalin Marinas
2021-01-23 13:43     ` Catalin Marinas
2021-01-24 16:21     ` Marc Zyngier
2021-01-24 16:21       ` Marc Zyngier
2021-01-24 16:21       ` Marc Zyngier
2021-01-18  9:45 ` [PATCH v4 13/21] arm64: Allow ID_AA64MMFR1_EL1.VH to be overridden from the command line Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-23 14:04   ` Catalin Marinas
2021-01-23 14:04     ` Catalin Marinas
2021-01-23 14:04     ` Catalin Marinas
2021-01-18  9:45 ` [PATCH v4 14/21] arm64: Honor VHE being disabled from the command-line Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18 13:14   ` David Brazdil
2021-01-18 13:14     ` David Brazdil
2021-01-18 13:14     ` David Brazdil
2021-01-23 14:07   ` Catalin Marinas
2021-01-23 14:07     ` Catalin Marinas
2021-01-23 14:07     ` Catalin Marinas
2021-01-24 15:59     ` Marc Zyngier
2021-01-24 15:59       ` Marc Zyngier
2021-01-24 15:59       ` Marc Zyngier
2021-01-18  9:45 ` [PATCH v4 15/21] arm64: Add an aliasing facility for the idreg override Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18 13:18   ` David Brazdil
2021-01-18 13:18     ` David Brazdil
2021-01-18 13:18     ` David Brazdil
2021-01-24 19:01     ` Marc Zyngier
2021-01-24 19:01       ` Marc Zyngier
2021-01-24 19:01       ` Marc Zyngier
2021-01-23 14:12   ` Catalin Marinas
2021-01-23 14:12     ` Catalin Marinas
2021-01-23 14:12     ` Catalin Marinas
2021-01-18  9:45 ` [PATCH v4 16/21] arm64: Make kvm-arm.mode={nvhe,protected} an alias of id_aa64mmfr1.vh=0 Marc Zyngier
2021-01-18  9:45   ` [PATCH v4 16/21] arm64: Make kvm-arm.mode={nvhe, protected} " Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-23 14:15   ` [PATCH v4 16/21] arm64: Make kvm-arm.mode={nvhe,protected} " Catalin Marinas
2021-01-23 14:15     ` Catalin Marinas
2021-01-23 14:15     ` Catalin Marinas
2021-01-18  9:45 ` [PATCH v4 17/21] KVM: arm64: Document HVC_VHE_RESTART stub hypercall Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18 13:29   ` David Brazdil
2021-01-18 13:29     ` David Brazdil
2021-01-18 13:29     ` David Brazdil
2021-01-18  9:45 ` [PATCH v4 18/21] arm64: Move "nokaslr" over to the early cpufeature infrastructure Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18 14:46   ` David Brazdil
2021-01-18 14:46     ` David Brazdil
2021-01-18 14:46     ` David Brazdil
2021-01-24 18:41     ` Marc Zyngier
2021-01-24 18:41       ` Marc Zyngier
2021-01-24 18:41       ` Marc Zyngier
2021-01-23 14:19   ` Catalin Marinas
2021-01-23 14:19     ` Catalin Marinas
2021-01-23 14:19     ` Catalin Marinas
2021-01-18  9:45 ` [PATCH v4 19/21] arm64: cpufeatures: Allow disabling of BTI from the command-line Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-23 14:24   ` Catalin Marinas
2021-01-23 14:24     ` Catalin Marinas
2021-01-23 14:24     ` Catalin Marinas
2021-01-26 20:35     ` Srinivas Ramana
2021-01-26 20:35       ` Srinivas Ramana
2021-01-18  9:45 ` [PATCH v4 20/21] arm64: Defer enabling pointer authentication on boot core Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-23 14:26   ` Catalin Marinas
2021-01-23 14:26     ` Catalin Marinas
2021-01-23 14:26     ` Catalin Marinas
2021-01-18  9:45 ` [PATCH v4 21/21] arm64: cpufeatures: Allow disabling of Pointer Auth from the command-line Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-18  9:45   ` Marc Zyngier
2021-01-23 14:28   ` Catalin Marinas
2021-01-23 14:28     ` Catalin Marinas
2021-01-23 14:28     ` Catalin Marinas
2021-01-26 20:30     ` Srinivas Ramana
2021-01-26 20:30       ` Srinivas Ramana
2021-01-18 14:54 ` [PATCH v4 00/21] arm64: Early CPU feature override, and applications to VHE, BTI and PAuth David Brazdil
2021-01-18 14:54   ` David Brazdil
2021-01-18 14:54   ` David Brazdil

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.