diff options
author | 2003-02-28 18:05:48 +0000 | |
---|---|---|
committer | 2003-02-28 18:05:48 +0000 | |
commit | 604855a4256da88d2dcebbbe0734b4244737a41c (patch) | |
tree | 422cd7963c6e1600d8142e8c71bf70eb7556fccf /lib/csu/sparc | |
parent | Fix double Debug() usage, for instance, Debug(DPARS|DEXT...) (diff) | |
download | wireguard-openbsd-604855a4256da88d2dcebbbe0734b4244737a41c.tar.xz wireguard-openbsd-604855a4256da88d2dcebbbe0734b4244737a41c.zip |
copy basename of argv[0] to bss for __progname, so that large stack smash
does not make propolice reporting ineffective; millert miod ok
Diffstat (limited to 'lib/csu/sparc')
-rw-r--r-- | lib/csu/sparc/crt0.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/csu/sparc/crt0.c b/lib/csu/sparc/crt0.c index 3d5a004eb65..6cc0c37dad2 100644 --- a/lib/csu/sparc/crt0.c +++ b/lib/csu/sparc/crt0.c @@ -36,6 +36,7 @@ */ #include <stdlib.h> +#include <limits.h> void ___start(int, char **, char **, void (*cleanup)(void), void *); @@ -62,6 +63,7 @@ _start: char **environ; char *__progname = ""; +char __progname_storage[NAME_MAX+1]; #ifdef MCRT0 extern void monstartup(u_long, u_long); @@ -75,6 +77,8 @@ void ___start(int argc, char **argv, char **envp, void (*cleanup)(void), void *obj) { + char *s; + environ = envp; if ((__progname = argv[0]) != NULL) { /* NULL ptr if argc = 0 */ @@ -82,6 +86,11 @@ ___start(int argc, char **argv, char **envp, void (*cleanup)(void), __progname = argv[0]; else __progname++; + for (s = __progname_storage; *__progname && + s < &__progname_storage[sizeof __progname_storage - 1]; ) + *s++ = *__progname++; + *s = '\0'; + __progname = __progname_storage; } #ifdef MCRT0 |