blob: 9553b9ec4b96318f75d80faf7f00e7bf93ae7f10 [file] [log] [blame]
/*
* Copyright 2014, NICTA
*
* This software may be distributed and modified according to the terms of
* the GNU General Public License version 2. Note that NO WARRANTY is provided.
* See "LICENSE_GPLv2.txt" for details.
*
* @TAG(NICTA_GPL)
*/
#include <elf/elf.h>
#include <elf/elf32.h>
#include "vmm/platform/elf_helper.h"
/*
Reads the elf header and elf program headers from a file
when given a sufficiently large memory buffer
*/
int vmm_read_elf_headers(void *buf, vmm_t *vmm, int fd, size_t buf_size) {
int res;
if(buf_size < sizeof(struct Elf32_Header))
return -1;
res = vmm->plat_callbacks.read(buf, fd, 0, buf_size);
if(res < 0)
return -1;
if(elf_checkFile(buf) < 0)
return -1;
struct Elf32_Header *chck_elf = (struct Elf32_Header *)buf;
if(chck_elf->e_ehsize + (chck_elf->e_phnum * chck_elf->e_phentsize) > buf_size)
return -1;
return 0;
}