]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
s390/kvm: Mask extra bits from program interrupt code
authorClaudio Imbrenda <imbrenda@linux.ibm.com>
Thu, 31 Oct 2024 12:03:16 +0000 (13:03 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Thu, 7 Nov 2024 09:23:43 +0000 (10:23 +0100)
The program interrupt code has some extra bits that are sometimes set
by hardware for various reasons; those bits should be ignored when the
program interrupt number is needed for interrupt handling.

Fixes: 05066cafa925 ("s390/mm/fault: Handle guest-related program interrupts in KVM")
Reported-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Tested-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Link: https://lore.kernel.org/r/20241031120316.25462-1-imbrenda@linux.ibm.com
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/kvm/kvm-s390.c
arch/s390/kvm/vsie.c

index 5d113428b4cc03eb6216c034587388169e157d99..06e55f681a395e56d4aed61f2121fe1bf5adcb2d 100644 (file)
@@ -4737,7 +4737,7 @@ static int vcpu_post_run_handle_fault(struct kvm_vcpu *vcpu)
        if (kvm_s390_cur_gmap_fault_is_write())
                flags = FAULT_FLAG_WRITE;
 
-       switch (current->thread.gmap_int_code) {
+       switch (current->thread.gmap_int_code & PGM_INT_CODE_MASK) {
        case 0:
                vcpu->stat.exit_null++;
                break;
index d03f95e528fe1ff1ca918a8a1c2fdf068136b6ba..d3cdde1b18e5b10e3fe86ec92d3a7cfce5e2a34f 100644 (file)
@@ -922,7 +922,7 @@ static int handle_fault(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
 {
        int rc;
 
-       if (current->thread.gmap_int_code == PGM_PROTECTION)
+       if ((current->thread.gmap_int_code & PGM_INT_CODE_MASK) == PGM_PROTECTION)
                /* we can directly forward all protection exceptions */
                return inject_fault(vcpu, PGM_PROTECTION,
                                    current->thread.gmap_teid.addr * PAGE_SIZE, 1);