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 19/23] KVM: s390: arm64: Implement exception injection
Date: Fri, 06 Nov 2026 19:50:56 +0000 [thread overview]
Message-ID: <sashiko-outbox-202177@kernel.org> (raw)
In-Reply-To: <20261106-sysreg-v3-19-75e95980fb10@linux.ibm.com>
Thank you for your contribution! Sashiko AI review found 2 potential
issues to consider:
- [High] KVM: s390: arm64: preemptible smp_processor_id() and migration
race in sysreg access
- [Medium] KVM: s390: arm64: unsigned gltl overflow in inject_abt64()
--
commit 9004b39a5f6b970883241ce75cb94bfa9bdd2fe1
Author: Steffen Eiden <seiden@linux.ibm.com>
KVM: s390: arm64: Implement exception injection
This commit adds guest exception entry and fault injection support for
arm64 guests running under KVM on s390.
> diff --git a/arch/s390/kvm/arm64/arm.c b/arch/s390/kvm/arm64/arm.c
> index 4de0f17052cb8..91e9f4a75ce73 100644
> --- a/arch/s390/kvm/arm64/arm.c
> +++ b/arch/s390/kvm/arm64/arm.c
[ ... ]
> @@ -511,8 +503,9 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
>
> kvm_sigset_deactivate(vcpu);
> out:
> - if (unlikely(vcpu_get_flag(vcpu, INCREMENT_PC)))
> - adjust_pc(vcpu);
> + if (unlikely(vcpu_get_flag(vcpu, PENDING_EXCEPTION) ||
> + vcpu_get_flag(vcpu, INCREMENT_PC)))
> + kvm_adjust_pc(vcpu);
[Severity: High]
Does accessing save-area registers with preemption enabled here and during
handle_exit() trigger a debug_smp_processor_id() splat and race with host
CPU migration?
At the out label (before vcpu_put()) and inside handle_exit(), the vCPU is
loaded (vcpu_is_loaded(vcpu) is true) while IRQs and preemption are
enabled. When an exception is injected (for example via
kvm_inject_undefined() -> kvm_inject_sync() or inject_abt64()) or
delivered here via kvm_adjust_pc() -> kvm_inject_exception() ->
enter_exception64(), vcpu_read_sys_reg() and vcpu_write_sys_reg() access
VBAR_EL1, SCTLR_EL1, FAR_EL1, and ESR_EL1 through _vcpu_read_sys_reg() and
_vcpu_write_sys_reg():
arch/s390/include/asm/kvm_host_arm64.h:_vcpu_read_sys_reg()
KVM_BUG_ON(vcpu_is_loaded(C) && smp_processor_id() != (C)->cpu, (C)->kvm);
Calling smp_processor_id() in preemptible context triggers a BUG splat
when CONFIG_DEBUG_PREEMPT is enabled, and if the vCPU task is preempted
and migrated between reading smp_processor_id() and reading vcpu->cpu,
KVM_BUG_ON() fires and terminates the VM:
CPU0 CPU1
handle_exit() / kvm_adjust_pc()
vcpu_read_sys_reg(vcpu, VBAR_EL1)
smp_processor_id() -> 0
<preempted and migrated>
kvm_sched_in()
kvm_arch_vcpu_load(vcpu, 1)
vcpu->cpu = 1
vcpu->cpu -> 1 != 0
KVM_BUG_ON() <-- kills VM
> diff --git a/arch/s390/kvm/arm64/inject_fault.c b/arch/s390/kvm/arm64/inject_fault.c
> index 425dbeaa421c6..33f40c5188c98 100644
> --- a/arch/s390/kvm/arm64/inject_fault.c
> +++ b/arch/s390/kvm/arm64/inject_fault.c
> @@ -2,6 +2,38 @@
>
> #include <arm64/kvm_emulate.h>
>
> +static void pend_sync_exception(struct kvm_vcpu *vcpu)
> +{
> + kvm_pend_exception(vcpu, EXCEPT_AA64_EL1_SYNC);
> +}
> +
> +static void inject_abt64(struct kvm_vcpu *vcpu, bool is_iabt, unsigned long addr)
> +{
> + unsigned long cpsr = *vcpu_cpsr(vcpu);
> + bool is_aarch32 = vcpu_mode_is_32bit(vcpu);
> + u64 esr = 0;
> +
> + if (kvm_vcpu_abt_iss1tw(vcpu))
> + esr |= ESR_ELx_FSC_SEA_TTW(kvm_vcpu_abt_gltl(vcpu));
> + else
> + esr |= ESR_ELx_FSC_EXTABT;
[Severity: Medium]
Can ESR_ELx_FSC_SEA_TTW(kvm_vcpu_abt_gltl(vcpu)) overflow the 6-bit FSC
field into bit 8 of ESR_EL1 on a level -1 translation table walk?
vcpu->arch.sae_block.hai.gltl is declared as u8, so kvm_vcpu_abt_gltl()
zero-extends a two's-complement -1 (0xff) to 255 instead of -1.
ESR_ELx_FSC_SEA_TTW(255) then evaluates to 0x113 (0x14 + 255), which sets
bit 8 (ESR_ELx_CM for data aborts or a RES0 bit for instruction aborts) in
esr, and kvm_inject_size_fault() only masks off GENMASK_ULL(5, 0)
afterwards.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261106-sysreg-v3-0-75e95980fb10@linux.ibm.com?part=19
next prev parent reply other threads:[~2026-11-06 19:50 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
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 [this message]
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-202177@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.