[GHC] #7629: segmentation fault in compiled program, involves gtk, selinux

GHC cvs-ghc at haskell.org
Tue Mar 26 18:44:48 CET 2013


#7629: segmentation fault in compiled program, involves gtk, selinux
-----------------------------------------------------------------+----------
    Reporter:  wgmitchener                                       |       Owner:  simonmar     
        Type:  bug                                               |      Status:  infoneeded   
    Priority:  high                                              |   Milestone:  7.6.2        
   Component:  Runtime System                                    |     Version:  7.4.2        
    Keywords:  segmentation fault, multithreading, selinux, gtk  |          Os:  Linux        
Architecture:  x86                                               |     Failure:  Runtime crash
  Difficulty:  Unknown                                           |    Testcase:               
   Blockedby:                                                    |    Blocking:               
     Related:                                                    |  
-----------------------------------------------------------------+----------

Comment(by wgmitchener):

 Got it:

 ghc-7.4.2/rts/Adjustor.c:380

 createAdjustor calls allocateExec (rts/sm/Storage.c) which calls
 ffi_closure_alloc.  So in createAdjustor, line 381, we should have (if I'm
 reading the libffi documentation correctly)

 adjustorStub is a pointer in data address space to the adjustor stub
 code is a pointer in code address space to the very same spot in memory

 and sure enough they are off by 0x1000:
 {{{
 (gdb) print adjustorStub
 $3 = (AdjustorStub *) 0xb7ffc00c
 (gdb) print code
 $4 = (void *) 0xb7ffd00c
 }}}

 which means the correct calculation of the relative call should be
 {{{
 *(long*)&adjustorStub->call[1] = ((char*)&adjustorCode) - ((char*)code +
 5); // code instead of adjustorStub
 }}}

 Apparently code and data and done with different segment settings under
 SELinux.  Chaos follows.

 Going to rebuild GHC 7.4.2 with that change and see if this works...

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7629#comment:21>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler



More information about the ghc-tickets mailing list