The outregs parameter (struct La_x86_64_retval pointer) of _dl_call_pltexit function is not aligned to 16. This is causing crash in the audit library. When the audit library touches the lrv_xmm0 (or lrv_xmm1) member of the La_x86_64_retval, gcc will emit 'movaps' instructions which expect a parameter aligned to 16, otherwise it segfaults. In email discussion H.J. Lu mentioned: "According to x86-64 psABI, La_x86_64_retval should be aligned at 16byte" (http://gcc.gnu.org/ml/gcc/2009-02/msg00346.html) The issue can be reproduced by using attached audit.c as the audit library. Here is the gdb session record showing the issue: > ... > (gdb) b _dl_call_pltexit > Function "_dl_call_pltexit" not defined. > Make breakpoint pending on future shared library load? (y or [n]) y > Breakpoint 1 (_dl_call_pltexit) pending. > (gdb) r > Starting program: /opt/crash > symbol __libc_start_main > symbol printf > > Breakpoint 1, _dl_call_pltexit (l=0x7ffff7ffd000, reloc_offset=0, > inregs=0x7fffffffe418, outregs=0x7fffffffe3c8) at dl-runtime.c:408 > 408 { > (gdb)
Created attachment 3763 [details] audit library to reproduce the bug
Please provide step-by-step instructions to reproduce the bug.
Created attachment 3807 [details] proposed patch, sent to libc-alpha also proposed patch, sent to libc-alpha also
The patch has a number of problems. I've fixed those and applied it.