diff options
Diffstat (limited to 'main/musl/0052-ldso-avoid-spurious-possible-erroneous-work-for-libs.patch')
-rw-r--r-- | main/musl/0052-ldso-avoid-spurious-possible-erroneous-work-for-libs.patch | 84 |
1 files changed, 0 insertions, 84 deletions
diff --git a/main/musl/0052-ldso-avoid-spurious-possible-erroneous-work-for-libs.patch b/main/musl/0052-ldso-avoid-spurious-possible-erroneous-work-for-libs.patch deleted file mode 100644 index 86ca7ea9e9..0000000000 --- a/main/musl/0052-ldso-avoid-spurious-possible-erroneous-work-for-libs.patch +++ /dev/null @@ -1,84 +0,0 @@ -From 66b53cfa8876342f7e7d7907d30c719c38cd5a1b Mon Sep 17 00:00:00 2001 -From: Rich Felker <dalias@aerifal.cx> -Date: Tue, 4 Jul 2017 10:58:13 -0400 -Subject: [PATCH 52/52] ldso: avoid spurious & possible erroneous work for libs - with no deps - -a null pointer for a library's deps list was ambiguous: it could -indicate either no dependencies or that the dependency list had not -yet been populated. inability to distinguish could lead to spurious -work when dlopen is called multiple times on a library with no deps, -and due to related bugs, could actually cause other libraries to -falsely appear as dependencies, translating into false positives for -dlsym. - -avoid the problem by always initializing the deps pointer, pointing to -an empty list if there are no deps. rather than wasting memory and -introducing another failure path by allocating an empty list per -library, simply share a global dummy list. - -further fixes will be needed for related bugs, and much of this code -may end up being replaced. ---- - ldso/dynlink.c | 11 +++++++---- - 1 file changed, 7 insertions(+), 4 deletions(-) - -diff --git a/ldso/dynlink.c b/ldso/dynlink.c -index d20dbd87..239007ff 100644 ---- a/ldso/dynlink.c -+++ b/ldso/dynlink.c -@@ -129,6 +129,7 @@ static size_t static_tls_cnt; - static pthread_mutex_t init_fini_lock = { ._m_type = PTHREAD_MUTEX_RECURSIVE }; - static struct fdpic_loadmap *app_loadmap; - static struct fdpic_dummy_loadmap app_dummy_loadmap; -+static struct dso *const nodeps_dummy; - - struct debug *_dl_debug_addr = &debug; - -@@ -1125,6 +1126,7 @@ static void load_deps(struct dso *p) - } - } - } -+ if (!*deps) *deps = (struct dso **)&nodeps_dummy; - } - - static void load_preload(char *s) -@@ -1742,7 +1744,8 @@ void *dlopen(const char *file, int mode) - free(p->funcdescs); - if (p->rpath != p->rpath_orig) - free(p->rpath); -- free(p->deps); -+ if (p->deps != &nodeps_dummy) -+ free(p->deps); - unmap_library(p); - free(p); - } -@@ -1772,14 +1775,14 @@ void *dlopen(const char *file, int mode) - load_deps(p); - if (!p->relocated && (mode & RTLD_LAZY)) { - prepare_lazy(p); -- if (p->deps) for (i=0; p->deps[i]; i++) -+ for (i=0; p->deps[i]; i++) - if (!p->deps[i]->relocated) - prepare_lazy(p->deps[i]); - } - /* Make new symbols global, at least temporarily, so we can do - * relocations. If not RTLD_GLOBAL, this is reverted below. */ - add_syms(p); -- if (p->deps) for (i=0; p->deps[i]; i++) -+ for (i=0; p->deps[i]; i++) - add_syms(p->deps[i]); - reloc_all(p); - } -@@ -1878,7 +1881,7 @@ static void *do_dlsym(struct dso *p, const char *s, void *ra) - return p->funcdescs + (sym - p->syms); - if (sym && sym->st_value && (1<<(sym->st_info&0xf) & OK_TYPES)) - return laddr(p, sym->st_value); -- if (p->deps) for (i=0; p->deps[i]; i++) { -+ for (i=0; p->deps[i]; i++) { - if ((ght = p->deps[i]->ghashtab)) { - if (!gh) gh = gnu_hash(s); - sym = gnu_lookup(gh, ght, p->deps[i], s); --- -2.13.1 - |