aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-07-27 18:17:59 +0200
committerHimbeer <himbeer@disroot.org>2024-07-27 18:17:59 +0200
commit4a4f013cbecd22a3e20f9fdf4c236f6bdf506343 (patch)
tree6c8b170af2fca8c99ff4cba3de079996eef5f191 /src
parenteac0af3be5cf93b99d527afaae63d94bcd1a9b18 (diff)
process: Fix create() panicking on ELFs smaller than the ELF buffer size
Fixes #65.
Diffstat (limited to 'src')
-rw-r--r--src/lib/process.zig7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/lib/process.zig b/src/lib/process.zig
index 8aaf972..c167363 100644
--- a/src/lib/process.zig
+++ b/src/lib/process.zig
@@ -33,6 +33,7 @@ pub const Error = error{
};
pub const ExeError = error{
+ TooSmall,
BadEndian,
BadArch,
BadBitLen,
@@ -226,8 +227,12 @@ pub fn switchTo(proc: *Info) noreturn {
unreachable;
}
+const HdrBuf = *align(@alignOf(elf.Elf64_Ehdr)) const [@sizeOf(elf.Elf64_Ehdr)]u8;
+
pub fn create(allocator: std.mem.Allocator, elf_buf: []align(@alignOf(elf.Elf64_Ehdr)) const u8) !*Info {
- const hdr_buf: *align(@alignOf(elf.Elf64_Ehdr)) const [@sizeOf(elf.Elf64_Ehdr)]u8 = elf_buf[0..@sizeOf(elf.Elf64_Ehdr)];
+ if (elf_buf.len < @sizeOf(elf.Elf64_Ehdr)) return ExeError.TooSmall;
+
+ const hdr_buf: HdrBuf = elf_buf[0..@sizeOf(elf.Elf64_Ehdr)];
const hdr = try elf.Header.parse(@ptrCast(hdr_buf));
try validateElfHeader(hdr, hdr_buf);