On 24.10.19 13:40, Janosch Frank wrote:
Signed-off-by: Janosch Frank <frankja@xxxxxxxxxxxxx>
Can you add why this is necessary and how handle_stop() is intended to
work in prot mode?
How is SIGP handled in general in prot mode? (which intercepts are
handled by QEMU)
Would it be valid for user space to inject a STOP interrupt with "flags
& KVM_S390_STOP_FLAG_STORE_STATUS" - I think not (legacy QEMU only)
I think we should rather disallow injecting such stop interrupts
(KVM_S390_STOP_FLAG_STORE_STATUS) in prot mode in the first place. Also,
we should disallow prot virt without user_sigp.
---
arch/s390/kvm/intercept.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/arch/s390/kvm/intercept.c b/arch/s390/kvm/intercept.c
index 37cb62bc261b..a89738e4f761 100644
--- a/arch/s390/kvm/intercept.c
+++ b/arch/s390/kvm/intercept.c
@@ -72,7 +72,8 @@ static int handle_stop(struct kvm_vcpu *vcpu)
if (!stop_pending)
return 0;
- if (flags & KVM_S390_STOP_FLAG_STORE_STATUS) {
+ if (flags & KVM_S390_STOP_FLAG_STORE_STATUS &&
+ !kvm_s390_pv_is_protected(vcpu->kvm)) {
rc = kvm_s390_vcpu_store_status(vcpu,
KVM_S390_STORE_STATUS_NOADDR);
if (rc)
--
Thanks,
David / dhildenb