]> git.ipfire.org Git - thirdparty/git.git/commit
dir-iterator: prevent top-level symlinks without FOLLOW_SYMLINKS
authorTaylor Blau <me@ttaylorr.com>
Wed, 25 Jan 2023 00:43:51 +0000 (19:43 -0500)
committerJunio C Hamano <gitster@pobox.com>
Wed, 25 Jan 2023 00:52:16 +0000 (16:52 -0800)
commitbffc762f87ae8d18c6001bf0044a76004245754c
tree94ef671b634c0516c9643aa5e685ca31c0793453
parentcf8f6ce02a13f4d1979a53241afbee15a293fce9
dir-iterator: prevent top-level symlinks without FOLLOW_SYMLINKS

When using the dir_iterator API, we first stat(2) the base path, and
then use that as a starting point to enumerate the directory's contents.

If the directory contains symbolic links, we will immediately die() upon
encountering them without the `FOLLOW_SYMLINKS` flag. The same is not
true when resolving the top-level directory, though.

As explained in a previous commit, this oversight in 6f054f9fb3
(builtin/clone.c: disallow `--local` clones with symlinks, 2022-07-28)
can be used as an attack vector to include arbitrary files on a victim's
filesystem from outside of the repository.

Prevent resolving top-level symlinks unless the FOLLOW_SYMLINKS flag is
given, which will cause clones of a repository with a symlink'd
"$GIT_DIR/objects" directory to fail.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
dir-iterator.c
dir-iterator.h
t/t0066-dir-iterator.sh
t/t5604-clone-reference.sh