mirror of
https://github.com/NixOS/nix
synced 2025-06-27 00:11:17 +02:00
libstore: open build directory as a dirfd as well
We now keep around a proper AutoCloseFD around the temporary directory which we plan to use for openat operations and avoiding the build directory being swapped out while we are doing something else. Change-Id: I18d387b0f123ebf2d20c6405cd47ebadc5505f2a Signed-off-by: Raito Bezarius <raito@lix.systems>
This commit is contained in:
parent
7226a116a0
commit
6a5b6ad3b7
1 changed files with 12 additions and 0 deletions
|
@ -95,6 +95,11 @@ protected:
|
||||||
*/
|
*/
|
||||||
Path topTmpDir;
|
Path topTmpDir;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The file descriptor of the temporary directory.
|
||||||
|
*/
|
||||||
|
AutoCloseFD tmpDirFd;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The sort of derivation we are building.
|
* The sort of derivation we are building.
|
||||||
*
|
*
|
||||||
|
@ -710,6 +715,13 @@ void DerivationBuilderImpl::startBuilder()
|
||||||
topTmpDir = createTempDir(settings.buildDir.get().value_or(""), "nix-build-" + std::string(drvPath.name()), 0700);
|
topTmpDir = createTempDir(settings.buildDir.get().value_or(""), "nix-build-" + std::string(drvPath.name()), 0700);
|
||||||
setBuildTmpDir();
|
setBuildTmpDir();
|
||||||
assert(!tmpDir.empty());
|
assert(!tmpDir.empty());
|
||||||
|
|
||||||
|
/* The TOCTOU between the previous mkdir call and this open call is unavoidable due to
|
||||||
|
POSIX semantics.*/
|
||||||
|
tmpDirFd = AutoCloseFD{open(tmpDir.c_str(), O_RDONLY | O_NOFOLLOW | O_DIRECTORY)};
|
||||||
|
if (!tmpDirFd)
|
||||||
|
throw SysError("failed to open the build temporary directory descriptor '%1%'", tmpDir);
|
||||||
|
|
||||||
chownToBuilder(tmpDir);
|
chownToBuilder(tmpDir);
|
||||||
|
|
||||||
for (auto & [outputName, status] : initialOutputs) {
|
for (auto & [outputName, status] : initialOutputs) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue