]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: use correct type for TIOCSPGRP/TIOCGPGRP
authorJoel Sing <joel@sing.id.au>
Sat, 29 May 2021 15:46:19 +0000 (01:46 +1000)
committerJoel Sing <joel@sing.id.au>
Mon, 16 Aug 2021 10:46:11 +0000 (10:46 +0000)
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 <joel@sing.id.au>
Reviewed-by: Cherry Mui <cherryyz@google.com>
src/syscall/exec_libc2.go

index b999754c2e81bf33c15accea3ab169841af96284..bd98109d071c82963591be1d457b4cbf564ca0b9 100644 (file)
@@ -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.