diff options
author | Nicolas Lacasse <nlacasse@google.com> | 2018-10-10 14:33:59 -0700 |
---|---|---|
committer | Shentubot <shentubot@google.com> | 2018-10-10 14:35:03 -0700 |
commit | 1939cd020f19a17707eb5e597e010fea8ab35de5 (patch) | |
tree | 939f5b55f4e3a9c053e0830dff665b88764fcf3c | |
parent | 8388a505e735045f31c6f7180711ef57148dc517 (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.go | 12 |
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) |