cvs commit: src/sys/compat/ndis pe_var.h subr_pe.c src/usr.sbin/ndiscvt ndiscvt.c

Bill Paul wpaul at
Wed Oct 26 11:46:28 PDT 2005

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 
  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

More information about the cvs-src mailing list