Browse Source

Enable CBOs (but upgrade inval to flush for safety)

pull/343/head
Andrew Waterman 2 years ago
parent
commit
7f3bef0119
  1. 2
      machine/minit.c
  2. 2
      pk/pk.c

2
machine/minit.c

@ -246,7 +246,7 @@ void enter_supervisor_mode(void (*fn)(uintptr_t), uintptr_t arg0, uintptr_t arg1
mstatus = INSERT_FIELD(mstatus, MSTATUS_MPIE, 0);
write_csr(mstatus, mstatus);
write_csr(mscratch, MACHINE_STACK_TOP() - MENTRY_FRAME_SIZE);
write_csr(menvcfg, MENVCFG_SSE);
write_csr(menvcfg, MENVCFG_SSE | MENVCFG_CBCFE | INSERT_FIELD(0, MENVCFG_CBIE, 1));
#ifndef __riscv_flen
uintptr_t *p_fcsr = (uintptr_t*)(MACHINE_STACK_TOP() - MENTRY_FRAME_SIZE); // the x0's save slot
*p_fcsr = 0;

2
pk/pk.c

@ -122,6 +122,8 @@ static void run_loaded_program(size_t argc, char** argv, uintptr_t kstack_top)
write_csr(ssp, shadow_stack_top);
}
set_csr(senvcfg, SENVCFG_CBCFE | INSERT_FIELD(0, SENVCFG_CBIE, 1));
// copy phdrs to user stack
size_t stack_top = current.stack_top - current.phdr_size;
memcpy_to_user((void*)stack_top, (void*)current.phdr, current.phdr_size);

Loading…
Cancel
Save