]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: s390: vsie: Fix dat_split_ste()
authorClaudio Imbrenda <imbrenda@linux.ibm.com>
Thu, 26 Mar 2026 13:17:10 +0000 (14:17 +0100)
committerClaudio Imbrenda <imbrenda@linux.ibm.com>
Thu, 26 Mar 2026 15:11:58 +0000 (16:11 +0100)
If the guest misbehaves and puts the page tables for its nested guest
inside the memory of the nested guest itself, and the guest and nested
guest are being mapped with large pages, the shadow mapping will
lose synchronization with the actual mapping, since this will cause the
large page with the vsie notification bit to be split, but the
vsie notification bit will not be propagated to the resulting small
pages.

Fix this by propagating the vsie_notif bit from large pages to normal
pages when splitting a large page.

Fixes: 2db149a0a6c5 ("KVM: s390: KVM page table management functions: walks")
Reviewed-by: Christoph Schlameuss <schlameuss@linux.ibm.com>
Reviewed-by: Steffen Eiden <seiden@linux.ibm.com>
Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
arch/s390/kvm/dat.c

index 670404d4fa44c6b5d9554e899cd5ae9f1af67db9..48b5f2bcf172deeb8a6d35fe3b110cbfa0fd8a3a 100644 (file)
@@ -292,6 +292,7 @@ static int dat_split_ste(struct kvm_s390_mmu_cache *mc, union pmd *pmdp, gfn_t g
                                pt->ptes[i].val = init.val | i * PAGE_SIZE;
                        /* No need to take locks as the page table is not installed yet. */
                        pgste_init.prefix_notif = old.s.fc1.prefix_notif;
+                       pgste_init.vsie_notif = old.s.fc1.vsie_notif;
                        pgste_init.pcl = uses_skeys && init.h.i;
                        dat_init_pgstes(pt, pgste_init.val);
                } else {