At the moment, CSR Instructions are not behaving as intended when accessing non-existent CSRs.
The issue is that after an unsuccessful / illegal read the instruction does not get aborted, rather it continues executing. In the case of CSRRW for example, this leads to writing the read value into rd.
This occurs as there are no checks after calling read_mem or write_mem to determine if they were successful.