fix regression in dynamic-linked tls when both main app & libs have tls
authorRich Felker <dalias@aerifal.cx>
Sat, 30 Jan 2016 19:34:45 +0000 (14:34 -0500)
committerRich Felker <dalias@aerifal.cx>
Sat, 30 Jan 2016 19:34:45 +0000 (14:34 -0500)
commit d56460c939c94a6c547abe8238f442b8de10bfbd introduced this bug by
setting up the tls module chain incorrectly when the main app has tls.
the singly-linked list head pointer was setup correctly, but the tail
pointer was not, so the first attempt to append to the list (for a
shared library with tls) would treat the list as empty and effectively
removed the main app from the list. this left all tls module id
numbers off-by-one.

this bug did not appear in any released versions.

ldso/dynlink.c

index 26a60b4ccb958a9d677308f90a1fd13a5b8e552b..f497542e96a68d5373c40057831a14cc62fbfcfa 100644 (file)
@@ -1519,7 +1519,7 @@ _Noreturn void __dls3(size_t *sp)
                }
        }
        if (app.tls.size) {
-               libc.tls_head = &app.tls;
+               libc.tls_head = tls_tail = &app.tls;
                app.tls_id = tls_cnt = 1;
 #ifdef TLS_ABOVE_TP
                app.tls.offset = 0;