[PATCH v2] tar: regression with hardlinked symlinks
Harald van Dijk
harald at gigawatt.nl
Sun Apr 15 18:25:54 UTC 2018
ping
FWIW, this problem actually came up with an archive containing a fsroot
including a busybox installation again, but this time, the archive was
created after a deduplication step had hardlinked identical files and
symlinks.
On 4/1/18 1:37 PM, Harald van Dijk wrote:
> When the creation of symlinks got delayed until after all other files
> had been extracted, that didn't take into account that the archive may
> contain hardlinks to those symlinks. The extraction of those hardlinks
> did not get delayed so would fail.
>
> This patch generalises the symlink_placeholders approach to a
> link_placeholders which allows delaying the extraction of hardlinks too.
> It changes the order in which delayed links are added to ensure that a
> hardlink to an earlier symlink will create the symlink first.
>
> It delays all hardlinks without regards to the target. It may be
> desirable to instead tweak it to determine whether the link target is a
> delayed symlink, but that is a cost/benefits tradeoff. As hardlinks are
> relatively rare, I guess the benefit of such an optimisation would be
> small, but I am not really qualified to make that determination.
>
> Test case:
>
> mkdir dir
> >dir/a
> ln -s ../dir/a dir/b
> ln dir/b dir/c
> mkdir new
> tar cf - dir/* | tar -C new -xf -
>
> busybox ad4e9613:
>
> tar: can't create hardlink 'dir/c' to 'dir/b': No such file or directory
>
> busybox ad4e9613 + patch:
>
> No error output. The archive is successfully extracted.
>
> The security hole that the delayed extraction of symlinks was meant to
> prevent should not be re-introduced by the delayed creation of
> hardlinks: the parent components of archive entries still get created
> first, so if an archive contains a file "exploit", a symlink "parent ->
> ..", and a hardlink "parent/exploit -> exploit", the presence of that
> hardlink causes "parent" to be immediately created as a regular
> directory. The symlink creation "parent -> .." will therefore fail. This
> could use careful review though.
>
> Cheers,
> Harald van Dijk
More information about the busybox
mailing list