discard dso descriptors after performing relocations
authorRich Felker <dalias@aerifal.cx>
Sat, 25 Jun 2011 04:47:28 +0000 (00:47 -0400)
committerRich Felker <dalias@aerifal.cx>
Sat, 25 Jun 2011 04:47:28 +0000 (00:47 -0400)
eventually (once dlopen exists) this behavior will be conditional on
dlopen/dlsym not being reachable.

src/ldso/dynlink.c

index cb35759..105ed3d 100644 (file)
@@ -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];
 }