Message ID | 20230605114934.2649023-1-hchauhan@ventanamicro.com |
---|---|
State | New |
Headers | show |
Series | [v2] target/riscv: Smepmp: Return error when access permission not allowed in PMP | expand |
On 2023/6/5 19:49, Himanshu Chauhan wrote: > On an address match, skip checking for default permissions and return error > based on access defined in PMP configuration. > > v2 Changes: > o Removed goto to return in place when address matches > o Call pmp_hart_has_privs_default at the end of the loop > > Fixes: 90b1fafce06 ("target/riscv: Smepmp: Skip applying default rules when address matches") > Signed-off-by: Himanshu Chauhan <hchauhan@ventanamicro.com> > --- > target/riscv/pmp.c | 10 ++-------- > 1 file changed, 2 insertions(+), 8 deletions(-) > > diff --git a/target/riscv/pmp.c b/target/riscv/pmp.c > index 418738afd8..976b199156 100644 > --- a/target/riscv/pmp.c > +++ b/target/riscv/pmp.c > @@ -291,7 +291,6 @@ bool pmp_hart_has_privs(CPURISCVState *env, target_ulong addr, > pmp_priv_t *allowed_privs, target_ulong mode) > { > int i = 0; > - bool ret = false; > int pmp_size = 0; > target_ulong s = 0; > target_ulong e = 0; > @@ -435,17 +434,12 @@ bool pmp_hart_has_privs(CPURISCVState *env, target_ulong addr, > * defined with PMP must be used. We shouldn't fallback on > * finding default privileges. > */ > - ret = true; > - break; > + return (privs & *allowed_privs) == privs ? true : false; This conditional assignment is unnecessary. + return (privs & *allowed_privs) == privs; Otherwise, Reviewed-by: Weiwei Li <liweiwei@iscas.ac.cn> Weiwei Li > } > } > > /* No rule matched */ > - if (!ret) { > - ret = pmp_hart_has_privs_default(env, privs, allowed_privs, mode); > - } > - > - return ret; > + return pmp_hart_has_privs_default(env, privs, allowed_privs, mode); > } > > /*
diff --git a/target/riscv/pmp.c b/target/riscv/pmp.c index 418738afd8..976b199156 100644 --- a/target/riscv/pmp.c +++ b/target/riscv/pmp.c @@ -291,7 +291,6 @@ bool pmp_hart_has_privs(CPURISCVState *env, target_ulong addr, pmp_priv_t *allowed_privs, target_ulong mode) { int i = 0; - bool ret = false; int pmp_size = 0; target_ulong s = 0; target_ulong e = 0; @@ -435,17 +434,12 @@ bool pmp_hart_has_privs(CPURISCVState *env, target_ulong addr, * defined with PMP must be used. We shouldn't fallback on * finding default privileges. */ - ret = true; - break; + return (privs & *allowed_privs) == privs ? true : false; } } /* No rule matched */ - if (!ret) { - ret = pmp_hart_has_privs_default(env, privs, allowed_privs, mode); - } - - return ret; + return pmp_hart_has_privs_default(env, privs, allowed_privs, mode); } /*
On an address match, skip checking for default permissions and return error based on access defined in PMP configuration. v2 Changes: o Removed goto to return in place when address matches o Call pmp_hart_has_privs_default at the end of the loop Fixes: 90b1fafce06 ("target/riscv: Smepmp: Skip applying default rules when address matches") Signed-off-by: Himanshu Chauhan <hchauhan@ventanamicro.com> --- target/riscv/pmp.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-)