]> gitweb.michael.orlitzky.com - apply-default-acl.git/commit
Replace most path usage with file descriptors.
authorMichael Orlitzky <michael@orlitzky.com>
Fri, 23 Feb 2018 21:11:08 +0000 (16:11 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Mon, 26 Feb 2018 19:10:14 +0000 (14:10 -0500)
commit8a38e0e6e0d8a4247933dd11812062c3590451dd
treec11a588611cd5a160c6ce1790594ca069694987e
parent6d396c52c731f260cc261e26c75034bd5007f0b0
Replace most path usage with file descriptors.

Before this commit, we were passing around paths everywhere to specify
the targets of operations. This is not optimal from a security
standpoint: the best we can do to avoid following hard links is to
check whether or not a given file has more than one name. There is a
race condition inherent in that approach -- between when you stat the
file and when you use it, the number of names may change -- but using
paths makes that window larger than it has to be. There's no guarantee
that a path used at the bottom of apply_default_acl() will refer to
the same file that we called stat() on at the top of the function.

To work around that, most of the path handling functions have been
replaced with versions that use file descriptors. Now we are able to
stat() our file descriptor immediately after opening it, and the
descriptor itself will always refer to the same file. There's still
the smallest of windows for an exploit, but this makes it much safer
to call apply_default_acl() when there may be hard links present.
src/apply-default-acl.c