From a003e041c86198122af7e37cc171517f977dde6a Mon Sep 17 00:00:00 2001 From: Lantao Liu Date: Wed, 26 Sep 2018 17:40:01 -0700 Subject: runsc: fix pid file race condition in exec detach mode. PiperOrigin-RevId: 214700295 Change-Id: I73d8490572eebe5da584af91914650d1953aeb91 --- runsc/cmd/exec.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/runsc/cmd/exec.go b/runsc/cmd/exec.go index 957c4f0ff..28229dbcf 100644 --- a/runsc/cmd/exec.go +++ b/runsc/cmd/exec.go @@ -247,10 +247,14 @@ func (ex *Exec) execAndWait(waitStatus *syscall.WaitStatus) subcommands.ExitStat // '--process' file is deleted as soon as this process returns and the child // may fail to read it. ready := func() (bool, error) { - _, err := os.Stat(pidFile) + pidb, err := ioutil.ReadFile(pidFile) if err == nil { - // File appeared, we're done! - return true, nil + // File appeared, check whether pid is fully written. + pid, err := strconv.Atoi(string(pidb)) + if err != nil { + return false, nil + } + return pid == cmd.Process.Pid, nil } if pe, ok := err.(*os.PathError); !ok || pe.Err != syscall.ENOENT { return false, err -- cgit v1.2.3