imgact_elf.c: unify check for phdr fitting into the first page.
Similar to the userspace rtld check. Reviewed by: dim, emaste (previous versions) Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D26339
This commit is contained in:
parent
1db23efb83
commit
7de1bc13e2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=365433
@ -448,6 +448,13 @@ __elfN(get_brandinfo)(struct image_params *imgp, const char *interp,
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
static bool
|
||||
__elfN(phdr_in_zero_page)(const Elf_Ehdr *hdr)
|
||||
{
|
||||
return (hdr->e_phoff <= PAGE_SIZE &&
|
||||
(u_int)hdr->e_phentsize * hdr->e_phnum <= PAGE_SIZE - hdr->e_phoff);
|
||||
}
|
||||
|
||||
static int
|
||||
__elfN(check_header)(const Elf_Ehdr *hdr)
|
||||
{
|
||||
@ -811,8 +818,7 @@ __elfN(load_file)(struct proc *p, const char *file, u_long *addr,
|
||||
}
|
||||
|
||||
/* Only support headers that fit within first page for now */
|
||||
if ((hdr->e_phoff > PAGE_SIZE) ||
|
||||
(u_int)hdr->e_phentsize * hdr->e_phnum > PAGE_SIZE - hdr->e_phoff) {
|
||||
if (!__elfN(phdr_in_zero_page)(hdr)) {
|
||||
error = ENOEXEC;
|
||||
goto fail;
|
||||
}
|
||||
@ -1088,9 +1094,7 @@ __CONCAT(exec_, __elfN(imgact))(struct image_params *imgp)
|
||||
* detected an ELF file.
|
||||
*/
|
||||
|
||||
if ((hdr->e_phoff > PAGE_SIZE) ||
|
||||
(u_int)hdr->e_phentsize * hdr->e_phnum > PAGE_SIZE - hdr->e_phoff) {
|
||||
/* Only support headers in first page for now */
|
||||
if (!__elfN(phdr_in_zero_page)(hdr)) {
|
||||
uprintf("Program headers not in the first page\n");
|
||||
return (ENOEXEC);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user