This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Async signal safe TLS accesses


On Thu, Jan 9, 2014 at 8:42 AM, Joseph S. Myers <joseph@codesourcery.com> wrote:

> Maybe have the signal handler outside the loaded module call the function
> from the loaded module, but with sem_post in the function outside the
> module?  I haven't tested whether this fixes the powerpc problem, but it
> should avoid the identified race with the module being dlclosed while code
> from it is executing.  (There would of course then be the need to have
> memory barriers to ensure the current pointer obtained from dlsym is
> available from the thread calling the signal handler - and it would be
> necessary to ensure that the test does still show up the non-signal-safety
> if run with older glibc.)

Could you please test attached proposed fix?

It passes on x86_64 (ran 1000 times), and immediately self-deadlocks using
system (i.e. older) glibc-2.15 like so:

(gdb) bt
#0  __lll_lock_wait_private () at
../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:93
#1  0x00007f2dc9adf231 in _L_lock_10574 () at malloc.c:5241
#2  0x00007f2dc9adcf87 in __GI___libc_malloc (bytes=139833800392736)
at malloc.c:2921
#3  0x00007f2dca23c365 in allocate_and_init (map=0xc78bb0) at dl-tls.c:526
#4  tls_get_addr_tail (dtv=<optimized out>, the_map=0xc78bb0,
module=<optimized out>) at dl-tls.c:739
#5  0x00007f2dca24d5d0 in __tls_get_addr (ti=0x7f2dc524ffb0) at dl-tls.c:764
#6  0x00007f2dc504f870 in action (signo=<optimized out>,
info=0x7f2dc9a58b30, ignored=<optimized out>) at tst-tls7mod.c:32
#7  0x0000000000401913 in action (signo=<optimized out>,
info=<optimized out>, ignored=<optimized out>) at tst-tls7.c:53
#8  <signal handler called>
#9  __memset_sse2 () at ../sysdeps/x86_64/multiarch/../memset.S:44
#10 0x00007f2dc9ad9f6a in _int_free (av=0x7f2d98000020,
p=0x7f2d980008b0, have_lock=0) at malloc.c:4101
#11 0x000000000040174a in spin (ignored=<optimized out>) at tst-tls7.c:37
#12 0x00007f2dc9e21e9a in start_thread (arg=0x7f2dc9a59700) at
pthread_create.c:308
#13 0x00007f2dc9b4e3fd in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:112


Thanks,
-- 
Paul Pluzhnikov

Attachment: glibc-tls7-20140110.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]