diff options
| author | Jack Nagel | 2013-07-27 23:53:53 -0500 |
|---|---|---|
| committer | Jack Nagel | 2013-07-27 23:57:35 -0500 |
| commit | bac6533d5cc5f5fa05d7bdfdbdeaa29a55488bc8 (patch) | |
| tree | 6c2c1d6911ac645fa4be9534e4a467983e3b34c2 | |
| parent | 6242a6d7fa0b9a928b8bd53560c058f7b876eae4 (diff) | |
| download | brew-bac6533d5cc5f5fa05d7bdfdbdeaa29a55488bc8.tar.bz2 | |
Set close-on-exec on lock file descriptors
The formula locks used by the installer and commands like link and
unlink are backed by open files and flock(). The open file descriptors
are thus leaked to any subprocesses. This can result in weird behavior
in programs spawned from formula that do not expect to inherit these
descriptors.
Fix this by setting close-on-exec on the lock file descriptors.
Fixes Homebrew/homebrew#21486.
| -rw-r--r-- | Library/Homebrew/formula_lock.rb | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/Library/Homebrew/formula_lock.rb b/Library/Homebrew/formula_lock.rb index 3b3807fd8..0eeb27c84 100644 --- a/Library/Homebrew/formula_lock.rb +++ b/Library/Homebrew/formula_lock.rb @@ -1,3 +1,5 @@ +require 'fcntl' + class FormulaLock LOCKDIR = HOMEBREW_CACHE_FORMULA @@ -33,7 +35,9 @@ class FormulaLock def get_or_create_lockfile if @lockfile.nil? || @lockfile.closed? - @path.open(File::RDWR | File::CREAT) + @lockfile = @path.open(File::RDWR | File::CREAT) + @lockfile.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) + @lockfile else @lockfile end |
