You've already forked runc
mirror of
https://github.com/opencontainers/runc.git
synced 2025-07-30 17:43:06 +03:00
Fix race in runc exec
There is a race in runc exec when the init process stops just before the check for the container status. It is then wrongly assumed that we are trying to start an init process instead of an exec process. This commit add an Init field to libcontainer Process to distinguish between init and exec processes to prevent this race. Signed-off-by: Mrunal Patel <mrunalp@gmail.com>
This commit is contained in:
@ -231,6 +231,7 @@ func TestEnter(t *testing.T) {
|
||||
Env: standardEnvironment,
|
||||
Stdin: stdinR,
|
||||
Stdout: &stdout,
|
||||
Init: true,
|
||||
}
|
||||
err = container.Run(&pconfig)
|
||||
stdinR.Close()
|
||||
@ -320,6 +321,7 @@ func TestProcessEnv(t *testing.T) {
|
||||
},
|
||||
Stdin: nil,
|
||||
Stdout: &stdout,
|
||||
Init: true,
|
||||
}
|
||||
err = container.Run(&pconfig)
|
||||
ok(t, err)
|
||||
@ -366,6 +368,7 @@ func TestProcessEmptyCaps(t *testing.T) {
|
||||
Env: standardEnvironment,
|
||||
Stdin: nil,
|
||||
Stdout: &stdout,
|
||||
Init: true,
|
||||
}
|
||||
err = container.Run(&pconfig)
|
||||
ok(t, err)
|
||||
@ -417,6 +420,7 @@ func TestProcessCaps(t *testing.T) {
|
||||
Stdin: nil,
|
||||
Stdout: &stdout,
|
||||
Capabilities: &configs.Capabilities{},
|
||||
Init: true,
|
||||
}
|
||||
pconfig.Capabilities.Bounding = append(config.Capabilities.Bounding, "CAP_NET_ADMIN")
|
||||
pconfig.Capabilities.Permitted = append(config.Capabilities.Permitted, "CAP_NET_ADMIN")
|
||||
@ -491,6 +495,7 @@ func TestAdditionalGroups(t *testing.T) {
|
||||
Stdin: nil,
|
||||
Stdout: &stdout,
|
||||
AdditionalGroups: []string{"plugdev", "audio"},
|
||||
Init: true,
|
||||
}
|
||||
err = container.Run(&pconfig)
|
||||
ok(t, err)
|
||||
@ -551,6 +556,7 @@ func testFreeze(t *testing.T, systemd bool) {
|
||||
Args: []string{"cat"},
|
||||
Env: standardEnvironment,
|
||||
Stdin: stdinR,
|
||||
Init: true,
|
||||
}
|
||||
err = container.Run(pconfig)
|
||||
stdinR.Close()
|
||||
@ -762,6 +768,7 @@ func TestContainerState(t *testing.T) {
|
||||
Args: []string{"cat"},
|
||||
Env: standardEnvironment,
|
||||
Stdin: stdinR,
|
||||
Init: true,
|
||||
}
|
||||
err = container.Run(p)
|
||||
if err != nil {
|
||||
@ -821,6 +828,7 @@ func TestPassExtraFiles(t *testing.T) {
|
||||
ExtraFiles: []*os.File{pipein1, pipein2},
|
||||
Stdin: nil,
|
||||
Stdout: &stdout,
|
||||
Init: true,
|
||||
}
|
||||
err = container.Run(&process)
|
||||
if err != nil {
|
||||
@ -902,6 +910,7 @@ func TestMountCmds(t *testing.T) {
|
||||
Cwd: "/",
|
||||
Args: []string{"sh", "-c", "env"},
|
||||
Env: standardEnvironment,
|
||||
Init: true,
|
||||
}
|
||||
err = container.Run(&pconfig)
|
||||
if err != nil {
|
||||
@ -951,6 +960,7 @@ func TestSysctl(t *testing.T) {
|
||||
Env: standardEnvironment,
|
||||
Stdin: nil,
|
||||
Stdout: &stdout,
|
||||
Init: true,
|
||||
}
|
||||
err = container.Run(&pconfig)
|
||||
ok(t, err)
|
||||
@ -1091,6 +1101,7 @@ func TestOomScoreAdj(t *testing.T) {
|
||||
Env: standardEnvironment,
|
||||
Stdin: nil,
|
||||
Stdout: &stdout,
|
||||
Init: true,
|
||||
}
|
||||
err = container.Run(&pconfig)
|
||||
ok(t, err)
|
||||
@ -1196,6 +1207,7 @@ func TestHook(t *testing.T) {
|
||||
Env: standardEnvironment,
|
||||
Stdin: nil,
|
||||
Stdout: &stdout,
|
||||
Init: true,
|
||||
}
|
||||
err = container.Run(&pconfig)
|
||||
ok(t, err)
|
||||
@ -1312,6 +1324,7 @@ func TestRootfsPropagationSlaveMount(t *testing.T) {
|
||||
Args: []string{"cat"},
|
||||
Env: standardEnvironment,
|
||||
Stdin: stdinR,
|
||||
Init: true,
|
||||
}
|
||||
|
||||
err = container.Run(pconfig)
|
||||
@ -1429,6 +1442,7 @@ func TestRootfsPropagationSharedMount(t *testing.T) {
|
||||
Args: []string{"cat"},
|
||||
Env: standardEnvironment,
|
||||
Stdin: stdinR,
|
||||
Init: true,
|
||||
}
|
||||
|
||||
err = container.Run(pconfig)
|
||||
@ -1537,6 +1551,7 @@ func TestInitJoinPID(t *testing.T) {
|
||||
Args: []string{"cat"},
|
||||
Env: standardEnvironment,
|
||||
Stdin: stdinR1,
|
||||
Init: true,
|
||||
}
|
||||
err = container1.Run(init1)
|
||||
stdinR1.Close()
|
||||
@ -1563,6 +1578,7 @@ func TestInitJoinPID(t *testing.T) {
|
||||
Args: []string{"cat"},
|
||||
Env: standardEnvironment,
|
||||
Stdin: stdinR2,
|
||||
Init: true,
|
||||
}
|
||||
err = container2.Run(init2)
|
||||
stdinR2.Close()
|
||||
@ -1642,6 +1658,7 @@ func TestInitJoinNetworkAndUser(t *testing.T) {
|
||||
Args: []string{"cat"},
|
||||
Env: standardEnvironment,
|
||||
Stdin: stdinR1,
|
||||
Init: true,
|
||||
}
|
||||
err = container1.Run(init1)
|
||||
stdinR1.Close()
|
||||
@ -1676,6 +1693,7 @@ func TestInitJoinNetworkAndUser(t *testing.T) {
|
||||
Args: []string{"cat"},
|
||||
Env: standardEnvironment,
|
||||
Stdin: stdinR2,
|
||||
Init: true,
|
||||
}
|
||||
err = container2.Run(init2)
|
||||
stdinR2.Close()
|
||||
@ -1743,6 +1761,7 @@ func TestTmpfsCopyUp(t *testing.T) {
|
||||
Env: standardEnvironment,
|
||||
Stdin: nil,
|
||||
Stdout: &stdout,
|
||||
Init: true,
|
||||
}
|
||||
err = container.Run(&pconfig)
|
||||
ok(t, err)
|
||||
|
Reference in New Issue
Block a user