All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Steffen Eiden" <seiden@linux.ibm.com>
Cc: kvmarm@lists.linux.dev, kvm@vger.kernel.org,
	linux-s390@vger.kernel.org, "Oliver Upton" <oupton@kernel.org>,
	"Marc Zyngier" <maz@kernel.org>,
	"Heiko Carstens" <hca@linux.ibm.com>,
	"Vasily Gorbik" <gor@linux.ibm.com>,
	"Alexander Gordeev" <agordeev@linux.ibm.com>,
	"Christian Borntraeger" <borntraeger@linux.ibm.com>
Subject: Re: [PATCH v3 15/23] KVM: s390: arm64: Implement feature sanitisation
Date: Fri, 06 Nov 2026 18:17:35 +0000	[thread overview]
Message-ID: <sashiko-outbox-202007@kernel.org> (raw)
In-Reply-To: <20261106-sysreg-v3-15-75e95980fb10@linux.ibm.com>

Thank you for your contribution! Sashiko AI review found 3 potential
issues to consider:
- [Medium] KVM: s390: wrong ARM64_HAS_HCR_NV1 check in
  cpus_have_final_cap()
- [Low] KVM: s390: missing ID_AFR0_EL1 masking in
  kvm_arm_host_sanitize_features()
- [Low] KVM: s390: malformed kernel-doc comment for
  read_sanitised_ftr_reg()
--

commit 1c037e7c3587ba94101456185c381c6fbc670b9c
Author: Steffen Eiden <seiden@linux.ibm.com>

KVM: s390: arm64: Implement feature sanitisation

This commit implements feature detection and ID register sanitization for
arm64 KVM guests on s390 using capabilities queried via QAAF.

> diff --git a/arch/s390/kvm/arm64/feature.c b/arch/s390/kvm/arm64/feature.c
> new file mode 100644
> index 0000000000000..f8b23ba85f9ef
> --- /dev/null
> +++ b/arch/s390/kvm/arm64/feature.c
> @@ -0,0 +1,163 @@

[ ... ]

