We received a bug report about broken symlinks being generated from a
cpio archive unpacked using the "dracut-initramfs-restore" utility.

https://bugs.gentoo.org/700020

https://github.com/dracutdevs/dracut/blob/ff2043fb4244b0ba740724921e9667aad19f262a/dracut-initramfs-restore.sh#L28

This shell script unpacks an initramfs image to /run/initramfs to be
used when shutting down a Linux system.

If the initramfs image contains any symlinks that refer to a parent
directory (..), cpio --no-absolute-filenames strips the leading ".."
and generates a symlink that points to the wrong place. For example,
say we have the following structure in a cpio archive:

./bin/systemctl (regular file)
./sbin/reboot -> ../bin/systemctl (symlink)

cpio-2.12 extracts this correctly. With cpio-2.13, we end up with this:

./bin/systemctl
./sbin/reboot -> bin/systemctl (broken symlink)

As well, with cpio-2.13, the following message is output:

"Removing leading `../' from hard link targets"

We think this may be an unintended consequence of a patch that was
applied to address CVE-2015-1197. Was this change in behavior for
relative symlinks intended, or is this a bug?

--
Mike Gilbert

Reply via email to