All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Jones <drjones@redhat.com>
To: Marc Zyngier <marc.zyngier@arm.com>
Cc: kvm@vger.kernel.org, Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	Kristina Martsenko <kristina.martsenko@arm.com>,
	kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v6 00/26] KVM/arm64: Randomise EL2 mappings (variant 3a mitigation)
Date: Thu, 15 Mar 2018 16:57:41 +0100	[thread overview]
Message-ID: <20180315155741.7syqjajb77kh5vx2@kamzik.brq.redhat.com> (raw)
In-Reply-To: <20180314165049.30105-1-marc.zyngier@arm.com>

On Wed, Mar 14, 2018 at 04:50:23PM +0000, Marc Zyngier wrote:
> Whilst KVM benefits from the kernel randomisation via KASLR, there is
> no additional randomisation when the kernel is running at EL1, as we
> directly use a fixed offset from the linear mapping. This is not
> necessarily a problem, but we could do a bit better by independently
> randomizing the HYP placement.
> 
> This series proposes to randomise the offset by inserting a few random
> bits between the MSB of the RAM linear mapping and the top of the HYP
> VA (VA_BITS - 2). That's not a lot of random bits (on my Mustang, I
> get 13 bits), but that's better than nothing.
> 
> In order to achieve this, we need to be able to patch dynamic values
> in the kernel text. This results in a bunch of changes to the
> alternative framework, the insn library, and a few more hacks in KVM
> itself (we get a new way to map the GIC at EL2).
> 
> Another (and more recent) goal of this series is to work around what
> has been described as "variant 3a", which covers speculative reads of
> privileged system registers. Randomizing the location of the
> hypervisor would be pointless if one could simply obtain VBAR_EL2. In
> order to work around this, we place the vectors at a fairly static
> location (next to the idmap), independently of the hypervisor's own
> mappings. This ensures that we can leak VBAR_EL2 without disclosing
> much about HYP itself (and is similar to what the rest of the kernel
> does with KPTI). This is only enabled at runtime for Cortex-A57 and
> Cortex-A72.
> 
> This has been tested on the FVP model, Seattle (both 39 and 48bit VA),
> Mustang and Thunder-X. I've also done a sanity check on 32bit (which
> is only impacted by the HYP IO VA stuff).
>

I've smoke tested this series on a seattle with several busy VMs running
simultaneously. My host kernel configures 64K pages. I didn't see any
problems.

Thanks,
drew

WARNING: multiple messages have this Message-ID (diff)
From: drjones@redhat.com (Andrew Jones)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v6 00/26] KVM/arm64: Randomise EL2 mappings (variant 3a mitigation)
Date: Thu, 15 Mar 2018 16:57:41 +0100	[thread overview]
Message-ID: <20180315155741.7syqjajb77kh5vx2@kamzik.brq.redhat.com> (raw)
In-Reply-To: <20180314165049.30105-1-marc.zyngier@arm.com>

On Wed, Mar 14, 2018 at 04:50:23PM +0000, Marc Zyngier wrote:
> Whilst KVM benefits from the kernel randomisation via KASLR, there is
> no additional randomisation when the kernel is running at EL1, as we
> directly use a fixed offset from the linear mapping. This is not
> necessarily a problem, but we could do a bit better by independently
> randomizing the HYP placement.
> 
> This series proposes to randomise the offset by inserting a few random
> bits between the MSB of the RAM linear mapping and the top of the HYP
> VA (VA_BITS - 2). That's not a lot of random bits (on my Mustang, I
> get 13 bits), but that's better than nothing.
> 
> In order to achieve this, we need to be able to patch dynamic values
> in the kernel text. This results in a bunch of changes to the
> alternative framework, the insn library, and a few more hacks in KVM
> itself (we get a new way to map the GIC at EL2).
> 
> Another (and more recent) goal of this series is to work around what
> has been described as "variant 3a", which covers speculative reads of
> privileged system registers. Randomizing the location of the
> hypervisor would be pointless if one could simply obtain VBAR_EL2. In
> order to work around this, we place the vectors at a fairly static
> location (next to the idmap), independently of the hypervisor's own
> mappings. This ensures that we can leak VBAR_EL2 without disclosing
> much about HYP itself (and is similar to what the rest of the kernel
> does with KPTI). This is only enabled at runtime for Cortex-A57 and
> Cortex-A72.
> 
> This has been tested on the FVP model, Seattle (both 39 and 48bit VA),
> Mustang and Thunder-X. I've also done a sanity check on 32bit (which
> is only impacted by the HYP IO VA stuff).
>

I've smoke tested this series on a seattle with several busy VMs running
simultaneously. My host kernel configures 64K pages. I didn't see any
problems.

Thanks,
drew

  parent reply	other threads:[~2018-03-15 15:57 UTC|newest]

