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

Bill Paul wpaul at FreeBSD.org
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 
  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


More information about the cvs-src mailing list