target/s390x/tcg: SPX: check validity of new prefix

According to the architecture, SET PREFIX must try to access the new
prefix area and recognize an addressing exception if the area is not
accessible.
For qemu this check prevents a crash in cpu_map_lowcore after an
inaccessible prefix area has been set.

Signed-off-by: Janis Schoetterl-Glausch <scgl@linux.ibm.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Message-Id: <20220630094340.3646279-1-scgl@linux.ibm.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
Janis Schoetterl-Glausch 2022-06-30 11:43:40 +02:00 committed by Thomas Huth
parent 39e19f5f67
commit f8333de279
1 changed files with 7 additions and 0 deletions

View File

@ -158,6 +158,13 @@ void HELPER(spx)(CPUS390XState *env, uint64_t a1)
if (prefix == old_prefix) {
return;
}
/*
* Since prefix got aligned to 8k and memory increments are a multiple of
* 8k checking the first page is sufficient
*/
if (!mmu_absolute_addr_valid(prefix, true)) {
tcg_s390_program_interrupt(env, PGM_ADDRESSING, GETPC());
}
env->psa = prefix;
HELPER_LOG("prefix: %#x\n", prefix);