From: sashiko-bot@kernel.org
To: "Claudio Imbrenda" <imbrenda@linux.ibm.com>
Cc: "Vasily Gorbik" <gor@linux.ibm.com>,
linux-s390@vger.kernel.org,
"Alexander Gordeev" <agordeev@linux.ibm.com>,
"Heiko Carstens" <hca@linux.ibm.com>,
kvm@vger.kernel.org
Subject: Re: [PATCH v7 05/14] KVM: s390: ucontrol: Fix sca_clear_ext_call()
Date: Fri, 31 Jul 2026 13:19:19 +0000 [thread overview]
Message-ID: <20260731131920.5F5DC1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260731130138.173983-6-imbrenda@linux.ibm.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Host userspace and malicious guests can trigger a KVM_BUG_ON (WARN_ON_ONCE) by injecting an external call into a UCONTROL VM.
- [High] Fencing the KVM_S390_INTERRUPT ioctl entirely for UCONTROL VMs breaks backwards compatibility.
--
--- Patch [5]: [PATCH v7 05/14] KVM: s390: ucontrol: Fix sca_clear_ext_call() ---
commit 22db5ca2b2a238d3fc521f6c7e38a951435c51a0
Author: Claudio Imbrenda <imbrenda@linux.ibm.com>
KVM: s390: ucontrol: Fix sca_clear_ext_call()
When cleaning up a UCONTROL VM, sca_clear_ext_call() will touch memory
outside of the allocated ESCA block, and UCONTROL VMs don't even use
ESCA. This commit stops UCONTROL VMs from touching ESCA, fences the
KVM_S390_INTERRUPT ioctl, and adds checks to other ESCA paths.
> diff --git a/arch/s390/kvm/interrupt.c b/arch/s390/kvm/interrupt.c
> index 2acdff130fa6c..9db68e3ac178f 100644
> --- a/arch/s390/kvm/interrupt.c
> +++ b/arch/s390/kvm/interrupt.c
[ ... ]
> @@ -60,13 +63,16 @@ static int sca_ext_call_pending(struct kvm_vcpu *vcpu, int *src_id)
>
> static int sca_inject_ext_call(struct kvm_vcpu *vcpu, int src_id)
> {
> - struct esca_block *sca = vcpu->kvm->arch.sca;
> - union esca_sigp_ctrl *sigp_ctrl = &sca->cpu[vcpu->vcpu_id].sigp_ctrl;
> union esca_sigp_ctrl old_val, new_val = {.scn = src_id, .c = 1};
> + struct esca_block *sca = vcpu->kvm->arch.sca;
> + union esca_sigp_ctrl *sigp_ctrl;
> int expect, rc;
>
> BUG_ON(!kvm_s390_use_sca_entries());
> + if (KVM_BUG_ON(kvm_is_ucontrol(vcpu->kvm), vcpu->kvm))
> + return -EINVAL;
[Severity: High]
Can a malicious guest or unprivileged host userspace process trigger this
assertion?
It appears UCONTROL VMs can still reach sca_inject_ext_call() through other
unfenced paths. For example, host userspace can call the KVM_S390_IRQ ioctl
with KVM_S390_INT_EXTERNAL_CALL without being fenced, as the UCONTROL check
was only added to KVM_S390_INTERRUPT.
The ioctl flows through:
kvm_arch_vcpu_unlocked_ioctl()
case KVM_S390_IRQ:
kvm_s390_inject_vcpu()
do_inject_vcpu()
sca_inject_ext_call()
Similarly, a guest executing a SIGP EXTERNAL CALL instruction can intercept
to __sigp_external_call(), which also calls kvm_s390_inject_vcpu() and will
ultimately hit this KVM_BUG_ON.
Would it be safer to return an error without the KVM_BUG_ON to prevent
a host denial of service if the system is configured with panic_on_warn?
[ ... ]
> diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
> index 5b2727d7dfd12..21574f57be72e 100644
> --- a/arch/s390/kvm/kvm-s390.c
> +++ b/arch/s390/kvm/kvm-s390.c
> @@ -2934,6 +2934,9 @@ int kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg)
> case KVM_S390_INTERRUPT: {
> struct kvm_s390_interrupt s390int;
>
> + r = -EINVAL;
> + if (kvm_is_ucontrol(kvm))
> + break;
[Severity: High]
Does completely fencing the KVM_S390_INTERRUPT ioctl for UCONTROL VMs
cause an ABI regression for older userspace tools?
If existing userspace relies on KVM_S390_INTERRUPT to inject non-external
interrupts (such as KVM_S390_PROGRAM_INT), this unconditional check would
cause those injections to fail with -EINVAL, potentially breaking existing
functionality.
Could this check be restricted to only rejecting the specific interrupt
types that rely on ESCA?
> r = -EFAULT;
> if (copy_from_user(&s390int, argp, sizeof(s390int)))
> break;
[ ... ]
> @@ -5456,6 +5459,8 @@ long kvm_arch_vcpu_unlocked_ioctl(struct file *filp, unsigned int ioctl,
> struct kvm_s390_interrupt s390int;
> struct kvm_s390_irq s390irq = {};
>
> + if (kvm_is_ucontrol(vcpu->kvm))
> + return -EINVAL;
[Severity: High]
Is this also prone to the same backwards compatibility regression mentioned
above for vCPU-level interrupt injections?
> if (copy_from_user(&s390int, argp, sizeof(s390int)))
> return -EFAULT;
> if (s390int_to_s390irq(&s390int, &s390irq))
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260731130138.173983-1-imbrenda@linux.ibm.com?part=5
next prev parent reply other threads:[~2026-07-31 13:19 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-31 13:01 [PATCH v7 00/14] KVM: s390: Misc fixes Claudio Imbrenda
2026-07-31 13:01 ` [PATCH v7 01/14] KVM: s390: Fix unlikely NULL gmap dereference Claudio Imbrenda
2026-07-31 13:20 ` sashiko-bot
2026-07-31 13:01 ` [PATCH v7 02/14] KVM: s390: Do not free SCA if it was not allocated Claudio Imbrenda
2026-07-31 13:13 ` sashiko-bot
2026-07-31 13:01 ` [PATCH v7 03/14] KVM: s390: Fix kvm_s390_vcpu_unsetup_cmma() Claudio Imbrenda
2026-07-31 13:21 ` sashiko-bot
2026-07-31 13:01 ` [PATCH v7 04/14] KVM: s390: Fix overclearing ESCA in case of error Claudio Imbrenda
2026-07-31 13:33 ` sashiko-bot
2026-07-31 13:01 ` [PATCH v7 05/14] KVM: s390: ucontrol: Fix sca_clear_ext_call() Claudio Imbrenda
2026-07-31 13:19 ` sashiko-bot [this message]
2026-07-31 13:01 ` [PATCH v7 06/14] KVM: s390: Fix leaking of PGM_ADDRESSING to userspace Claudio Imbrenda
2026-07-31 13:24 ` sashiko-bot
2026-07-31 13:01 ` [PATCH v7 07/14] KVM: s390: Fix race in __do_essa() Claudio Imbrenda
2026-07-31 13:14 ` sashiko-bot
2026-07-31 13:01 ` [PATCH v7 08/14] KVM: s390: cmma: Fix dirty tracking when removing memslot Claudio Imbrenda
2026-07-31 13:36 ` sashiko-bot
2026-07-31 13:01 ` [PATCH v7 09/14] KVM: s390: ucontrol: Add missing locking around gmap_remove_child() Claudio Imbrenda
2026-07-31 13:35 ` sashiko-bot
2026-07-31 13:01 ` [PATCH v7 10/14] KVM: s390: Free the mmu cache when kvm_arch_vcpu_create() fails Claudio Imbrenda
2026-07-31 13:11 ` sashiko-bot
2026-07-31 13:01 ` [PATCH v7 11/14] KVM: s390: Return -EINTR if a signal is pending while faulting-in Claudio Imbrenda
2026-07-31 13:20 ` sashiko-bot
2026-07-31 13:01 ` [PATCH v7 12/14] KVM: s390: Fix ordering when adding to SCA Claudio Imbrenda
2026-07-31 13:21 ` sashiko-bot
2026-07-31 13:01 ` [PATCH v7 13/14] KVM: s390: Fix cleanup in kvm_s390_pv_create_cpu() Claudio Imbrenda
2026-07-31 13:21 ` sashiko-bot
2026-07-31 13:01 ` [PATCH v7 14/14] KVM: s390: Fix kvm_arch_commit_memory_region() when low on memory Claudio Imbrenda
2026-07-31 13:32 ` 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=20260731131920.5F5DC1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=agordeev@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/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.