Thread overview: 124+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-14 16:50 [PATCH v6 00/26] KVM/arm64: Randomise EL2 mappings (variant 3a mitigation) Marc Zyngier
2018-03-14 16:50 ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 01/26] arm64: alternatives: Add dynamic patching feature Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 02/26] arm64: insn: Add N immediate encoding Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 03/26] arm64: insn: Add encoder for bitwise operations using literals Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 04/26] arm64: KVM: Dynamically patch the kernel/hyp VA mask Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-15 19:15   ` James Morse
2018-03-15 19:15     ` James Morse
2018-03-16  8:52     ` Marc Zyngier
2018-03-16  8:52       ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 05/26] arm64: cpufeatures: Drop the ARM64_HYP_OFFSET_LOW feature flag Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 06/26] KVM: arm/arm64: Do not use kern_hyp_va() with kvm_vgic_global_state Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-15 19:16   ` James Morse
2018-03-15 19:16     ` James Morse
2018-03-16  9:31     ` Marc Zyngier
2018-03-16  9:31       ` Marc Zyngier
2018-03-16 11:35       ` Andrew Jones
2018-03-16 11:35         ` Andrew Jones
2018-03-16 11:38         ` Ard Biesheuvel
2018-03-16 11:38           ` Ard Biesheuvel
2018-03-16 11:51           ` Marc Zyngier
2018-03-16 11:51             ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 07/26] KVM: arm/arm64: Demote HYP VA range display to being a debug feature Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 08/26] KVM: arm/arm64: Move ioremap calls to create_hyp_io_mappings Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 09/26] KVM: arm/arm64: Keep GICv2 HYP VAs in kvm_vgic_global_state Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 10/26] KVM: arm/arm64: Fix idmap size and alignment Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-15 19:15   ` James Morse
2018-03-15 19:15     ` James Morse
2018-03-16  8:55     ` Marc Zyngier
2018-03-16  8:55       ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 11/26] KVM: arm64: Fix HYP idmap unmap when using 52bit PA Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-16 16:07   ` Catalin Marinas
2018-03-16 16:07     ` Catalin Marinas
2018-03-16 16:47   ` Suzuki K Poulose
2018-03-16 16:47     ` Suzuki K Poulose
2018-03-14 16:50 ` [PATCH v6 12/26] KVM: arm/arm64: Move HYP IO VAs to the "idmap" range Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-15 19:09   ` James Morse
2018-03-15 19:09     ` James Morse
2018-03-16  8:44     ` Marc Zyngier
2018-03-16  8:44       ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 13/26] arm64; insn: Add encoder for the EXTR instruction Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 14/26] arm64: insn: Allow ADD/SUB (immediate) with LSL #12 Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 15/26] arm64: KVM: Dynamically compute the HYP VA mask Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 16/26] arm64: KVM: Introduce EL2 VA randomisation Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 17/26] arm64: Update the KVM memory map documentation Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 18/26] arm64: KVM: Move vector offsetting from hyp-init.S to kvm_get_hyp_vector Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 19/26] arm64: KVM: Move stashing of x0/x1 into the vector code itself Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-15 14:39   ` Andrew Jones
2018-03-15 14:39     ` Andrew Jones
2018-03-16 16:22   ` Catalin Marinas
2018-03-16 16:22     ` Catalin Marinas
2018-03-16 16:37     ` Marc Zyngier
2018-03-16 16:37       ` Marc Zyngier
2018-03-16 16:38     ` Marc Zyngier
2018-03-16 16:38       ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 20/26] arm64: KVM: Move BP hardening vectors into .hyp.text section Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-15 14:42   ` Andrew Jones
2018-03-15 14:42     ` Andrew Jones
2018-03-16 16:24   ` Catalin Marinas
2018-03-16 16:24     ` Catalin Marinas
2018-03-14 16:50 ` [PATCH v6 21/26] arm64: KVM: Reserve 4 additional instructions in the BPI template Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-15 14:46   ` Andrew Jones
2018-03-15 14:46     ` Andrew Jones
2018-03-16 16:30   ` Catalin Marinas
2018-03-16 16:30     ` Catalin Marinas
2018-03-14 16:50 ` [PATCH v6 22/26] arm64: KVM: Allow far branches from vector slots to the main vectors Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 23/26] arm/arm64: KVM: Introduce EL2-specific executable mappings Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-15 15:03   ` Andrew Jones
2018-03-15 15:03     ` Andrew Jones
2018-03-15 15:53     ` Marc Zyngier
2018-03-15 15:53       ` Marc Zyngier
2018-03-14 16:50 ` [PATCH v6 24/26] arm64: Make BP hardening slot counter available Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-15 15:05   ` Andrew Jones
2018-03-15 15:05     ` Andrew Jones
2018-03-14 16:50 ` [PATCH v6 25/26] arm64: KVM: Allow mapping of vectors outside of the RAM region Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-15 15:54   ` Andrew Jones
2018-03-15 15:54     ` Andrew Jones
2018-03-15 16:17     ` Marc Zyngier
2018-03-15 16:17       ` Marc Zyngier
2018-03-15 17:08       ` Andrew Jones
2018-03-15 17:08         ` Andrew Jones
2018-03-15 18:47         ` Marc Zyngier
2018-03-15 18:47           ` Marc Zyngier
2018-03-16 12:33           ` Andrew Jones
2018-03-16 12:33             ` Andrew Jones
2018-03-14 16:50 ` [PATCH v6 26/26] arm64: Enable ARM64_HARDEN_EL2_VECTORS on Cortex-A57 and A72 Marc Zyngier
2018-03-14 16:50   ` Marc Zyngier
2018-03-15 15:57 ` Andrew Jones [this message]
2018-03-15 15:57   ` [PATCH v6 00/26] KVM/arm64: Randomise EL2 mappings (variant 3a mitigation) Andrew Jones
2018-03-15 16:19   ` Marc Zyngier
2018-03-15 16:19     ` Marc Zyngier
2018-03-15 16:40     ` Andrew Jones
2018-03-15 16:40       ` Andrew Jones
2018-03-15 16:52       ` Marc Zyngier
2018-03-15 16:52         ` Marc Zyngier
2018-03-16 17:46 ` Catalin Marinas
2018-03-16 17:46   ` Catalin Marinas
2018-03-16 18:05   ` Marc Zyngier
2018-03-16 18:05     ` Marc Zyngier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180315155741.7syqjajb77kh5vx2@kamzik.brq.redhat.com \
    --to=drjones@redhat.com \
    --cc=catalin.marinas@arm.com \
    --cc=kristina.martsenko@arm.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=marc.zyngier@arm.com \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.