]> sourceware.org Git - glibc.git/commit - ChangeLog
setenv fix memory leak when setting large, duplicate string (BZ #17658)
authorEric Biggers <ebiggers3@gmail.com>
Wed, 7 Jan 2015 06:40:52 +0000 (12:10 +0530)
committerSiddhesh Poyarekar <siddhesh@redhat.com>
Wed, 7 Jan 2015 06:40:52 +0000 (12:10 +0530)
commitd5b1c5ed8bd9515505d4177f105c19ea375106ae
tree5e7164983b8a3e4f3a16e8069495a46c8c33d7b3
parentfb87ee96d7dd0714d52004e4676629f8d9db732f
setenv fix memory leak when setting large, duplicate string (BZ #17658)

glibc maintains a binary tree of environment strings it malloc()ed
itself.  However, it's possible for it to malloc() a string, then find
that an identical string is already in the tree.  In this case, the
memory is leaked and is not freed if the application later calls
__libc_freeres().  Fix this by freeing 'new_value' when it's unneeded.

Test case:
#include <stdlib.h>
#include <string.h>

int main()
{
char *p = calloc(100000, 1);
memset(p, 'A', 99999);
setenv("TESTVAR", p, 1);
setenv("TESTVAR", p, 1);
free(p);
}

Leak that was reported by valgrind:
100,008 bytes in 1 blocks are definitely lost in loss record 1 of 1
   at 0x4C29F90: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x4E6B3D4: __add_to_environ (setenv.c:176)
   by 0x4C31B8F: setenv (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x400642: main (in /mnt/tmpfs/a.out)
ChangeLog
NEWS
stdlib/setenv.c
This page took 0.044857 seconds and 5 git commands to generate.