Page MenuHomeFreeBSD

D26339.diff
No OneTemporary

D26339.diff

Index: head/sys/kern/imgact_elf.c
===================================================================
--- head/sys/kern/imgact_elf.c
+++ head/sys/kern/imgact_elf.c
@@ -448,6 +448,13 @@
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 @@
}
/* 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 @@
* 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);
}

File Metadata

Mime Type
text/plain
Expires
Tue, Feb 11, 1:03 AM (9 h, 12 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16586620
Default Alt Text
D26339.diff (1 KB)

Event Timeline