Package: fakechroot
Version: 2.5-1.1.20070212-6
Severity: important

(Ignore the version, it's my local build with other fixes, the bug is
clear from reading the source...)

libfakechroot.c, readlink() implementation, in particular the
end-of-buffer handling, can truncate links; coreutils readlink exposes
this because it starts out passing in a bufsiz of 128, and it's easy
to have a FAKECHROOT_BASE nearly that deep...

The fix I propose is to 
  1. call next_readlink with FAKECHROOT_MAXPATH-1, not bufsiz
  2. check strlen(tmpptr) against bufsiz and return -1 if it won't fit
  3. use strncpy so as not to overrun the input buffer
    3a. return the length of the input, since the output copy might
        not have a null at the end.

Following is a rough trace of demonstrating the truncation, using
readlink from coreutils 5.2.1-2, and note that "readlink x130" gives
only 27 characters of the link, instead of 30.


wildcat$ fakeroot fakechroot
wildcat# env | grep FAKE
FAKECHROOT=true
FAKEROOTKEY=1024906132
FAKECHROOT_VERSION=2.5
FAKED_MODE=unknown-is-root
wildcat# mkdir 
/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
wildcat# echo -n 
/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
 | wc -c
100
wildcat# export 
FAKECHROOT_BASE=/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
wildcat# cd 
/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
wildcat# unset FAKECHROOT_BASE
wildcat# pwd
/
wildcat# cd /
wildcat# ls
afs/  boot/   dev/  home/    lib/         media/  opt/   root/  srv/  tmp/  var/
bin/  cdrom/  etc/  initrd/  lost+found/  mnt/    proc/  sbin/  sys/  usr/  
vmlinuz@
wildcat# pwd
/
wildcat# ln -s 
/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789/123456789
 
/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789/x110
wildcat# ln -s 
/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789/1234567890123456789
 
/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789/x120
wildcat# ln -s 
/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789/12345678901234567890123456789
 
/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789/x130
wildcat# readlink 
/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789/x130
/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789/12345678901234567890123456789
wildcat# readlink 
/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789/x130
 | wc -c
131
wildcat# cd 
/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
wildcat# export 
FAKECHROOT_BASE=/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
wildcat# pwd
/tmp/56789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
wildcat# echo *
bin x110 x120 x130
wildcat# readlink x130
/123456789012345678901234567
wildcat# readlink x120
/1234567890123456789
wildcat# readlink x110
/123456789


-- System Information:
Debian Release: 3.1
Architecture: i386 (i686)
Kernel: Linux 2.6.15-mc2
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)

Versions of packages fakechroot depends on:
ii  libc6                 2.3.2.ds1-22sarge4 GNU C Library: Shared libraries an

-- debconf-show failed


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to