aboutsummaryrefslogtreecommitdiff
path: root/src/syscall/exec_linux.go
diff options
context:
space:
mode:
authorMichael Stapelberg <stapelberg@google.com>2019-01-17 16:20:51 +0100
committerIan Lance Taylor <iant@golang.org>2019-03-06 14:49:30 +0000
commit958e212db799e609b2a8df51cdd85c9341e7a404 (patch)
tree7a0633f279c4ac254469e0ccd7f561d64a72951b /src/syscall/exec_linux.go
parent178a2c42254166cffed1b25fb1d3c7a5727cada6 (diff)
downloadgo-958e212db799e609b2a8df51cdd85c9341e7a404.tar.xz
syscall: fix hang when using Unshareflags: CLONE_NEWUSER with uid/gid mapping (linux)
Note that this particular combination of properties still fails (EPERM), but it no longer hangs. Updates #29789 Change-Id: I29b15b85a25a7acd7ae89ffc5fed074bcdfe0a12 Reviewed-on: https://go-review.googlesource.com/c/go/+/158297 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/syscall/exec_linux.go')
-rw-r--r--src/syscall/exec_linux.go2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/syscall/exec_linux.go b/src/syscall/exec_linux.go
index 6c761f85c4..79c0d77422 100644
--- a/src/syscall/exec_linux.go
+++ b/src/syscall/exec_linux.go
@@ -154,7 +154,7 @@ func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, att
runtime_BeforeFork()
locked = true
switch {
- case runtime.GOARCH == "amd64" && sys.Cloneflags&CLONE_NEWUSER == 0:
+ case runtime.GOARCH == "amd64" && (sys.Cloneflags&CLONE_NEWUSER == 0 && sys.Unshareflags&CLONE_NEWUSER == 0):
r1, err1 = rawVforkSyscall(SYS_CLONE, uintptr(SIGCHLD|CLONE_VFORK|CLONE_VM)|sys.Cloneflags)
case runtime.GOARCH == "s390x":
r1, _, err1 = RawSyscall6(SYS_CLONE, 0, uintptr(SIGCHLD)|sys.Cloneflags, 0, 0, 0, 0)