Commit 6f93d1ed authored by Claudio Imbrenda's avatar Claudio Imbrenda
Browse files

KVM: s390: vsie: Fix check for pre-existing shadow mapping



When shadowing a nested guest, a check is performed and no shadowing is
attempted if the nested guest is already shadowed.

The existing check was incomplete; fix it by also checking whether the
leaf DAT table entry in the existing shadow gmap has the same protection
as the one specified in the guest DAT entry.

Fixes: e38c884d ("KVM: s390: Switch to new gmap")
Reviewed-by: default avatarSteffen Eiden <seiden@linux.ibm.com>
Reviewed-by: default avatarJanosch Frank <frankja@linux.ibm.com>
Signed-off-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
parent b827ef02
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -1506,8 +1506,9 @@ static int _gaccess_do_shadow(struct kvm_s390_mmu_cache *mc, struct gmap *sg,
	if (rc)
		return rc;

	/* A race occourred. The shadow mapping is already valid, nothing to do */
	if ((ptep && !ptep->h.i) || (!ptep && crste_leaf(*table)))
	/* A race occurred. The shadow mapping is already valid, nothing to do */
	if ((ptep && !ptep->h.i && ptep->h.p == w->p) ||
	    (!ptep && crste_leaf(*table) && !table->h.i && table->h.p == w->p))
		return 0;

	gl = get_level(table, ptep);