Bug#577706: newenvp buffer overrun in execve()

2010-09-20 Thread Piotr Roszatycki
fixed 577706 2.10
thanks

This bug was resolved in 2.10 release. Thank you!

2010/4/13 Tomi Belan tomi.be...@gmail.com

 Package: fakechroot
 Version: 2.9

 Programs under fakechroot can crash in execve() if all of the
 FAKECHROOT, FAKECHROOT_BASE, FAKECHROOT_VERSION,
 FAKECHROOT_EXCLUDE_PATH, LD_LIBRARY_PATH, LD_PRELOAD variables
 are set. An example of a program using execve() is gcc. This means
 that unless FAKECHROOT_EXCLUDE_PATH (or another one of the variables
 above) is unset, using gcc in fakechroot is impossible.

 How to test:
 $ export FAKECHROOT_EXCLUDE_PATH=
 $ echo  | fakechroot chroot / gcc -x c -

 What I expected to see (because / isn't writable):
 /usr/bin/ld: cannot open output file a.out: Permission denied
 collect2: ld returned 1 exit status

 What I saw instead:
 *** glibc detected *** gcc: corrupted double-linked list: 0x08906190 ***
 === Backtrace: =
 /lib/libc.so.6(+0x6bb61)[0xb77b7b61]
 /lib/libc.so.6(+0x6d411)[0xb77b9411]
 /lib/libc.so.6(cfree+0x6d)[0xb77bc4ad]
 gcc[0x805e08e]
 gcc[0x8054b3b]
 /lib/libc.so.6(__libc_start_main+0xe6)[0xb7762b86]
 gcc[0x8049661]
 === Memory map: 
 08048000-08079000 r-xp  08:03 54690299   /usr/bin/gcc
 08079000-0807b000 rw-p 0003 08:03 54690299   /usr/bin/gcc
 088ff000-0892 rw-p  00:00 0  [heap]
 b740-b7421000 rw-p  00:00 0
 b7421000-b750 ---p  00:00 0
 b7551000-b756d000 r-xp  08:03 4486578/usr/lib/libgcc_s.so.1
 b756d000-b756e000 rw-p 0001c000 08:03 4486578/usr/lib/libgcc_s.so.1
 b756e000-b773b000 r--p  08:03 54577410
 /usr/lib/locale/locale-archive
 b773b000-b7745000 r-xp  08:03 4303501/lib/
 libnss_files-2.11.1.so
 b7745000-b7746000 r--p 9000 08:03 4303501/lib/
 libnss_files-2.11.1.so
 b7746000-b7747000 rw-p a000 08:03 4303501/lib/
 libnss_files-2.11.1.so
 b7747000-b7748000 rw-p  00:00 0
 b7748000-b774a000 r-xp  08:03 4328458/lib/libdl-2.11.1.so
 b774a000-b774b000 r--p 1000 08:03 4328458/lib/libdl-2.11.1.so
 b774b000-b774c000 rw-p 2000 08:03 4328458/lib/libdl-2.11.1.so
 b774c000-b788d000 r-xp  08:03 4303498/lib/libc-2.11.1.so
 b788d000-b788f000 r--p 0014 08:03 4303498/lib/libc-2.11.1.so
 b788f000-b789 rw-p 00142000 08:03 4303498/lib/libc-2.11.1.so
 b789-b7893000 rw-p  00:00 0
 b7893000-b789e000 r-xp  08:03 17009921
 /usr/lib/libfakeroot/fakechroot/libfakechroot.so
 b789e000-b789f000 rw-p a000 08:03 17009921
 /usr/lib/libfakeroot/fakechroot/libfakechroot.so
 b789f000-b78a rw-p  00:00 0
 b78a-b78a1000 r-xp  00:00 0  [vdso]
 b78a1000-b78bd000 r-xp  08:03 4330037/lib/ld-2.11.1.so
 b78bd000-b78be000 r--p 0001b000 08:03 4330037/lib/ld-2.11.1.so
 b78be000-b78bf000 rw-p 0001c000 08:03 4330037/lib/ld-2.11.1.so
 bffc9000-bffde000 rw-p  00:00 0  [stack]
 Aborted

 gdb /bin/true crashes similarly.

 The bug is caused by the newenvp array overflowing in execve() and can
 be fixed by replacing i with (i+1) in execve()'s realloc() call.

 However, I found out that the bug is already fixed in SVN, which makes
 me concerned that the fix wasn't released yet. If it's because the
 trunk is unstable at the moment, please consider doing a separate
 bugfix release. Building software is one of the main uses of
 fakechroot, and being unable to use gcc (together with
 FAKECHROOT_EXCLUDE_PATH) seriously reduces its functionality.

 I am using fakechroot-2.9 compiled from source on ArchLinux.



-- 
 .''`.Piotr Roszatycki
: :' :mailto:piotr.roszaty...@gmail.com
`. `' mailto:dex...@debian.org
  `-


Bug#577706: newenvp buffer overrun in execve()

2010-04-13 Thread Tomi Belan
Package: fakechroot
Version: 2.9

Programs under fakechroot can crash in execve() if all of the
FAKECHROOT, FAKECHROOT_BASE, FAKECHROOT_VERSION,
FAKECHROOT_EXCLUDE_PATH, LD_LIBRARY_PATH, LD_PRELOAD variables
are set. An example of a program using execve() is gcc. This means
that unless FAKECHROOT_EXCLUDE_PATH (or another one of the variables
above) is unset, using gcc in fakechroot is impossible.

How to test:
$ export FAKECHROOT_EXCLUDE_PATH=
$ echo  | fakechroot chroot / gcc -x c -

What I expected to see (because / isn't writable):
/usr/bin/ld: cannot open output file a.out: Permission denied
collect2: ld returned 1 exit status

What I saw instead:
*** glibc detected *** gcc: corrupted double-linked list: 0x08906190 ***
=== Backtrace: =
/lib/libc.so.6(+0x6bb61)[0xb77b7b61]
/lib/libc.so.6(+0x6d411)[0xb77b9411]
/lib/libc.so.6(cfree+0x6d)[0xb77bc4ad]
gcc[0x805e08e]
gcc[0x8054b3b]
/lib/libc.so.6(__libc_start_main+0xe6)[0xb7762b86]
gcc[0x8049661]
=== Memory map: 
08048000-08079000 r-xp  08:03 54690299   /usr/bin/gcc
08079000-0807b000 rw-p 0003 08:03 54690299   /usr/bin/gcc
088ff000-0892 rw-p  00:00 0  [heap]
b740-b7421000 rw-p  00:00 0
b7421000-b750 ---p  00:00 0
b7551000-b756d000 r-xp  08:03 4486578/usr/lib/libgcc_s.so.1
b756d000-b756e000 rw-p 0001c000 08:03 4486578/usr/lib/libgcc_s.so.1
b756e000-b773b000 r--p  08:03 54577410   /usr/lib/locale/locale-archive
b773b000-b7745000 r-xp  08:03 4303501/lib/libnss_files-2.11.1.so
b7745000-b7746000 r--p 9000 08:03 4303501/lib/libnss_files-2.11.1.so
b7746000-b7747000 rw-p a000 08:03 4303501/lib/libnss_files-2.11.1.so
b7747000-b7748000 rw-p  00:00 0
b7748000-b774a000 r-xp  08:03 4328458/lib/libdl-2.11.1.so
b774a000-b774b000 r--p 1000 08:03 4328458/lib/libdl-2.11.1.so
b774b000-b774c000 rw-p 2000 08:03 4328458/lib/libdl-2.11.1.so
b774c000-b788d000 r-xp  08:03 4303498/lib/libc-2.11.1.so
b788d000-b788f000 r--p 0014 08:03 4303498/lib/libc-2.11.1.so
b788f000-b789 rw-p 00142000 08:03 4303498/lib/libc-2.11.1.so
b789-b7893000 rw-p  00:00 0
b7893000-b789e000 r-xp  08:03 17009921
/usr/lib/libfakeroot/fakechroot/libfakechroot.so
b789e000-b789f000 rw-p a000 08:03 17009921
/usr/lib/libfakeroot/fakechroot/libfakechroot.so
b789f000-b78a rw-p  00:00 0
b78a-b78a1000 r-xp  00:00 0  [vdso]
b78a1000-b78bd000 r-xp  08:03 4330037/lib/ld-2.11.1.so
b78bd000-b78be000 r--p 0001b000 08:03 4330037/lib/ld-2.11.1.so
b78be000-b78bf000 rw-p 0001c000 08:03 4330037/lib/ld-2.11.1.so
bffc9000-bffde000 rw-p  00:00 0  [stack]
Aborted

gdb /bin/true crashes similarly.

The bug is caused by the newenvp array overflowing in execve() and can
be fixed by replacing i with (i+1) in execve()'s realloc() call.

However, I found out that the bug is already fixed in SVN, which makes
me concerned that the fix wasn't released yet. If it's because the
trunk is unstable at the moment, please consider doing a separate
bugfix release. Building software is one of the main uses of
fakechroot, and being unable to use gcc (together with
FAKECHROOT_EXCLUDE_PATH) seriously reduces its functionality.

I am using fakechroot-2.9 compiled from source on ArchLinux.



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org