From: sashiko-bot@kernel.org
To: "Steffen Eiden" <seiden@linux.ibm.com>
Cc: "Oliver Upton" <oupton@kernel.org>,
linux-s390@vger.kernel.org, kvmarm@lists.linux.dev,
"Marc Zyngier" <maz@kernel.org>,
"Christian Borntraeger" <borntraeger@linux.ibm.vom>,
"Alexander Gordeev" <agordeev@linux.ibm.com>,
"Vasily Gorbik" <gor@linux.ibm.com>,
kvm@vger.kernel.org, "Heiko Carstens" <hca@linux.ibm.com>
Subject: Re: [PATCH v6 30/33] KVM: s390: arm64: Implement vm/vcpu create destroy.
Date: Wed, 12 Aug 2026 16:38:42 +0000 [thread overview]
Message-ID: <20260812163842.76C071F00A3A@smtp.kernel.org> (raw)
In-Reply-To: <20260812153631.3376090-31-seiden@linux.ibm.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Integer underflow in `kvm_max_guest_address()` bypassing KVM's IPA limits and causing Undefined Behavior.
- [High] VM IPA size configuration is ignored for memory boundaries, and mem_limit suffers from an off-by-one error.
--
--- Patch [30]: [PATCH v6 30/33] KVM: s390: arm64: Implement vm/vcpu create destroy. ---
commit ac331802b4f3974b686910d63a6161cfc71cfae4
Author: Steffen Eiden <seiden@linux.ibm.com>
KVM: s390: arm64: Implement vm/vcpu create destroy.
Implement init and destroy IOCTLS for vcpu and vm.
Implement arch vm IOCTL. Use s390 gmap and gmap plumbing.
Implement function (stubs) required by gamp.
> diff --git a/arch/s390/kvm/arm64/arm.c b/arch/s390/kvm/arm64/arm.c
> index 8e17b7eef8131..69d43066f9e1a 100644
> --- a/arch/s390/kvm/arm64/arm.c
> +++ b/arch/s390/kvm/arm64/arm.c
> @@ -53,6 +58,83 @@ static u64 kvm_max_guest_address(void)
> return ALIGN_DOWN(max_addr + 1, 1 << 30) - 1;
> }
[Severity: High]
Does this underflow if the host is booted with less than 1GB of memory?
If sclp.hamax is less than 1GB, max_addr + 1 is less than 1 << 30.
ALIGN_DOWN would result in 0, and 0 - 1 would underflow to U64_MAX.
[ ... ]
> +static int kvm_vm_type_ipa_size_shift(unsigned long type)
> +{
> + int phys_shift;
> +
> + phys_shift = KVM_VM_TYPE_ARM_IPA_SIZE(type);
> + if (phys_shift) {
> + if (phys_shift > get_kvm_ipa_limit() ||
> + phys_shift < ARM64_MIN_PARANGE_BITS)
> + return -EINVAL;
[Severity: High]
This seems to cascade from the potential underflow in kvm_max_guest_address().
If get_kvm_ipa_limit() computes fls64(0) - 1, it would return -1 as 0xFFFFFFFF
via u32. Could a malicious userspace then bypass this IPA size check since
phys_shift > get_kvm_ipa_limit() would evaluate to false?
[ ... ]
> +int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)
> +{
> + char debug_name[32];
> + int ret;
> +
> + if (type & ~KVM_VM_TYPE_ARM_IPA_SIZE_MASK)
> + return -EINVAL;
> +
> + ret = kvm_vm_type_ipa_size_shift(type);
> + if (ret < 0)
> + return ret;
> + kvm->arch.guest_phys_size = 1UL << ret;
[Severity: High]
If the check in kvm_vm_type_ipa_size_shift() is bypassed, the phys_shift value
(up to 255) would be used in this shift. Would this invoke undefined behavior
since the shift amount could exceed the width of the type?
[ ... ]
> + ret = kvm_gmap_init(kvm);
> + if (ret)
> + goto out_err;
> + kvm->arch.mem_limit = kvm_max_guest_address();
[Severity: High]
Is it intended that kvm->arch.mem_limit is hardcoded to the global host
maximum instead of the VM's configured IPA size limit
(kvm->arch.guest_phys_size)?
If it uses the host's maximum, could userspace successfully map memory higher
than the configured VM IPA size limit?
Also, kvm_max_guest_address() appears to return an inclusive limit, but when
s390_kvm_mmu_prepare_memory_region() checks this limit:
if ((new->base_gfn + new->npages) * PAGE_SIZE > kvm->arch.mem_limit)
it treats mem_limit as an exclusive boundary. Does this off-by-one prevent
userspace from mapping the final page of the allowed memory region?
[ ... ]
> +int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)
> +{
> + struct kvm_sae_block *sae_block = &vcpu->arch.sae_block;
> + struct kvm_sae_save_area *save_area = &vcpu->arch.save_area;
> +
> + spin_lock_init(&vcpu->arch.mp_state_lock);
> +
> + /* Force users to call KVM_ARM_VCPU_INIT */
> + vcpu_clear_flag(vcpu, VCPU_INITIALIZED);
> +
> + vcpu->arch.mc = kvm_s390_new_mmu_cache();
> + if (!vcpu->arch.mc)
> + return -ENOMEM;
> +
> + sae_block->hbasce = vcpu->kvm->arch.gmap->asce.val;
> + sae_block->mso = 0L;
> + sae_block->msl = kvm_max_guest_address();
[Severity: High]
Does sae_block->msl also need to be scoped to the VM's requested size rather
than the host maximum?
Setting this to the host maximum might remove hardware emulation boundaries if
the guest physical size was configured to be smaller.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812153631.3376090-1-seiden@linux.ibm.com?part=30
next prev parent reply other threads:[~2026-08-12 16:38 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-12 15:35 [PATCH v6 00/33] KVM: s390: Introduce arm64 KVM Steffen Eiden
2026-08-12 15:35 ` [PATCH v6 01/33] vfio: Use file-based reference counting for KVM Steffen Eiden
2026-08-12 16:00 ` sashiko-bot
2026-08-12 15:35 ` [PATCH v6 02/33] KVM: Make device name configurable Steffen Eiden
2026-08-12 16:08 ` sashiko-bot
2026-08-12 15:35 ` [PATCH v6 03/33] KVM: Allow KVM implementations to switch off MMIO independent of Kconfig Steffen Eiden
2026-08-12 15:49 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 04/33] arm64: Use proper include variant Steffen Eiden
2026-08-12 15:52 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 05/33] arm64: ptrace: Use constants for compat register numbers Steffen Eiden
2026-08-12 15:46 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 06/33] arm64: sysreg: Convert SPSR_ELx to automatic register generation Steffen Eiden
2026-08-12 15:48 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 07/33] KVM: arm64: Access elements of vcpu_gp_regs individually Steffen Eiden
2026-08-12 15:48 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 08/33] KVM: arm64: Use accessor functions for core regs Steffen Eiden
2026-08-12 15:50 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 09/33] arm64: Prepare sharing arm64 headers with s390 Steffen Eiden
2026-08-12 15:52 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 10/33] arm64: Share " Steffen Eiden
2026-08-12 16:20 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 11/33] KVM: arm64: Share arm64 code " Steffen Eiden
2026-08-12 15:59 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 12/33] KVM: s390: Extract gmap tracing to a separate header Steffen Eiden
2026-08-12 15:57 ` sashiko-bot
2026-08-12 17:13 ` Christian Borntraeger
2026-08-12 15:36 ` [PATCH v6 13/33] KVM: s390: Prepare include guards for a new location Steffen Eiden
2026-08-12 15:53 ` sashiko-bot
2026-08-12 17:35 ` Christian Borntraeger
2026-08-12 15:36 ` [PATCH v6 14/33] KVM: s390: Rename kvm-s390.{c,h} to s390.{c,h} Steffen Eiden
2026-08-12 15:58 ` sashiko-bot
2026-08-12 17:58 ` Christian Borntraeger
2026-08-12 15:36 ` [PATCH v6 15/33] KVM: s390: Move kvm_host definitions to kvm_host_s390 Steffen Eiden
2026-08-12 15:54 ` sashiko-bot
2026-08-12 18:12 ` Christian Borntraeger
2026-08-12 15:36 ` [PATCH v6 16/33] KVM: s390: Move s390 kvm code into a subdirectory Steffen Eiden
2026-08-12 16:02 ` sashiko-bot
2026-08-12 18:32 ` Christian Borntraeger
2026-08-12 15:36 ` [PATCH v6 17/33] KVM: s390: Move PGM code definitions to asm/kvm_host.h Steffen Eiden
2026-08-12 16:04 ` sashiko-bot
2026-08-12 18:47 ` Christian Borntraeger
2026-08-12 15:36 ` [PATCH v6 18/33] KVM: s390: Prepare gmap for a second KVM implementation Steffen Eiden
2026-08-12 16:10 ` sashiko-bot
2026-08-12 19:05 ` Christian Borntraeger
2026-08-12 15:36 ` [PATCH v6 19/33] KVM: s390: gmap: Make storage keys optional Steffen Eiden
2026-08-12 16:06 ` sashiko-bot
2026-08-12 19:07 ` Christian Borntraeger
2026-08-12 15:36 ` [PATCH v6 20/33] KVM: s390: gmap: Make CMMA optional Steffen Eiden
2026-08-12 16:09 ` sashiko-bot
2026-08-12 19:07 ` Christian Borntraeger
2026-08-12 15:36 ` [PATCH v6 21/33] KVM: s390: gmap: Make prefix handling optional Steffen Eiden
2026-08-12 16:08 ` sashiko-bot
2026-08-12 19:10 ` Christian Borntraeger
2026-08-12 15:36 ` [PATCH v6 22/33] KVM: s390: Prepare KVM/s390 for a second KVM module Steffen Eiden
2026-08-12 16:21 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 23/33] s390: Use arm64 headers Steffen Eiden
2026-08-12 16:23 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 24/33] KVM: s390: Use arm64 code Steffen Eiden
2026-08-12 16:18 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 25/33] s390: Introduce Start Arm Execution instruction Steffen Eiden
2026-08-12 16:24 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 26/33] KVM: s390: arm64: Introduce host definitions Steffen Eiden
2026-08-12 16:27 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 27/33] s390/hwcaps: Report SAE support as hwcap Steffen Eiden
2026-08-12 16:15 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 28/33] KVM: s390: Add basic arm64 kvm module Steffen Eiden
2026-08-12 16:23 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 29/33] KVM: s390: arm64: Implement required functions Steffen Eiden
2026-08-12 16:36 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 30/33] KVM: s390: arm64: Implement vm/vcpu create destroy Steffen Eiden
2026-08-12 16:38 ` sashiko-bot [this message]
2026-08-12 15:36 ` [PATCH v6 31/33] KVM: s390: arm64: Implement vCPU IOCTLs Steffen Eiden
2026-08-12 16:41 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 32/33] KVM: s390: arm64: Implement basic page fault handler Steffen Eiden
2026-08-12 16:34 ` sashiko-bot
2026-08-12 15:36 ` [PATCH v6 33/33] KVM: s390: arm64: Enable KVM_ARM64 config and Kbuild Steffen Eiden
2026-08-12 16:59 ` sashiko-bot
2026-08-12 16:28 ` [PATCH v6 00/33] KVM: s390: Introduce arm64 KVM Christian Borntraeger
2026-08-12 16:36 ` Sean Christopherson
2026-08-12 18:58 ` Steffen Eiden
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=20260812163842.76C071F00A3A@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=agordeev@linux.ibm.com \
--cc=borntraeger@linux.ibm.vom \
--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.