From 07db57ce71c9b538ebaa17692db1a10fc8583809 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 28 Apr 2019 02:17:31 +0200 Subject: [PATCH] Add support for offsets when checking signatures --- src/drivers/boot/multiboot.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/drivers/boot/multiboot.c b/src/drivers/boot/multiboot.c index 3ea53b3..c6793c1 100644 --- a/src/drivers/boot/multiboot.c +++ b/src/drivers/boot/multiboot.c @@ -54,11 +54,12 @@ int multiboot_load_module(ukMultibootMod const * mod, unsigned char * elfclass, { int (*loader)(ukMultibootMod const * mod, unsigned char * elfclass, vaddr_t * entrypoint); + off_t offset; char * signature; size_t signature_len; } loaders[] = { - { _load_module_elf, ELFMAG, SELFMAG } + { _load_module_elf, 0x0, ELFMAG, SELFMAG } }; size_t i; @@ -76,7 +77,8 @@ int multiboot_load_module(ukMultibootMod const * mod, unsigned char * elfclass, { if(len < loaders[i].signature_len) continue; - if(memcmp((void *)mod->start, loaders[i].signature, + if(memcmp((void *)(mod->start + loaders[i].offset), + loaders[i].signature, loaders[i].signature_len) == 0) return loaders[i].loader(mod, elfclass, entrypoint); }