https://bugzilla.novell.com/show_bug.cgi?id=289641#c6 Michael Matz <matz@novell.com> changed: What |Removed |Added ---------------------------------------------------------------------------- AssignedTo|matz@novell.com |kernel-maintainers@forge.provo.novell.com Status|ASSIGNED |NEW Component|Development |Kernel Summary|lock-up on Qt app exit from |kernels vDSO mapping broken, leads to pthread |g++ miscompiling pthread |cancel problems. |cleanup code | --- Comment #6 from Michael Matz <matz@novell.com> 2007-07-05 12:05:55 MST --- It's a kernel bug. The problem is, that on i686 the vDSO vsyscall page is used. With address space randomization the vDSO itself won't be mapped to the default address 0xffffe000, but to some other random address. E.g.: b7f10000-b7f11000 r-xp b7f10000 00:00 0 [vdso] That in itself is not yet a problem, but the kernel notifies the process of the wrong address afterwards as can be seen here: % LD_SHOW_AUXV=1 cat /proc/self/maps | egrep 'SYSINFO|vdso' AT_SYSINFO: 0xb7eee400 AT_SYSINFO_EHDR: 0xffffe000 b7eee000-b7eef000 r-xp b7eee000 00:00 0 [vdso] So, the vdso is mapped to 0xb7eee000, and the AT_SYSINFO aux header correctly points inside that DSO. But the ELF Header pointer (AT_SYSINFO_EHDR) remains at 0xffffe000. Now, due to kernel magic the vdso is also mapped at the compat address. But for syscalls the randomized mapping is used (i.e. when following the backtrace you'll somewhen hit a program counter inside the randomized vdso, not inside the 0xffffe000 mapping). The result for all of this is, that dl_iterate_phdr won't find the vDSO because it iterates over the registered ELF headers. Hence if the program counter is inside that DSO (which happens when unwinding through a normal syscall, which is exactly what happens when a thread is canceled which itself is inside a syscall) it can't be associated with any unwind information (the vDSO contains unwind info for itself, but as the vDSO can't be found...). Hence unwinding stops at that point and simply exits the thread. Of course without proper unwinding or running cleanups. kernel-default-2.6.18.2-34 FWIW. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are on the CC list for the bug.