proot-me / proot

chroot, mount --bind, and binfmt_misc without privilege/setup for Linux
https://proot-me.github.io
GNU General Public License v2.0
1.96k stars 369 forks source link

proot exits with proot: ./path/path.c:547: compare_paths2: Assertion `length2 > 0' failed #366

Open nilsrennebarth opened 11 months ago

nilsrennebarth commented 11 months ago

Steps to Reproduce the Problem

  1. Create a standard debian bookworm rootfs
  2. Enter the rootfs via proot by proot -0 -r OUT/ROOT -w / -b /proc/ -b /etc/resolv.conf -b /etc/hosts -b /dev/ /bin/bash
  3. Run the command systemd-tmpfiles --create debian.conf

Specifications

Remarks

I tried editing the debian.conf file, and found that entries starting with an L provoke the assertion failure. According to the manpage this should just create a symlink if it does not exist yet. Creating the same links by /usr/bin/ln works however.

What I tried is to to install various packages, among them systemd in a proot made chroot, and the systemd postinst failed with the said assertion failure.

nilsrennebarth commented 11 months ago

I think I know what the problem is: The readlinkat(2) manpage states:

Since Linux 2.6.39, pathname can be an empty string, in which case the call operates on the symbolic link referred to by dirfd

This case appears not to be supported by proot when I read the source correctly.

alexhenrie commented 7 months ago

Duplicate of #182, see https://github.com/proot-me/proot/issues/182#issuecomment-886014104 in particular