diff options
author | Himbeer <himbeer@disroot.org> | 2024-07-27 19:24:02 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-07-27 19:24:02 +0200 |
commit | a5c85dc3b3160df29def93ef44c0b5bedde3a407 (patch) | |
tree | f9f12f1c0ee8097ebc591b2e1567eb82c4b4c251 /src/lib/syscall.zig | |
parent | d6c48bef193658542e61990ae6c14851d80b3ea4 (diff) |
syscall: Raise page fault if invalid address is passed to uprint
Diffstat (limited to 'src/lib/syscall.zig')
-rw-r--r-- | src/lib/syscall.zig | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig index 62176db..d15810b 100644 --- a/src/lib/syscall.zig +++ b/src/lib/syscall.zig @@ -61,9 +61,14 @@ fn errorName(trap_frame: *const trap.Frame) !usize { // uprint(str_addr: usize, len: usize) void fn uprint(trap_frame: *const trap.Frame) void { - const procmem: *paging.Table = @ptrFromInt(instructions.satp.read().ppn << 12); + const vaddr = trap_frame.general_purpose_registers[10]; - const paddr = procmem.translate(trap_frame.general_purpose_registers[10]).?; + const procmem: *paging.Table = @ptrFromInt(instructions.satp.read().ppn << 12); + const paddr = procmem.translate(vaddr) orelse { + const faulter: *volatile u8 = @ptrFromInt(vaddr); + _ = faulter.*; + unreachable; + }; const str_ptr: [*]const u8 = @ptrFromInt(paddr); const str = str_ptr[0..trap_frame.general_purpose_registers[11]]; |