← Commit list

bbf17bbf3

Denys Vlasenko
Denys Vlasenko
2017-07-22
SUCCESS Duration: 142s

Subject

crond: do not assume setenv() does not leak

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

miscutils/crond.c+3 -3
@@ -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
scripts/test_setenv_leak.c+18 -0
@@ -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;
+}