aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-08-01 12:27:28 +0200
committerHimbeer <himbeer@disroot.org>2024-08-01 12:27:28 +0200
commitd27e1b84c58bdf493de6594c4378bbd3b0c3d996 (patch)
treef5930a2026b7497d715fef95e9d1967460014232
parent78c0100bb21560a9ea2dc2f4176415e5cdf9b3b6 (diff)
syscall: Fix unaligned arguments to launch() causing a kernel panic
-rw-r--r--src/lib/syscall.zig5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig
index 5ca10cf..6b94e16 100644
--- a/src/lib/syscall.zig
+++ b/src/lib/syscall.zig
@@ -90,8 +90,9 @@ fn consoleWrite(trap_frame: *const TrapFrame) !usize {
fn launch(trap_frame: *const TrapFrame) !usize {
const alignment = @alignOf(std.elf.Elf64_Ehdr);
const bytes_addr = trap_frame.general_purpose_registers[10];
- const bytes_opt: ?[*]align(alignment) const u8 = @ptrFromInt(bytes_addr);
- const bytes_ptr = bytes_opt orelse return Error.ZeroAddressSupplied;
+ const bytes_opt: ?[*]const u8 = @ptrFromInt(bytes_addr);
+ const bytes_noalign = bytes_opt orelse return Error.ZeroAddressSupplied;
+ const bytes_ptr = try std.math.alignCast(alignment, bytes_noalign);
const len = trap_frame.general_purpose_registers[11];
const bytes = bytes_ptr[0..len];