moby/pkg
Stephen Benjamin 89dd10b06e archive: fix race condition in cmdStream
There is a race condition in pkg/archive when using `cmd.Start` for pigz
and xz where the `*bufio.Reader` could be returned to the pool while the
command is still writing to it, and then picked up and used by a new
command.

The command is wrapped in a `CommandContext` where the process will be
killed when the context is cancelled, however this is not instantaneous,
so there's a brief window while the command is still running but the
`*bufio.Reader` was already returned to the pool.

wrapReadCloser calls `cancel()`, and then `readBuf.Close()` which
eventually returns the buffer to the pool. However, because cmdStream
runs `cmd.Wait` in a go routine that we never wait for to finish, it is
not safe to return the reader to the pool yet.  We need to ensure we
wait for `cmd.Wait` to finish!

Signed-off-by: Stephen Benjamin <stephen@redhat.com>
2019-09-11 07:37:14 -04:00
..
aaparser Add canonical import comment 2018-02-05 16:51:57 -05:00
archive archive: fix race condition in cmdStream 2019-09-11 07:37:14 -04:00
authorization Format code with gofmt -s from go-1.11beta1 2018-09-06 15:24:16 -07:00
broadcaster Various code-cleanup 2018-05-23 17:50:54 +02:00
capabilities Add more import comments 2019-04-10 16:59:33 +02:00
chrootarchive Allow system.MkDirAll() to be used as drop-in for os.MkDirAll() 2019-08-08 15:05:49 +02:00
containerfs Allow system.MkDirAll() to be used as drop-in for os.MkDirAll() 2019-08-08 15:05:49 +02:00
devicemapper devicemapper: remove unused errors 2019-08-07 12:27:44 +02:00
directory Extract volume interaction to a volumes service 2018-05-25 14:21:07 -04:00
discovery Add canonical import comment 2018-02-05 16:51:57 -05:00
dmesg Use Klogctl from x/sys/unix to read Linux kernel log 2019-08-22 08:25:13 +02:00
filenotify Make sure timers are stopped after use. 2019-01-16 14:32:53 -08:00
fileutils Remove duplicated words in pkg files 2018-10-05 22:32:14 +08:00
fsutils Add canonical import comment 2018-02-05 16:51:57 -05:00
homedir allow running dockerd in an unprivileged user namespace (rootless mode) 2019-02-04 00:24:27 +09:00
idtools Allow system.MkDirAll() to be used as drop-in for os.MkDirAll() 2019-08-08 15:05:49 +02:00
ioutils Fixed the inconsistence and also a potential data race in pkg/ioutils/bytespipe.go: bp.closeErr is read/write 8 times; 7 out of 8 times it is protected by bp.mu.Lock(); 1 out of 8 times it is read without a Lock 2019-07-01 11:38:38 -07:00
jsonmessage replace gotty with aec, since gotty hasn't been updated since very long time and aec can drop in for gotty 2019-01-16 22:10:39 +05:30
locker Add canonical import comment 2018-02-05 16:51:57 -05:00
longpath Add canonical import comment 2018-02-05 16:51:57 -05:00
loopback Use correct LOOP_CTL_GET_FREE API in pkg/loopback 2019-08-27 06:22:10 -07:00
mount Fix to gofmt/goimports errors 2019-05-28 20:32:27 +03:00
namesgenerator Remove cocky from names-generator 2019-07-02 16:51:11 +00:00
parsers Remove *_solaris.go files 2019-09-02 10:15:15 +02:00
pidfile Allow system.MkDirAll() to be used as drop-in for os.MkDirAll() 2019-08-08 15:05:49 +02:00
platform Add canonical import comment 2018-02-05 16:51:57 -05:00
plugingetter Move plugin client to separate interface 2018-05-30 15:22:10 -04:00
plugins Merge pull request #39422 from lemrouch/35876-workaround 2019-07-22 10:21:50 -07:00
pools Update tests to use gotest.tools 👼 2018-06-13 09:04:30 +02:00
progress pkg/progress: work around closing closed channel panic 2018-09-06 20:20:12 +00:00
pubsub Make sure timers are stopped after use. 2019-01-16 14:32:53 -08:00
reexec fix build on OpenBSD by defining Self() 2018-06-16 19:09:04 +02:00
signal pkg/signal.TestTrap: use a subtest 2019-01-12 18:04:44 +01:00
stdcopy Merge pull request #37088 from ohbarye/fix-typos-duplicated-the 2018-05-19 20:57:47 +02:00
streamformatter Remove duplicated words in pkg files 2018-10-05 22:32:14 +08:00
stringid Entropy cannot be saved 2019-06-07 11:54:45 +01:00
symlink Update LICENSE 2018-09-12 14:27:53 +01:00
sysinfo Use functions from x/sys/unix to get number of CPUs on Linux 2019-06-18 19:26:56 +02:00
system Remove *_solaris.go files 2019-09-02 10:15:15 +02:00
tailfile Use assert.NilError() instead of assert.Assert() 2019-01-21 13:16:02 +01:00
tarsum pkg/tarsum: fix unit test for Go 1.11+ 2018-07-19 10:38:45 +03:00
term Fix #28814 2018-08-07 10:20:13 +02:00
truncindex Entropy cannot be saved 2019-06-07 11:54:45 +01:00
urlutil Be explicit about github.com prefix being a legacy feature 2018-05-30 11:09:14 +02:00
useragent Add canonical import comment 2018-02-05 16:51:57 -05:00
README.md Rename a few docker to moby 2017-10-25 13:56:12 +02:00

pkg/ is a collection of utility packages used by the Moby project without being specific to its internals.

Utility packages are kept separate from the moby core codebase to keep it as small and concise as possible. If some utilities grow larger and their APIs stabilize, they may be moved to their own repository under the Moby organization, to facilitate re-use by other projects. However that is not the priority.

The directory pkg is named after the same directory in the camlistore project. Since Brad is a core Go maintainer, we thought it made sense to copy his methods for organizing Go code :) Thanks Brad!

Because utility packages are small and neatly separated from the rest of the codebase, they are a good place to start for aspiring maintainers and contributors. Get in touch if you want to help maintain them!