Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Aug 2001 16:15:13 -0700 (PDT)
From:      Bill Paul <wpaul@FreeBSD.org>
To:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/kern link_elf.c
Message-ID:  <200108102315.f7ANFD257971@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
wpaul       2001/08/10 16:15:13 PDT

  Modified files:
    sys/kern             link_elf.c 
  Log:
  Fix some of the GDB linkage setup. The l_name member of the gdb linkage
  structure is always free()ed yet only sometimes malloc()ed. In particular,
  it was simply set to point to l_filename from the a linker_file_t in
  link_elf_link_preload_finish(). The l_filename had been malloc()ed inside
  the kern_linker.c module and was being free()ed twice: once by
  link_elf_unload_file() and again by linker_file_unload(), leading to
  a panic.
  
  How to duplicate the problem:
  
  - Pre-load a kernel module from the loader, i.e. if_sis.ko
  - Boot system
  - Attempt to unload module with kldunload if_sis
  - Bewm
  
  The problem here is that the case where the module was loaded with kldload
  after system boot would work correctly, so this bug went unnoticed until
  I stubbed my toe on it just now. (Also, you can only trip this bug if
  you compile a kernel with options DDB, but that's the default now.)
  
  Fix: remember to malloc() a separate copy of the module name for the
  l_name member of the gdb linkage structure in three places where the
  linkage structure can be initialized.
  
  Revision  Changes    Path
  1.42      +15 -3     src/sys/kern/link_elf.c


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200108102315.f7ANFD257971>