aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanis Schoetterl-Glausch <scgl@linux.ibm.com>2022-06-30 11:43:40 +0200
committerThomas Huth <thuth@redhat.com>2022-07-06 12:14:16 +0200
commitf8333de27933b201b73a6c9830afbf1b48ac5dbe (patch)
treedcff74eded81a153bbb4c17e5eb3f8d6e1b09373
parent39e19f5f67d925c60278a6156fd1776d04495a93 (diff)
downloadqemu-f8333de27933b201b73a6c9830afbf1b48ac5dbe.zip
qemu-f8333de27933b201b73a6c9830afbf1b48ac5dbe.tar.gz
qemu-f8333de27933b201b73a6c9830afbf1b48ac5dbe.tar.bz2
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>
-rw-r--r--target/s390x/tcg/misc_helper.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/target/s390x/tcg/misc_helper.c b/target/s390x/tcg/misc_helper.c
index aab9c47..10dadb0 100644
--- a/target/s390x/tcg/misc_helper.c
+++ b/target/s390x/tcg/misc_helper.c
@@ -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);