1
0
Эх сурвалжийг харах

discard dso descriptors after performing relocations

eventually (once dlopen exists) this behavior will be conditional on
dlopen/dlsym not being reachable.
Rich Felker 13 жил өмнө
parent
commit
e8dbf00a78
1 өөрчлөгдсөн 12 нэмэгдсэн , 0 устгасан
  1. 12 0
      src/ldso/dynlink.c

+ 12 - 0
src/ldso/dynlink.c

@@ -322,6 +322,16 @@ static void reloc_all(struct dso *p)
 	}
 }
 
+static void free_all(struct dso *p)
+{
+	struct dso *n;
+	while (p) {
+		n = p->next;
+		if (p->map) free(p);
+		p = n;
+	}
+}
+
 void *__dynlink(int argc, char **argv, size_t *got)
 {
 	size_t *auxv, aux[AUX_CNT] = {0};
@@ -387,6 +397,8 @@ void *__dynlink(int argc, char **argv, size_t *got)
 
 	reloc_all(head);
 
+	free_all(head);
+
 	errno = 0;
 	return (void *)aux[AT_ENTRY];
 }