https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=285870

            Bug ID: 285870
           Summary: Bug in atexit code in rare specific case + patch to
                    correct it
           Product: Base System
           Version: 14.2-RELEASE
          Hardware: amd64
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: bin
          Assignee: b...@freebsd.org
          Reporter: free...@ap2c.com
 Attachment #259304 text/plain
         mime type:

Created attachment 259304
  --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=259304&action=edit
Code example which generates the bug

Since at least five years the use of dlib-cpp as a shared library loaded with
dlopen and freed with dlclose lead the main program to crash with a
segmentation fault when it exit (example: when the "pdlib" PHP wrapper is used
php crashes after the main routine returns).

After debugging the problem I noticed that it crashes because __cxa_atexit was
called during a call to a function (previously registered with a __cxa_atexit
call) during __cxa_finalize when the shared library was closed.

I wrote an simple code which mimics the bug. You will find it attached to this
bug report. To use it:
 $ c++ -o atexit atexit.cpp
 $ c++ -fPIC -shared -o libatexit.so atexit.cpp -DSHARED
 $ ./atexit
CA instance destroyed
closed
[1]    28802 segmentation fault (core dumped)  ./atexit

lldb confirms that it crashes because it tries to call a function which doesn't
exists anymore:

(lldb) bt
* thread #1, name = 'atexit', stop reason = signal SIGSEGV: address not mapped
to object (fault address: 0x824784b90)
  * frame #0: 0x0000000824784b90
    frame #1: 0x000000082275af7f libc.so.7`__cxa_finalize + 319
    frame #2: 0x000000082275b4dc libc.so.7`exit + 76
    frame #3: 0x000000082267bc41 libc.so.7`__libc_start1 + 305
    frame #4: 0x0000000000201780 atexit`_start at crt1_s.S:83

-- 
You are receiving this mail because:
You are the assignee for the bug.

Reply via email to