diff options
author | Himbeer <himbeer@disroot.org> | 2024-07-27 18:17:59 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-07-27 18:17:59 +0200 |
commit | 4a4f013cbecd22a3e20f9fdf4c236f6bdf506343 (patch) | |
tree | 6c8b170af2fca8c99ff4cba3de079996eef5f191 /src | |
parent | eac0af3be5cf93b99d527afaae63d94bcd1a9b18 (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.zig | 7 |
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); |