diff mbox series

[v2] target/s390x/tcg: SPX: check validity of new prefix

Message ID 20220630094340.3646279-1-scgl@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series [v2] target/s390x/tcg: SPX: check validity of new prefix | expand

Commit Message

Janis Schoetterl-Glausch June 30, 2022, 9:43 a.m. UTC
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>
---
 target/s390x/tcg/misc_helper.c | 7 +++++++
 1 file changed, 7 insertions(+)


base-commit: 3a821c52e1a30ecd9a436f2c67cc66b5628c829f

Comments

Thomas Huth July 6, 2022, 10:17 a.m. UTC | #1
On 30/06/2022 11.43, Janis Schoetterl-Glausch wrote:
> 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>
> ---
>   target/s390x/tcg/misc_helper.c | 7 +++++++
>   1 file changed, 7 insertions(+)
> 
> diff --git a/target/s390x/tcg/misc_helper.c b/target/s390x/tcg/misc_helper.c
> index aab9c47747..10dadb002a 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);

Thanks, queued to my s390x-next branch now:

  https://gitlab.com/thuth/qemu/-/commits/s390x-next

  Thomas
diff mbox series

Patch

diff --git a/target/s390x/tcg/misc_helper.c b/target/s390x/tcg/misc_helper.c
index aab9c47747..10dadb002a 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);