mirror of git://git.musl-libc.org/musl
block dlopen of libraries with initial-exec refs to dynamic TLS
previously, this operation succeeded, and the relocation results worked for access from new threads created after dlopen, but produced invalid accesses (and possibly clobbered other memory) from threads that already existed. the way the check is written, it still permits dlopen of libraries containing initial-exec references to static TLS (TLS in the main program or in a dynamic library loaded at startup).
This commit is contained in:
parent
5fdccbcd8f
commit
5c2f46a214
|
@ -385,6 +385,14 @@ static void do_relocs(struct dso *dso, size_t *rel, size_t rel_size, size_t stri
|
|||
sym_val = def.sym ? (size_t)laddr(def.dso, def.sym->st_value) : 0;
|
||||
tls_val = def.sym ? def.sym->st_value : 0;
|
||||
|
||||
if ((type == REL_TPOFF || type == REL_TPOFF_NEG)
|
||||
&& runtime && def.dso->tls_id > static_tls_cnt) {
|
||||
error("Error relocating %s: %s: initial-exec TLS "
|
||||
"resolves to dynamic definition in %s",
|
||||
dso->name, name, def.dso->name);
|
||||
longjmp(*rtld_fail, 1);
|
||||
}
|
||||
|
||||
switch(type) {
|
||||
case REL_NONE:
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue