Date: Wed, 26 Oct 2005 18:46:27 +0000 (UTC) From: Bill Paul <wpaul@FreeBSD.org> To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/sys/compat/ndis pe_var.h subr_pe.c src/usr.sbin/ndiscvt ndiscvt.c Message-ID: <200510261846.j9QIkRIP087700@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
wpaul 2005-10-26 18:46:27 UTC
FreeBSD src repository
Modified files:
sys/compat/ndis pe_var.h subr_pe.c
usr.sbin/ndiscvt ndiscvt.c
Log:
Clean up and apply the fix for PR 83477. The calculation for locating
the start of the section headers has to take into account the fact
that the image_nt_header is really variable sized. It happens that
the existing calculation is correct for _most_ production binaries
produced by the Windows DDK, but if we get a binary with oddball
offsets, the PE loader could crash.
Changes from the supplied patch are:
- We don't really need to use the IMAGE_SIZEOF_NT_HEADER() macro when
computing how much of the header to return to callers of
pe_get_optional_header(). While it's important to take the variable
size of the header into account in other calculations, we never
actually look at anything outside the non-variable portion of the
header. This saves callers from having to allocate a variable sized
buffer off the heap (I purposely tried to avoid using malloc()
in subr_pe.c to make it easier to compile in both the -D_KERNEL and
!-D_KERNEL case), and since we're copying into a buffer on the
stack, we always have to copy the same amount of data or else
we'll trash the stack something fierce.
- We need <stddef.h> to get offsetof() in the !-D_KERNEL case.
- ndiscvt.c needs the IMAGE_FIRST_SECTION() macro too, since it does
a little bit of section pre-processing.
PR: kern/83477
Revision Changes Path
1.14 +9 -0 src/sys/compat/ndis/pe_var.h
1.12 +13 -7 src/sys/compat/ndis/subr_pe.c
1.12 +2 -2 src/usr.sbin/ndiscvt/ndiscvt.c
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200510261846.j9QIkRIP087700>
