Add support for offsets when checking signatures

This commit is contained in:
Pierre Pronchery 2019-04-28 02:17:31 +02:00
parent 631a0a7203
commit 07db57ce71

View File

@ -54,11 +54,12 @@ int multiboot_load_module(ukMultibootMod const * mod, unsigned char * elfclass,
{ {
int (*loader)(ukMultibootMod const * mod, int (*loader)(ukMultibootMod const * mod,
unsigned char * elfclass, vaddr_t * entrypoint); unsigned char * elfclass, vaddr_t * entrypoint);
off_t offset;
char * signature; char * signature;
size_t signature_len; size_t signature_len;
} loaders[] = } loaders[] =
{ {
{ _load_module_elf, ELFMAG, SELFMAG } { _load_module_elf, 0x0, ELFMAG, SELFMAG }
}; };
size_t i; size_t i;
@ -76,7 +77,8 @@ int multiboot_load_module(ukMultibootMod const * mod, unsigned char * elfclass,
{ {
if(len < loaders[i].signature_len) if(len < loaders[i].signature_len)
continue; 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) loaders[i].signature_len) == 0)
return loaders[i].loader(mod, elfclass, entrypoint); return loaders[i].loader(mod, elfclass, entrypoint);
} }