KVM: s390: vsie: Disable some bits when in ESA mode

In the event that a nested guest is put in ESA mode,
ensure that some bits are scrubbed from the shadow SCB.

Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Signed-off-by: Eric Farman <farman@linux.ibm.com>
Reviewed-by: Hendrik Brueckner <brueckner@linux.ibm.com>
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
This commit is contained in:
Eric Farman
2026-04-01 17:12:19 +02:00
committed by Janosch Frank
parent b0ad874d98
commit a9640e2eb7

View File

@@ -387,6 +387,17 @@ static int shadow_crycb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
return 0;
}
static void shadow_esa(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
{
struct kvm_s390_sie_block *scb_s = &vsie_page->scb_s;
/* Ensure these bits are indeed turned off */
scb_s->eca &= ~ECA_VX;
scb_s->ecb &= ~(ECB_GS | ECB_TE);
scb_s->ecb3 &= ~ECB3_RI;
scb_s->ecd &= ~ECD_HOSTREGMGMT;
}
/* shadow (round up/down) the ibc to avoid validity icpt */
static void prepare_ibc(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
{
@@ -590,6 +601,9 @@ static int shadow_scb(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page)
scb_s->hpid = HPID_VSIE;
scb_s->cpnc = scb_o->cpnc;
if (!(atomic_read(&scb_s->cpuflags) & CPUSTAT_ZARCH))
shadow_esa(vcpu, vsie_page);
prepare_ibc(vcpu, vsie_page);
rc = shadow_crycb(vcpu, vsie_page);
out: