summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNicolas Lacasse <nlacasse@google.com>2019-06-26 11:26:18 -0700
committergVisor bot <gvisor-bot@google.com>2019-06-26 11:27:31 -0700
commit67e2f227aac49129936efc640a6c47a0978b187d (patch)
treec41ee03a485e76d74c6cd26598316e9f53899589
parente98ce4a2c681855b6b4f2c1298484f60014e4b88 (diff)
Always set SysProcAttr.Ctty to an FD in the child's FD table.
Go was going to change the behavior of SysProcAttr.Ctty such that it must be an FD in the *parent* FD table: https://go-review.googlesource.com/c/go/+/178919/ However, after some debate, it was decided that this change was too backwards-incompatible, and so it was reverted. https://github.com/golang/go/issues/29458 The behavior going forward is unchanged: the Ctty FD must be an FD in the *child* FD table. PiperOrigin-RevId: 255228476
-rw-r--r--runsc/cmd/exec.go16
-rw-r--r--runsc/console/BUILD2
-rw-r--r--runsc/console/ctty_1_12.go24
-rw-r--r--runsc/console/ctty_1_13.go24
-rw-r--r--runsc/sandbox/sandbox.go13
5 files changed, 9 insertions, 70 deletions
diff --git a/runsc/cmd/exec.go b/runsc/cmd/exec.go
index 5a823e89a..e817eff77 100644
--- a/runsc/cmd/exec.go
+++ b/runsc/cmd/exec.go
@@ -235,18 +235,12 @@ func (ex *Exec) execChildAndWait(waitStatus *syscall.WaitStatus) subcommands.Exi
cmd.SysProcAttr = &syscall.SysProcAttr{
Setsid: true,
Setctty: true,
- Ctty: int(tty.Fd()),
+ // The Ctty FD must be the FD in the child process's FD
+ // table. Since we set cmd.Stdin/Stdout/Stderr to the
+ // tty FD, we can use any of 0, 1, or 2 here.
+ // See https://github.com/golang/go/issues/29458.
+ Ctty: 0,
}
- // TODO(b/133868570): Delete this check once Go 1.12 is no
- // longer supported.
- if console.CttyFdIsPostShuffle {
- // In go1.12 and before, the Ctty FD must be the FD in
- // the child process's FD table. Since we set
- // cmd.Stdin/Stdout/Stderr to the tty FD, we can use
- // any of 0, 1, or 2 here.
- cmd.SysProcAttr.Ctty = 0
- }
-
}
if err := cmd.Start(); err != nil {
diff --git a/runsc/console/BUILD b/runsc/console/BUILD
index b7d8f32ca..e623c1a0f 100644
--- a/runsc/console/BUILD
+++ b/runsc/console/BUILD
@@ -6,8 +6,6 @@ go_library(
name = "console",
srcs = [
"console.go",
- "ctty_1_12.go",
- "ctty_1_13.go",
],
importpath = "gvisor.dev/gvisor/runsc/console",
visibility = [
diff --git a/runsc/console/ctty_1_12.go b/runsc/console/ctty_1_12.go
deleted file mode 100644
index 6e7a314a3..000000000
--- a/runsc/console/ctty_1_12.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2019 The gVisor Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// +build go1.12
-// +build !go1.13
-
-// TODO(b/133868570): Delete once Go 1.12 is no longer supported.
-
-package console
-
-// CttyFdIsPostShuffle indicates that in go1.12 and earlier, the
-// SysProcAttr.Ctty FD is determined "pre-shuffle" (not "post-shuffle").
-var CttyFdIsPostShuffle = false
diff --git a/runsc/console/ctty_1_13.go b/runsc/console/ctty_1_13.go
deleted file mode 100644
index 785d720e1..000000000
--- a/runsc/console/ctty_1_13.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2019 The gVisor Authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// +build go1.13
-// +build !go1.14
-
-// TODO(b/133868570): Delete once Go 1.12 is no longer supported.
-
-package console
-
-// CttyFdIsPostShuffle indicates that in go1.13 and later, the SysProcAttr.Ctty
-// FD is determined "post-shuffle".
-var CttyFdIsPostShuffle = true
diff --git a/runsc/sandbox/sandbox.go b/runsc/sandbox/sandbox.go
index 1591052cd..6bebf0737 100644
--- a/runsc/sandbox/sandbox.go
+++ b/runsc/sandbox/sandbox.go
@@ -438,15 +438,10 @@ func (s *Sandbox) createSandboxProcess(conf *boot.Config, args *Args, startSyncF
// Set the TTY as a controlling TTY on the sandbox process.
cmd.SysProcAttr.Setctty = true
- cmd.SysProcAttr.Ctty = int(tty.Fd())
- // TODO(b/133868570): Delete this check once Go 1.12 is no
- // longer supported.
- if console.CttyFdIsPostShuffle {
- // In go1.12 and before, the Ctty FD must be the FD in
- // the child process's FD table, which will be "nextFD"
- // in this case.
- cmd.SysProcAttr.Ctty = nextFD
- }
+ // The Ctty FD must be the FD in the child process's FD table,
+ // which will be nextFD in this case.
+ // See https://github.com/golang/go/issues/29458.
+ cmd.SysProcAttr.Ctty = nextFD
// Pass the tty as all stdio fds to sandbox.
for i := 0; i < 3; i++ {