summaryrefslogtreecommitdiffhomepage
path: root/runsc/sandbox
diff options
context:
space:
mode:
authorNicolas Lacasse <nlacasse@google.com>2018-10-10 14:33:59 -0700
committerShentubot <shentubot@google.com>2018-10-10 14:35:03 -0700
commit1939cd020f19a17707eb5e597e010fea8ab35de5 (patch)
tree939f5b55f4e3a9c053e0830dff665b88764fcf3c /runsc/sandbox
parent8388a505e735045f31c6f7180711ef57148dc517 (diff)
runsc: Pass controlling TTY by FD in the *new* process, not current process.
When setting Cmd.SysProcAttr.Ctty, the FD must be the FD of the controlling TTY in the new process, not the current process. The ioctl call is made after duping all FDs in Cmd.ExtraFiles, which may stomp on the old TTY FD. This fixes the "bad address" flakes in runsc/container:container_test, although some other flakes remain. PiperOrigin-RevId: 216594394 Change-Id: Idfd1677abb866aa82ad7e8be776f0c9087256862
Diffstat (limited to 'runsc/sandbox')
-rw-r--r--runsc/sandbox/sandbox.go12
1 files changed, 7 insertions, 5 deletions
diff --git a/runsc/sandbox/sandbox.go b/runsc/sandbox/sandbox.go
index 26d725bdd..7f1afc34b 100644
--- a/runsc/sandbox/sandbox.go
+++ b/runsc/sandbox/sandbox.go
@@ -363,11 +363,6 @@ func (s *Sandbox) createSandboxProcess(spec *specs.Spec, conf *boot.Config, bund
return fmt.Errorf("error setting up console with socket %q: %v", consoleSocket, err)
}
defer tty.Close()
- fd := int(tty.Fd())
-
- // Set the TTY as a controlling TTY on the sandbox process.
- cmd.SysProcAttr.Setctty = true
- cmd.SysProcAttr.Ctty = fd
// Ideally we would set the sandbox stdin to this process'
// stdin, but for some reason Docker does not like that (it
@@ -378,6 +373,13 @@ func (s *Sandbox) createSandboxProcess(spec *specs.Spec, conf *boot.Config, bund
cmd.Stdout = tty
cmd.Stderr = tty
+ // Set the TTY as a controlling TTY on the sandbox process.
+ // Note that the Ctty field must be the FD of the TTY in the
+ // *new* process, not this process. Since we set the TTY to
+ // stdin, we can use FD 0 here.
+ cmd.SysProcAttr.Setctty = true
+ cmd.SysProcAttr.Ctty = 0
+
// Pass the tty as all stdio fds to sandbox.
for i := 0; i < 3; i++ {
cmd.ExtraFiles = append(cmd.ExtraFiles, tty)