Browse Source

Fix: Enforce virtual_instruction trap for VU-mode indirect CSR access

pull/2221/head
DymShanks 2 months ago
parent
commit
49d1d2a802
  1. 4
      riscv/csrs.cc

4
riscv/csrs.cc

@ -1852,6 +1852,10 @@ sscsrind_reg_csr_t::sscsrind_reg_csr_t(processor_t* const proc, const reg_t addr
} }
void sscsrind_reg_csr_t::verify_permissions(insn_t insn, bool write) const { void sscsrind_reg_csr_t::verify_permissions(insn_t insn, bool write) const {
if (state->v && state->prv == PRV_U) {
throw trap_virtual_instruction(insn.bits());
}
if (proc->extension_enabled(EXT_SMSTATEEN)) { if (proc->extension_enabled(EXT_SMSTATEEN)) {
if ((state->prv < PRV_M) && !(state->mstateen[0]->read() & MSTATEEN0_CSRIND)) if ((state->prv < PRV_M) && !(state->mstateen[0]->read() & MSTATEEN0_CSRIND))
throw trap_illegal_instruction(insn.bits()); throw trap_illegal_instruction(insn.bits());

Loading…
Cancel
Save