This check was too aggressive: it is fine if SizeOfHeaders is exactly
equal to the size of the DOS stub + PE header + section table. Despite
being wrong this code typically worked for most EFI binaries because
SizeOfHeaders is rounded up to a multiple of FileAlignment, which is
often large (e.g., 512 bytes for the FreeBSD loader) so most binaries
made it through.
Reviewed by: imp@
Sponsored by: Netflix
Pull Request: https://github.com/freebsd/freebsd-src/pull/445
range_check(x, off, sizeof(*psh) * number_of_sections,
"section table");
- if (x->x_headers_len <= off + sizeof(*psh) * number_of_sections)
+ if (x->x_headers_len < off + sizeof(*psh) * number_of_sections)
errx(1, "section table outside of headers");
psh = (const struct pe_section_header *)(x->x_buf + off);