mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-03-23 06:25:12 +00:00
riscv: AND stage-1 and stage-2 protection flags
Take the result of stage-1 and stage-2 page table walks and AND the two protection flags together. This way we require both to set permissions instead of just stage-2. Backports commit 8f67cd6db7375f9133d900b13b300931fbc2e1d8 from qemu
This commit is contained in:
parent
b6e2cf33df
commit
434f9b057f
|
@ -698,7 +698,7 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
|
|||
RISCVCPU *cpu = RISCV_CPU(cs->uc, cs);
|
||||
CPURISCVState *env = &cpu->env;
|
||||
hwaddr pa = 0;
|
||||
int prot;
|
||||
int prot, prot2;
|
||||
bool pmp_violation = false;
|
||||
bool m_mode_two_stage = false;
|
||||
bool hs_mode_two_stage = false;
|
||||
|
@ -748,13 +748,15 @@ bool riscv_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
|
|||
/* Second stage lookup */
|
||||
im_address = pa;
|
||||
|
||||
ret = get_physical_address(env, &pa, &prot, im_address,
|
||||
ret = get_physical_address(env, &pa, &prot2, im_address,
|
||||
access_type, mmu_idx, false, true);
|
||||
|
||||
qemu_log_mask(CPU_LOG_MMU,
|
||||
"%s 2nd-stage address=%" VADDR_PRIx " ret %d physical "
|
||||
TARGET_FMT_plx " prot %d\n",
|
||||
__func__, im_address, ret, pa, prot);
|
||||
__func__, im_address, ret, pa, prot2);
|
||||
|
||||
prot &= prot2;
|
||||
|
||||
if (riscv_feature(env, RISCV_FEATURE_PMP) &&
|
||||
(ret == TRANSLATE_SUCCESS) &&
|
||||
|
|
Loading…
Reference in a new issue