ldso: fix the dtv update logic in __tls_get_new
authorSzabolcs Nagy <nsz@port70.net>
Thu, 26 Nov 2015 18:59:46 +0000 (19:59 +0100)
committerRich Felker <dalias@aerifal.cx>
Sat, 28 Nov 2015 18:34:17 +0000 (13:34 -0500)
commit12978acb3066db738c8c15121e81adbb63739876
treead1b75f4b307190f31416438b8c6de8494c8f62e
parent8eead3ef18ea71a64ef3cbff8c09bac3b82f1242
ldso: fix the dtv update logic in __tls_get_new

if two or more threads accessed tls in a dso that was loaded after
the threads were created, then __tls_get_new could do out-of-bound
memory access (leading to segfault).

accidentally byte count was used instead of element count when
the new dtv pointer was computed. (dso->new_dtv is (void**).)

it is rare that the same dso provides dtv for several threads,
the crash was not observed in practice, but possible to trigger.
src/ldso/dynlink.c