From: Christoffer Dall <cdall@linaro.org>
To: Marc Zyngier <marc.zyngier@arm.com>
Cc: kvm@vger.kernel.org, David Daney <david.daney@cavium.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Robert Richter <rrichter@cavium.com>,
linux-arm-kernel@lists.infradead.org,
kvmarm@lists.cs.columbia.edu
Subject: Re: [PATCH v3 27/27] KVM: arm64: Log an error if trapping a write-to-read-only GICv3 access
Date: Fri, 9 Jun 2017 17:34:19 +0200 [thread overview]
Message-ID: <20170609153419.GI11099@cbox> (raw)
In-Reply-To: <20170609114956.25963-28-marc.zyngier@arm.com>
On Fri, Jun 09, 2017 at 12:49:56PM +0100, Marc Zyngier wrote:
> A write-to-read-only GICv3 access should UNDEF at EL1. But since
> we're in complete paranoia-land with broken CPUs, let's assume the
> worse and gracefully handle the case.
>
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Reviewed-by: Christoffer Dall <cdall@linaro.org>
> ---
> arch/arm64/kvm/sys_regs.c | 15 +++++++++++++++
> virt/kvm/arm/hyp/vgic-v3-sr.c | 6 ++++++
> 2 files changed, 21 insertions(+)
>
> diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c
> index 8d51c075966d..77862881ae86 100644
> --- a/arch/arm64/kvm/sys_regs.c
> +++ b/arch/arm64/kvm/sys_regs.c
> @@ -65,6 +65,16 @@ static bool read_from_write_only(struct kvm_vcpu *vcpu,
> return false;
> }
>
> +static bool write_to_read_only(struct kvm_vcpu *vcpu,
> + struct sys_reg_params *params,
> + const struct sys_reg_desc *r)
> +{
> + WARN_ONCE(1, "Unexpected sys_reg write to read-only register\n");
> + print_sys_reg_instr(params);
> + kvm_inject_undefined(vcpu);
> + return false;
> +}
> +
> /* 3 bits per cache level, as per CLIDR, but non-existent caches always 0 */
> static u32 cache_levels;
>
> @@ -954,10 +964,15 @@ static const struct sys_reg_desc sys_reg_descs[] = {
>
> { SYS_DESC(SYS_VBAR_EL1), NULL, reset_val, VBAR_EL1, 0 },
>
> + { SYS_DESC(SYS_ICC_IAR0_EL1), write_to_read_only },
> { SYS_DESC(SYS_ICC_EOIR0_EL1), read_from_write_only },
> + { SYS_DESC(SYS_ICC_HPPIR0_EL1), write_to_read_only },
> { SYS_DESC(SYS_ICC_DIR_EL1), read_from_write_only },
> + { SYS_DESC(SYS_ICC_RPR_EL1), write_to_read_only },
> { SYS_DESC(SYS_ICC_SGI1R_EL1), access_gic_sgi },
> + { SYS_DESC(SYS_ICC_IAR1_EL1), write_to_read_only },
> { SYS_DESC(SYS_ICC_EOIR1_EL1), read_from_write_only },
> + { SYS_DESC(SYS_ICC_HPPIR1_EL1), write_to_read_only },
> { SYS_DESC(SYS_ICC_SRE_EL1), access_gic_sre },
>
> { SYS_DESC(SYS_CONTEXTIDR_EL1), access_vm_reg, reset_val, CONTEXTIDR_EL1, 0 },
> diff --git a/virt/kvm/arm/hyp/vgic-v3-sr.c b/virt/kvm/arm/hyp/vgic-v3-sr.c
> index b26ce58b012a..79e3c2d3b754 100644
> --- a/virt/kvm/arm/hyp/vgic-v3-sr.c
> +++ b/virt/kvm/arm/hyp/vgic-v3-sr.c
> @@ -976,6 +976,8 @@ int __hyp_text __vgic_v3_perform_cpuif_access(struct kvm_vcpu *vcpu)
> switch (sysreg) {
> case SYS_ICC_IAR0_EL1:
> case SYS_ICC_IAR1_EL1:
> + if (unlikely(!is_read))
> + return 0;
> fn = __vgic_v3_read_iar;
> break;
> case SYS_ICC_EOIR0_EL1:
> @@ -1026,6 +1028,8 @@ int __hyp_text __vgic_v3_perform_cpuif_access(struct kvm_vcpu *vcpu)
> break;
> case SYS_ICC_HPPIR0_EL1:
> case SYS_ICC_HPPIR1_EL1:
> + if (unlikely(!is_read))
> + return 0;
> fn = __vgic_v3_read_hppir;
> break;
> case SYS_ICC_GRPEN0_EL1:
> @@ -1046,6 +1050,8 @@ int __hyp_text __vgic_v3_perform_cpuif_access(struct kvm_vcpu *vcpu)
> fn = __vgic_v3_write_dir;
> break;
> case SYS_ICC_RPR_EL1:
> + if (unlikely(!is_read))
> + return 0;
> fn = __vgic_v3_read_rpr;
> break;
> case SYS_ICC_CTLR_EL1:
> --
> 2.11.0
>
WARNING: multiple messages have this Message-ID (diff)
From: cdall@linaro.org (Christoffer Dall)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 27/27] KVM: arm64: Log an error if trapping a write-to-read-only GICv3 access
Date: Fri, 9 Jun 2017 17:34:19 +0200 [thread overview]
Message-ID: <20170609153419.GI11099@cbox> (raw)
In-Reply-To: <20170609114956.25963-28-marc.zyngier@arm.com>
On Fri, Jun 09, 2017 at 12:49:56PM +0100, Marc Zyngier wrote:
> A write-to-read-only GICv3 access should UNDEF at EL1. But since
> we're in complete paranoia-land with broken CPUs, let's assume the
> worse and gracefully handle the case.
>
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Reviewed-by: Christoffer Dall <cdall@linaro.org>
> ---
> arch/arm64/kvm/sys_regs.c | 15 +++++++++++++++
> virt/kvm/arm/hyp/vgic-v3-sr.c | 6 ++++++
> 2 files changed, 21 insertions(+)
>
> diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c
> index 8d51c075966d..77862881ae86 100644
> --- a/arch/arm64/kvm/sys_regs.c
> +++ b/arch/arm64/kvm/sys_regs.c
> @@ -65,6 +65,16 @@ static bool read_from_write_only(struct kvm_vcpu *vcpu,
> return false;
> }
>
> +static bool write_to_read_only(struct kvm_vcpu *vcpu,
> + struct sys_reg_params *params,
> + const struct sys_reg_desc *r)
> +{
> + WARN_ONCE(1, "Unexpected sys_reg write to read-only register\n");
> + print_sys_reg_instr(params);
> + kvm_inject_undefined(vcpu);
> + return false;
> +}
> +
> /* 3 bits per cache level, as per CLIDR, but non-existent caches always 0 */
> static u32 cache_levels;
>
> @@ -954,10 +964,15 @@ static const struct sys_reg_desc sys_reg_descs[] = {
>
> { SYS_DESC(SYS_VBAR_EL1), NULL, reset_val, VBAR_EL1, 0 },
>
> + { SYS_DESC(SYS_ICC_IAR0_EL1), write_to_read_only },
> { SYS_DESC(SYS_ICC_EOIR0_EL1), read_from_write_only },
> + { SYS_DESC(SYS_ICC_HPPIR0_EL1), write_to_read_only },
> { SYS_DESC(SYS_ICC_DIR_EL1), read_from_write_only },
> + { SYS_DESC(SYS_ICC_RPR_EL1), write_to_read_only },
> { SYS_DESC(SYS_ICC_SGI1R_EL1), access_gic_sgi },
> + { SYS_DESC(SYS_ICC_IAR1_EL1), write_to_read_only },
> { SYS_DESC(SYS_ICC_EOIR1_EL1), read_from_write_only },
> + { SYS_DESC(SYS_ICC_HPPIR1_EL1), write_to_read_only },
> { SYS_DESC(SYS_ICC_SRE_EL1), access_gic_sre },
>
> { SYS_DESC(SYS_CONTEXTIDR_EL1), access_vm_reg, reset_val, CONTEXTIDR_EL1, 0 },
> diff --git a/virt/kvm/arm/hyp/vgic-v3-sr.c b/virt/kvm/arm/hyp/vgic-v3-sr.c
> index b26ce58b012a..79e3c2d3b754 100644
> --- a/virt/kvm/arm/hyp/vgic-v3-sr.c
> +++ b/virt/kvm/arm/hyp/vgic-v3-sr.c
> @@ -976,6 +976,8 @@ int __hyp_text __vgic_v3_perform_cpuif_access(struct kvm_vcpu *vcpu)
> switch (sysreg) {
> case SYS_ICC_IAR0_EL1:
> case SYS_ICC_IAR1_EL1:
> + if (unlikely(!is_read))
> + return 0;
> fn = __vgic_v3_read_iar;
> break;
> case SYS_ICC_EOIR0_EL1:
> @@ -1026,6 +1028,8 @@ int __hyp_text __vgic_v3_perform_cpuif_access(struct kvm_vcpu *vcpu)
> break;
> case SYS_ICC_HPPIR0_EL1:
> case SYS_ICC_HPPIR1_EL1:
> + if (unlikely(!is_read))
> + return 0;
> fn = __vgic_v3_read_hppir;
> break;
> case SYS_ICC_GRPEN0_EL1:
> @@ -1046,6 +1050,8 @@ int __hyp_text __vgic_v3_perform_cpuif_access(struct kvm_vcpu *vcpu)
> fn = __vgic_v3_write_dir;
> break;
> case SYS_ICC_RPR_EL1:
> + if (unlikely(!is_read))
> + return 0;
> fn = __vgic_v3_read_rpr;
> break;
> case SYS_ICC_CTLR_EL1:
> --
> 2.11.0
>
next prev parent reply other threads:[~2017-06-09 15:30 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-09 11:49 [PATCH v3 00/27] arm64: KVM: Mediate access to GICv3 sysregs at EL2 Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 01/27] arm64: Add a facility to turn an ESR syndrome into a sysreg encoding Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 02/27] KVM: arm/arm64: vgic-v3: Add accessors for the ICH_APxRn_EL2 registers Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 03/27] KVM: arm64: Make kvm_condition_valid32() accessible from EL2 Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 04/27] KVM: arm64: vgic-v3: Add hook to handle guest GICv3 sysreg accesses at EL2 Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 05/27] KVM: arm64: vgic-v3: Add ICV_BPR1_EL1 handler Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 15:23 ` Christoffer Dall
2017-06-09 15:23 ` Christoffer Dall
2017-06-09 11:49 ` [PATCH v3 06/27] KVM: arm64: vgic-v3: Add ICV_IGRPEN1_EL1 handler Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 07/27] KVM: arm64: vgic-v3: Add ICV_IAR1_EL1 handler Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 15:26 ` Christoffer Dall
2017-06-09 15:26 ` Christoffer Dall
2017-06-09 11:49 ` [PATCH v3 08/27] KVM: arm64: vgic-v3: Add ICV_EOIR1_EL1 handler Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 15:27 ` Christoffer Dall
2017-06-09 15:27 ` Christoffer Dall
2017-06-09 11:49 ` [PATCH v3 09/27] KVM: arm64: vgic-v3: Add ICV_AP1Rn_EL1 handler Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 10/27] KVM: arm64: vgic-v3: Add ICV_HPPIR1_EL1 handler Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 15:28 ` Christoffer Dall
2017-06-09 15:28 ` Christoffer Dall
2017-06-09 11:49 ` [PATCH v3 11/27] KVM: arm64: vgic-v3: Enable trapping of Group-1 system registers Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 12/27] KVM: arm64: Enable GICv3 Group-1 sysreg trapping via command-line Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 15:29 ` Christoffer Dall
2017-06-09 15:29 ` Christoffer Dall
2017-06-09 11:49 ` [PATCH v3 13/27] KVM: arm64: vgic-v3: Add ICV_BPR0_EL1 handler Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 15:29 ` Christoffer Dall
2017-06-09 15:29 ` Christoffer Dall
2017-06-09 11:49 ` [PATCH v3 14/27] KVM: arm64: vgic-v3: Add ICV_IGNREN0_EL1 handler Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 15/27] KVM: arm64: vgic-v3: Add misc Group-0 handlers Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 16/27] KVM: arm64: vgic-v3: Enable trapping of Group-0 system registers Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 17/27] KVM: arm64: Enable GICv3 Group-0 sysreg trapping via command-line Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 18/27] arm64: Add MIDR values for Cavium cn83XX SoCs Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 19/27] arm64: Add workaround for Cavium Thunder erratum 30115 Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 20/27] KVM: arm64: vgic-v3: Add ICV_DIR_EL1 handler Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 21/27] KVM: arm64: vgic-v3: Add ICV_RPR_EL1 handler Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 22/27] KVM: arm64: vgic-v3: Add ICV_CTLR_EL1 handler Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 23/27] KVM: arm64: vgic-v3: Add ICV_PMR_EL1 handler Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 24/27] KVM: arm64: Enable GICv3 common sysreg trapping via command-line Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 15:31 ` Christoffer Dall
2017-06-09 15:31 ` Christoffer Dall
2017-06-09 11:49 ` [PATCH v3 25/27] KVM: arm64: vgic-v3: Log which GICv3 system registers are trapped Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 11:49 ` [PATCH v3 26/27] KVM: arm64: Log an error if trapping a read-from-write-only GICv3 access Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 15:33 ` Christoffer Dall
2017-06-09 15:33 ` Christoffer Dall
2017-06-09 11:49 ` [PATCH v3 27/27] KVM: arm64: Log an error if trapping a write-to-read-only " Marc Zyngier
2017-06-09 11:49 ` Marc Zyngier
2017-06-09 15:34 ` Christoffer Dall [this message]
2017-06-09 15:34 ` Christoffer Dall
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=20170609153419.GI11099@cbox \
--to=cdall@linaro.org \
--cc=catalin.marinas@arm.com \
--cc=david.daney@cavium.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=rrichter@cavium.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.