diff options
author | Denys Vlasenko | 2017-07-22 02:25:47 +0200 |
---|---|---|
committer | Denys Vlasenko | 2017-07-22 02:25:47 +0200 |
commit | bbf17bbf326c7157ca237b9659472ddf7626e68d (patch) | |
tree | 95450d50a1931a6b13f941cdf3deb036506148df | |
parent | ef0366eb4f02bb0cda359b977fdbdfa7c145f76f (diff) | |
download | busybox-bbf17bbf326c7157ca237b9659472ddf7626e68d.zip busybox-bbf17bbf326c7157ca237b9659472ddf7626e68d.tar.gz |
crond: do not assume setenv() does not leak
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | miscutils/crond.c | 6 | ||||
-rw-r--r-- | scripts/test_setenv_leak.c | 18 |
2 files changed, 21 insertions, 3 deletions
diff --git a/miscutils/crond.c b/miscutils/crond.c index cf33230..5ae0ff0 100644 --- a/miscutils/crond.c +++ b/miscutils/crond.c @@ -79,9 +79,9 @@ #include "common_bufsiz.h" #include <syslog.h> -/* glibc frees previous setenv'ed value when we do next setenv() - * of the same variable. uclibc does not do this! */ -#if (defined(__GLIBC__) && !defined(__UCLIBC__)) /* || OTHER_SAFE_LIBC... */ +#if 0 +/* If libc tracks and reuses setenv()-allocated memory, ok to set this to 0 */ +/* Neither glibc nor uclibc do that! */ # define SETENV_LEAKS 0 #else # define SETENV_LEAKS 1 diff --git a/scripts/test_setenv_leak.c b/scripts/test_setenv_leak.c new file mode 100644 index 0000000..e51722c --- /dev/null +++ b/scripts/test_setenv_leak.c @@ -0,0 +1,18 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +int main(int argc, char **argv) +{ + char buf[256]; + + int i = argv[1] ? atoi(argv[1]) : 999999; + while (--i > 0) { + sprintf(buf, "%d", i); + setenv("VAR", buf, 1); + } + printf("Check size of [heap] mapping:\n"); + freopen("/proc/self/maps", "r", stdin); + while (fgets(buf, sizeof(buf), stdin)) + fputs(buf, stdout); + return 0; +} |