Package: fakeroot
Version: 1.29-1
Severity: important

Control: affects -1 + mmdebstrap

Hi,

glibc 2.34 introduced several new functions on 32 bit arches which are
used by coreutils since 9.1 which was built with glibc 2.34. Since these
new functions are not wrapped by fakeroot, ownership information will be
wrong on 32 bit arches like i386 or armhf. To show what should happen,
lets run this on amd64:

    mmdebstrap --arch=amd64 --include=fakeroot,adduser --variant=apt \
        --customize-hook='chroot "$1" adduser --gecos user --disabled-password 
user' \
        --customize-hook='chroot "$1" runuser -u user -- /bin/bash' \
        unstable /dev/null
    [...]
    user@hoothoot:/$ whoami
    user
    user@hoothoot:/$ fakeroot /bin/bash
    root@hoothoot:/# whoami
    root
    root@hoothoot:/# cd /tmp/
    root@hoothoot:/tmp# echo foo > bar
    root@hoothoot:/tmp# echo baz > blub
    root@hoothoot:/tmp# chown --reference=/tmp/bar blub
    root@hoothoot:/tmp# ls -lha bar blub
    -rw-r--r-- 1 root root 4 Nov  1 18:39 bar
    -rw-r--r-- 1 root root 4 Nov  1 18:39 blub

Success! Both files are owned by the (fake) root user. And now lets run
it on i386:

    $ mmdebstrap --arch=i386 --include=fakeroot,adduser --variant=apt \
        --customize-hook='chroot "$1" adduser --gecos user --disabled-password 
user' \
        --customize-hook='chroot "$1" runuser -u user -- /bin/bash' \
        unstable /dev/null
    [...]
    user@hoothoot:/$ whoami
    user
    user@hoothoot:/$ fakeroot /bin/bash
    root@hoothoot:/# whoami
    root
    root@hoothoot:/# cd /tmp/
    root@hoothoot:/tmp# echo foo > bar
    root@hoothoot:/tmp# echo baz > blub
    root@hoothoot:/tmp# chown --reference=/tmp/bar blub
    root@hoothoot:/tmp# ls -lha bar blub
    -rw-r--r-- 1 root root 4 Nov  1 18:26 bar
    -rw-r--r-- 1 user user 4 Nov  1 18:26 blub

The file blub is not owned by the fake root user but by the outer user
"user". This is incorrect. When investigating what is going on I found
that the "chown" command calls __stat64_time64 on i386 which will return
the normal user "user" which suggests to me that the function is not
wrapped by fakeroot even though it should. Other functions that might be
interesting from glibc 2.34 and might need wrapping are
__fstatat64_time64 and __lstat64_time64.

This is breaking my package mmdebstrap.

Thanks!

cheers, josch

Reply via email to