overhaul SSP support to use a real canary
[musl] / src / ldso / dynlink.c
index 3f3316a..b51ae77 100644 (file)
@@ -67,8 +67,7 @@ struct dso {
        char buf[];
 };
 
-struct __pthread;
-struct __pthread *__pthread_self_init(void);
+void __init_ssp(size_t *);
 
 static struct dso *head, *tail, *libc;
 static char *env_path, *sys_path, *r_path;
@@ -633,6 +632,8 @@ void *__dynlink(int argc, char **argv)
        debug.state = 0;
        _dl_debug_state();
 
+       if (ssp_used) __init_ssp(auxv);
+
        do_init_fini(tail);
 
        if (!rtld_used) {
@@ -641,8 +642,6 @@ void *__dynlink(int argc, char **argv)
                reclaim((void *)builtin_dsos, 0, sizeof builtin_dsos);
        }
 
-       if (ssp_used) __pthread_self_init();
-
        errno = 0;
        return (void *)aux[AT_ENTRY];
 }