Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
target/riscv: Smepmp: Return error when access permission not allowed…
… in PMP

On an address match, skip checking for default permissions and return error
based on access defined in PMP configuration.

v3 Changes:
o Removed explicit return of boolean value from comparision
  of priv/allowed_priv

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: 90b1faf ("target/riscv: Smepmp: Skip applying default rules when address matches")
Signed-off-by: Himanshu Chauhan <hchauhan@ventanamicro.com>
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Weiwei Li <liweiwei@iscas.ac.cn>
Message-Id: <20230605164548.715336-1-hchauhan@ventanamicro.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
  • Loading branch information
hschauhan authored and alistair23 committed Jun 13, 2023
1 parent 949b6bc commit a574b27
Showing 1 changed file with 2 additions and 8 deletions.
10 changes: 2 additions & 8 deletions target/riscv/pmp.c
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
}

/* 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);
}

/*
Expand Down

0 comments on commit a574b27

Please sign in to comment.