moby/libnetwork/portmapper
Cory Snider 1f22b15030 Lock OS threads when exec'ing with Pdeathsig
On Linux, when (os/exec.Cmd).SysProcAttr.Pdeathsig is set, the signal
will be sent to the process when the OS thread on which cmd.Start() was
executed dies. The runtime terminates an OS thread when a goroutine
exits after being wired to the thread with runtime.LockOSThread(). If
other goroutines are allowed to be scheduled onto a thread which called
cmd.Start(), an unrelated goroutine could cause the thread to be
terminated and prematurely signal the command. See
https://github.com/golang/go/issues/27505 for more information.

Prevent started subprocesses with Pdeathsig from getting signaled
prematurely by wiring the starting goroutine to the OS thread until the
subprocess has exited. No other goroutines can be scheduled onto a
locked thread so it will remain alive until unlocked or the daemon
process exits.

Signed-off-by: Cory Snider <csnider@mirantis.com>
2022-10-05 12:18:03 -04:00
..
mapper.go portmapper: minor linting fix, and comment purpose of newProxy variable 2021-06-17 10:27:31 +02:00
mapper_linux.go Fix libnetwork imports 2021-06-01 21:51:23 +00:00
mapper_linux_test.go libnetwork: remove unused "testutils" imports 2021-08-18 14:20:37 +02:00
mapper_windows.go Fix libnetwork imports 2021-06-01 21:51:23 +00:00
mock_proxy_test.go portmapper: move mockProxyCommand to a _test file 2021-06-17 10:27:34 +02:00
proxy.go portmapper: don't compile linux-only code on Windows 2021-06-17 10:27:29 +02:00
proxy_linux.go Lock OS threads when exec'ing with Pdeathsig 2022-10-05 12:18:03 -04:00
proxy_windows.go Pick a random host port if the user does not specify a host port. 2019-04-22 17:43:27 +00:00