summaryrefslogtreecommitdiffhomepage
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
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
-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)