> +void __init kvm_arm_host_sanitize_features(struct qaaf_qmc_block *qaaf_qmc)
> +{

[ ... ]

> +	MASK_RESERVED(qaaf_qmc, ID_PFR0_EL1);
> +	MASK_RESERVED(qaaf_qmc, ID_PFR1_EL1);
> +	MASK_RESERVED(qaaf_qmc, ID_PFR2_EL1);
> +
> +	MASK_RESERVED(qaaf_qmc, ID_DFR0_EL1);
> +	MASK_RESERVED(qaaf_qmc, ID_DFR1_EL1);
> +
> +	MASK_RESERVED(qaaf_qmc, ID_MMFR0_EL1);

[Severity: Low]
Should kvm_arm_host_sanitize_features() also mask reserved bits for
ID_AFR0_EL1?  kvm_qaaf_read_ftr_reg() exposes
qmc_sanitized.regs[QAAF_REG_ID_AFR0_EL1], and without
MASK_RESERVED(qaaf_qmc, ID_AFR0_EL1) its reserved bits [63:16] remain
unmasked when queried via read_sanitised_ftr_reg().

[ ... ]

> +bool cpus_have_final_cap(unsigned int num)
> +{
> +	u64 reg_val;
> +
> +	switch (num) {

[ ... ]

> +	case ARM64_HAS_HCR_NV1:
> +		reg_val = read_sanitised_ftr_reg(SYS_ID_AA64MMFR4_EL1);
> +		return SYS_FIELD_GET(ID_AA64MMFR4_EL1, E2H0, reg_val) ==
> +		       ID_AA64MMFR4_EL1_E2H0_IMP;

[Severity: Medium]
Does the ARM64_HAS_HCR_NV1 case check for FEAT_E2H0 instead of HCR_EL2.NV1
support?

In the Arm architecture, ID_AA64MMFR4_EL1.E2H0 is a signed field where 0
(ID_AA64MMFR4_EL1_E2H0_IMP) means HCR_EL2.E2H can be programmed to 0, 0xf
(ID_AA64MMFR4_EL1_E2H0_NI) means E2H0 is not implemented but HCR_EL2.NV1 is
supported if nested virtualization is present, and 0xe
(ID_AA64MMFR4_EL1_E2H0_NI_NV1) means neither is implemented.  On arm64,
has_nv1() checks for nested virtualization support and that E2H0 is not
NI_NV1:

arch/arm64/kernel/cpufeature.c:has_nv1() {
	return (__system_matches_cap(ARM64_HAS_NESTED_VIRT) &&
		!(has_cpuid_feature(entry, scope) ||
		  is_midr_in_range_list(nv1_ni_list)));
}

Checking E2H0 == ID_AA64MMFR4_EL1_E2H0_IMP causes cpus_have_final_cap() to
return true whenever E2H0 is 0 even though nested virtualization is not
supported on s390, and false when E2H0 is 0xf.

[ ... ]

> diff --git a/arch/s390/kvm/arm64/feature.h b/arch/s390/kvm/arm64/feature.h
> new file mode 100644
> index 0000000000000..0a59047fda6ef
> --- /dev/null
> +++ b/arch/s390/kvm/arm64/feature.h
> @@ -0,0 +1,86 @@

[ ... ]

> +/**
> + * read_sanitised_ftr_reg() - Get the value of a sys register
> + *
> + * @id - ARM sysreg id
> + *
> + * Get the value of a sys register describing the host configuration.
> + * The returned value indicates support by the machine (HW/FW)
> + * after some sanitisation.
> + *
> + * Example:
> + *	read_sanitised_ftr_reg(SYS_ID_AA64PFR0_EL1)
> + *
> + * Return: Sanitised HW value of the specified register
> + */
> +static inline u64 read_sanitised_ftr_reg(u32 id)

[Severity: Low]
This isn't a bug, but the kernel-doc comment uses "@id -" instead of "@id:",
which causes scripts/kernel-doc to warn that the parameter is not described
in read_sanitised_ftr_reg().

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261106-sysreg-v3-0-75e95980fb10@linux.ibm.com?part=15

  reply	other threads:[~2026-11-06 18:17 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-06 16:07 [PATCH v3 00/23] KVM: arm64 on s390 System Register Handling Steffen Eiden
2026-11-06 16:07 ` [PATCH v3 01/23] KVM: arm64: Refactor idreg caching into dedicated structure Steffen Eiden
2026-11-06 16:23   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 02/23] KVM: arm64: Extract number of sys_reg_desc into a constant Steffen Eiden
2026-11-06 16:25   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 03/23] arm64: sysreg: Convert OSLSR to automatic register generation Steffen Eiden
2026-11-06 16:34   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 04/23] arm64: Prepare headers for sysreg sharing with s390 Steffen Eiden
2026-11-06 16:38   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 05/23] arm64: Share system register related headers and functions " Steffen Eiden
2026-11-06 16:58   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 06/23] KVM: s390: arm64: Prepare for sharing arm64 SVE and ftr-reg code Steffen Eiden
2026-11-06 17:05   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 07/23] KVM: arm64: Prepare sys_regs.c for sharing with s390 Steffen Eiden
2026-11-06 17:06   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 08/23] KVM: arm64: Share system register code " Steffen Eiden
2026-11-06 17:18   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 09/23] s390: tools: Share arm64/kvm headers Steffen Eiden
2026-11-06 17:20   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 10/23] s390: Add range check asm macro Steffen Eiden
2026-11-06 17:23   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 11/23] s390: Read/write ARM system registers Steffen Eiden
2026-11-06 17:34   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 12/23] s390: Query arm guest time Steffen Eiden
2026-11-06 17:37   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 13/23] KVM: s390: arm64: Query Available Arm features Steffen Eiden
2026-11-06 17:45   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 14/23] KVM: s390: arm64: Verify machine feature set before loading Steffen Eiden
2026-11-06 17:49   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 15/23] KVM: s390: arm64: Implement feature sanitisation Steffen Eiden
2026-11-06 18:17   ` sashiko-bot [this message]
2026-11-06 16:07 ` [PATCH v3 16/23] KVM: s390: arm64: Implement arm sysreg managing infrastructure Steffen Eiden
2026-11-06 18:45   ` sashiko-bot
2026-11-07 14:08   ` Andreas Grapentin
2026-11-06 16:07 ` [PATCH v3 17/23] KVM: s390: arm64: Integrate sysreg into the host Steffen Eiden
2026-11-06 19:18   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 18/23] KVM: s390: arm64: Use QAAF init save area Steffen Eiden
2026-11-06 19:23   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 19/23] KVM: s390: arm64: Implement exception injection Steffen Eiden
2026-11-06 19:50   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 20/23] KVM: s390: arm64: Finalize page fault handling Steffen Eiden
2026-11-06 20:10   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 21/23] KVM: s390: arm64: Implement SVE for arm guests Steffen Eiden
2026-11-06 20:24   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 22/23] KVM: s390: arm64: Promote PTRAUTH capability Steffen Eiden
2026-11-06 20:33   ` sashiko-bot
2026-11-06 16:07 ` [PATCH v3 23/23] s390: Report AEF features to sysfs Steffen Eiden
2026-11-06 20:43   ` sashiko-bot

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=sashiko-outbox-202007@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=agordeev@linux.ibm.com \
    --cc=borntraeger@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.linux.dev \
    --cc=linux-s390@vger.kernel.org \
    --cc=maz@kernel.org \
    --cc=oupton@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=seiden@linux.ibm.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.