44 lines
1.6 KiB
Diff
44 lines
1.6 KiB
Diff
|
|
From 5489264cd9583855d45fd0c21f18387b649f6e44 Mon Sep 17 00:00:00 2001
|
||
|
|
From: tangbinzy <tangbin_yewu@cmss.chinamobile.com>
|
||
|
|
Date: Wed, 23 Nov 2022 15:26:59 +0300
|
||
|
|
Subject: [PATCH 15/29] target/riscv/pmp: fix no pmp illegal intrs
|
||
|
|
|
||
|
|
mainline inclusion
|
||
|
|
commit 0fbb5d2d3c9ded9fbd3f6f993974cc5e88e28912
|
||
|
|
category: bugfix
|
||
|
|
|
||
|
|
-----------------------------------------------
|
||
|
|
|
||
|
|
As per the privilege specification, any access from S/U mode should fail
|
||
|
|
if no pmp region is configured and pmp is present, othwerwise access
|
||
|
|
should succeed.
|
||
|
|
|
||
|
|
Fixes: d102f19a208 (target/riscv/pmp: Raise exception if no PMP entry is configured)
|
||
|
|
Signed-off-by: Nikita Shubin <n.shubin@yadro.com>
|
||
|
|
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
|
||
|
|
Message-id: 20211214092659.15709-1-nikita.shubin@maquefel.me
|
||
|
|
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
|
||
|
|
|
||
|
|
Signed-off-by: tangbinzy <tangbin_yewu@cmss.chinamobile.com>
|
||
|
|
---
|
||
|
|
target/riscv/op_helper.c | 3 ++-
|
||
|
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||
|
|
|
||
|
|
diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c
|
||
|
|
index ee7c24efe7..58d992e98a 100644
|
||
|
|
--- a/target/riscv/op_helper.c
|
||
|
|
+++ b/target/riscv/op_helper.c
|
||
|
|
@@ -146,7 +146,8 @@ target_ulong helper_mret(CPURISCVState *env, target_ulong cpu_pc_deb)
|
||
|
|
uint64_t mstatus = env->mstatus;
|
||
|
|
target_ulong prev_priv = get_field(mstatus, MSTATUS_MPP);
|
||
|
|
|
||
|
|
- if (!pmp_get_num_rules(env) && (prev_priv != PRV_M)) {
|
||
|
|
+ if (riscv_feature(env, RISCV_FEATURE_PMP) &&
|
||
|
|
+ !pmp_get_num_rules(env) && (prev_priv != PRV_M)) {
|
||
|
|
riscv_raise_exception(env, RISCV_EXCP_ILLEGAL_INST, GETPC());
|
||
|
|
}
|
||
|
|
|
||
|
|
--
|
||
|
|
2.27.0
|
||
|
|
|