1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 23:47:45 +00:00

LibELF: Check for missing PT_LOAD alignment header value

This ensures we dont divide by zero when checking for valid alignment
values.
This commit is contained in:
Idan Horowitz 2021-06-30 19:59:03 +03:00 committed by Andreas Kling
parent f9a8c6f053
commit 9295f1936c

View file

@ -237,14 +237,18 @@ bool validate_program_headers(const ElfW(Ehdr) & elf_header, size_t file_size, c
}
if (elf_header.e_type != ET_CORE) {
if (program_header.p_type == PT_LOAD && program_header.p_align == 0) {
if (verbose)
dbgln("Program header ({}) with p_type PT_LOAD missing p_align (p_align == 0)", header_index);
return false;
}
if (program_header.p_type == PT_LOAD && program_header.p_align % (size_t)PAGE_SIZE != 0) {
if (verbose)
dbgln("Program header ({}) with p_type PT_LOAD has p_align ({}) not divisible by page size ({})", header_index, program_header.p_align, PAGE_SIZE);
return false;
}
}
if (elf_header.e_type != ET_CORE) {
if (program_header.p_type == PT_LOAD && program_header.p_vaddr % program_header.p_align != program_header.p_offset % program_header.p_align) {
if (verbose)
dbgln("Program header ({}) with p_type PT_LOAD has mis-aligned p_vaddr ({:x})", header_index, program_header.p_vaddr);