diff options
author | Kenneth Camann <kjcamann@gmail.com> | 2021-01-03 02:11:42 +0000 |
---|---|---|
committer | Warner Losh <imp@FreeBSD.org> | 2021-06-03 21:22:14 +0000 |
commit | 5deb35002545ca5081cc90795fec68bcea30f75d (patch) | |
tree | ea4fa69f109c05470747698361388ee18c0f5a7b /usr.sbin/uefisign | |
parent | 37f780d3e0a2e8e4c64c526b6e7dc77ff6b91057 (diff) | |
download | src-5deb35002545ca5081cc90795fec68bcea30f75d.tar.gz src-5deb35002545ca5081cc90795fec68bcea30f75d.zip |
uefisign: fix SizeOfHeaders sanity check.
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
Diffstat (limited to 'usr.sbin/uefisign')
-rw-r--r-- | usr.sbin/uefisign/pe.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/usr.sbin/uefisign/pe.c b/usr.sbin/uefisign/pe.c index 6459321441d8..09b5edd56ab7 100644 --- a/usr.sbin/uefisign/pe.c +++ b/usr.sbin/uefisign/pe.c @@ -232,7 +232,7 @@ parse_section_table(struct executable *x, off_t off, int number_of_sections) 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); |