Bug #2395
closedpkgsrc's intl library segfaults when locking a thread (i386 only)
0%
Description
- DOES NOT AFFECT X86_64, THIS IS I386 ONLY ####
How it was found:
pkgsrc security/libpreludedb wouldn't build, crashed during configuration.
Cause of crash was conftest involving libprelude-config, a program built from security/libprelude.
The program is attached. It could be built with the following flags:
cc -o conftest -O2 -g -I/usr/pkg/include -z relro -z now \
-L/usr/pkg/lib -Wl,-R/usr/pkg/lib -lprelude -lgnutls -lgcrypt -lgpg-error conftest.c
Upon execution, it will segfault with libgcrypt which calls libgpg-error.
libgpg-error, when built with Native Language Support, will invoke bindtextdomain() from libintl (from pkgsrc devel/gettext-lib)
It should be bindtextdomain("libgpg-error", "/usr/pkg/share/locale").
That invocation from gpg-error's init function segfaults when locking a thread.
The backtrace is as follows:
Program received signal SIGSEGV, Segmentation fault.
init_static (thread=0x0, rwlock=0x284da28c)
at /usr/src/lib/libthread_xu/thread/thr_rwlock.c:117
117 THR_LOCK_ACQUIRE(thread, &_rwlock_static_lock);
#0 init_static (thread=0x0, rwlock=0x284da28c)
at /usr/src/lib/libthread_xu/thread/thr_rwlock.c:117
#1 0x284c7612 in rwlock_wrlock_common (rwlock=<optimized out>,
abstime=<optimized out>)
at /usr/src/lib/libthread_xu/thread/thr_rwlock.c:363
#2 0x284c76dc in _pthread_rwlock_wrlock (rwlock=0x284da28c)
at /usr/src/lib/libthread_xu/thread/thr_rwlock.c:403
#3 0x284d3652 in set_binding_values (domainname=0x282e9bd6 "libgpg-error",
dirnamep=0x284da28c, codesetp=0x0) at ./bindtextdom.c:94
#4 0x284d3a48 in libintl_bindtextdomain (
domainname=0x282e9bd6 "libgpg-error",
dirname=0x282e9bc0 "/usr/pkg/share/locale") at ./bindtextdom.c:323
#5 0x282e974a in real_init () at init.c:68
#6 gpg_err_init () at init.c:104
#7 0x282e9b8b in __do_global_ctors_aux () from /usr/pkg/lib/libgpg-error.so.0
#8 0x282e956d in _init () from /usr/pkg/lib/libgpg-error.so.0
#9 0x28060288 in ?? () from /usr/libexec/ld-elf.so.2
#10 0x28054be8 in _rtld_call_init () at /usr/src/libexec/rtld-elf/rtld.c:738
#11 0x080485f0 in _start1 (cleanup=0x28056894 <rtld_exit>, argc=1,
argv=0xbfbff850) at /usr/src/lib/csu/i386/crt1_c.c:71
#12 0x08048598 in _start () at /usr/src/lib/csu/i386/crt1_s.S:46
The problem is problem with pthread library given libintl works on x86_64 and probably every platform supported by pkgsrc.
Files