From 3d679c6554d5b282154caa717567ad8353a8bc71 Mon Sep 17 00:00:00 2001 From: Joel Sing Date: Sun, 30 May 2021 01:46:19 +1000 Subject: [PATCH] syscall: use correct type for TIOCSPGRP/TIOCGPGRP These ioctls take a pid_t (generally a C integer aka int32) and not an int64 - we currently get away with this on little endian 64 bit platforms, since the bytes fall into the correct place, however this breaks on big endian 64 bit platforms (like openbsd/mips64). This is the same fix as CL 267605, however for libc based exec. Updates #36435 Change-Id: I01ae4905cba5e1f8725fa6cb8c35403c511534b2 Reviewed-on: https://go-review.googlesource.com/c/go/+/334881 Trust: Joel Sing Reviewed-by: Cherry Mui --- src/syscall/exec_libc2.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/syscall/exec_libc2.go b/src/syscall/exec_libc2.go index b999754c2e..bd98109d07 100644 --- a/src/syscall/exec_libc2.go +++ b/src/syscall/exec_libc2.go @@ -117,14 +117,15 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr } if sys.Foreground { - pgrp := sys.Pgid + // This should really be pid_t, however _C_int (aka int32) is + // generally equivalent. + pgrp := _C_int(sys.Pgid) if pgrp == 0 { r1, _, err1 = rawSyscall(abi.FuncPCABI0(libc_getpid_trampoline), 0, 0, 0) if err1 != 0 { goto childerror } - - pgrp = int(r1) + pgrp = _C_int(r1) } // Place process group in foreground. -- 2.50.0