[PATCH] target/ppc: Check effective address validity

Cédric Le Goater posted 1 patch 2 years, 4 months ago
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20211231073122.3183583-1-clg@kaod.org
Maintainers: Greg Kurz <groug@kaod.org>, "Cédric Le Goater" <clg@kaod.org>, David Gibson <david@gibson.dropbear.id.au>, Daniel Henrique Barboza <danielhb413@gmail.com>
target/ppc/mmu-radix64.h | 1 +
target/ppc/mmu-radix64.c | 5 +++++
2 files changed, 6 insertions(+)
[PATCH] target/ppc: Check effective address validity
Posted by Cédric Le Goater 2 years, 4 months ago
For Radix translation, the EA range is 64-bits. when EA(2:11) are
nonzero, a segment interrupt should occur.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
---
 target/ppc/mmu-radix64.h | 1 +
 target/ppc/mmu-radix64.c | 5 +++++
 2 files changed, 6 insertions(+)

diff --git a/target/ppc/mmu-radix64.h b/target/ppc/mmu-radix64.h
index b70357cf345c..4c768aa5cc74 100644
--- a/target/ppc/mmu-radix64.h
+++ b/target/ppc/mmu-radix64.h
@@ -5,6 +5,7 @@
 
 /* Radix Quadrants */
 #define R_EADDR_MASK            0x3FFFFFFFFFFFFFFF
+#define R_EADDR_VALID_MASK      0xC00FFFFFFFFFFFFF
 #define R_EADDR_QUADRANT        0xC000000000000000
 #define R_EADDR_QUADRANT0       0x0000000000000000
 #define R_EADDR_QUADRANT1       0x4000000000000000
diff --git a/target/ppc/mmu-radix64.c b/target/ppc/mmu-radix64.c
index d10ae001d7c9..040c055bff65 100644
--- a/target/ppc/mmu-radix64.c
+++ b/target/ppc/mmu-radix64.c
@@ -32,6 +32,11 @@ static bool ppc_radix64_get_fully_qualified_addr(const CPUPPCState *env,
                                                  vaddr eaddr,
                                                  uint64_t *lpid, uint64_t *pid)
 {
+    /* When EA(2:11) are nonzero, raise a segment interrupt */
+    if (eaddr & ~R_EADDR_VALID_MASK) {
+        return false;
+    }
+
     if (msr_hv) { /* MSR[HV] -> Hypervisor/bare metal */
         switch (eaddr & R_EADDR_QUADRANT) {
         case R_EADDR_QUADRANT0:
-- 
2.31.1


Re: [PATCH] target/ppc: Check effective address validity
Posted by Frederic Barrat 2 years, 4 months ago

On 31/12/2021 08:31, Cédric Le Goater wrote:
> For Radix translation, the EA range is 64-bits. when EA(2:11) are
> nonzero, a segment interrupt should occur.
> 
> Signed-off-by: Cédric Le Goater <clg@kaod.org>
> ---


Looks ok to me.
Reviewed-by: Frederic Barrat <fbarrat@linux.ibm.com>

   Fred


>   target/ppc/mmu-radix64.h | 1 +
>   target/ppc/mmu-radix64.c | 5 +++++
>   2 files changed, 6 insertions(+)
> 
> diff --git a/target/ppc/mmu-radix64.h b/target/ppc/mmu-radix64.h
> index b70357cf345c..4c768aa5cc74 100644
> --- a/target/ppc/mmu-radix64.h
> +++ b/target/ppc/mmu-radix64.h
> @@ -5,6 +5,7 @@
>   
>   /* Radix Quadrants */
>   #define R_EADDR_MASK            0x3FFFFFFFFFFFFFFF
> +#define R_EADDR_VALID_MASK      0xC00FFFFFFFFFFFFF
>   #define R_EADDR_QUADRANT        0xC000000000000000
>   #define R_EADDR_QUADRANT0       0x0000000000000000
>   #define R_EADDR_QUADRANT1       0x4000000000000000
> diff --git a/target/ppc/mmu-radix64.c b/target/ppc/mmu-radix64.c
> index d10ae001d7c9..040c055bff65 100644
> --- a/target/ppc/mmu-radix64.c
> +++ b/target/ppc/mmu-radix64.c
> @@ -32,6 +32,11 @@ static bool ppc_radix64_get_fully_qualified_addr(const CPUPPCState *env,
>                                                    vaddr eaddr,
>                                                    uint64_t *lpid, uint64_t *pid)
>   {
> +    /* When EA(2:11) are nonzero, raise a segment interrupt */
> +    if (eaddr & ~R_EADDR_VALID_MASK) {
> +        return false;
> +    }
> +
>       if (msr_hv) { /* MSR[HV] -> Hypervisor/bare metal */
>           switch (eaddr & R_EADDR_QUADRANT) {
>           case R_EADDR_QUADRANT0:

Re: [PATCH] target/ppc: Check effective address validity
Posted by Cédric Le Goater 2 years, 4 months ago
On 12/31/21 08:31, Cédric Le Goater wrote:
> For Radix translation, the EA range is 64-bits. when EA(2:11) are
> nonzero, a segment interrupt should occur.
> 
> Signed-off-by: Cédric Le Goater <clg@kaod.org>


Applied in ppc-next.

Thanks,

C.