projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix race condition in dlopen
[musl]
/
src
/
ldso
/
dynlink.c
diff --git
a/src/ldso/dynlink.c
b/src/ldso/dynlink.c
index
e09f071
..
2bbd492
100644
(file)
--- a/
src/ldso/dynlink.c
+++ b/
src/ldso/dynlink.c
@@
-886,7
+886,7
@@
void *__dynlink(int argc, char **argv)
void *dlopen(const char *file, int mode)
{
void *dlopen(const char *file, int mode)
{
- struct dso *volatile p, *orig_tail
= tail
, *next;
+ struct dso *volatile p, *orig_tail, *next;
size_t i;
int cs;
size_t i;
int cs;
@@
-895,6
+895,8
@@
void *dlopen(const char *file, int mode)
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
pthread_rwlock_wrlock(&lock);
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
pthread_rwlock_wrlock(&lock);
+ orig_tail = tail;
+
if (setjmp(rtld_fail)) {
/* Clean up anything new that was (partially) loaded */
if (p->deps) for (i=0; p->deps[i]; i++)
if (setjmp(rtld_fail)) {
/* Clean up anything new that was (partially) loaded */
if (p->deps) for (i=0; p->deps[i]; i++)