]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: use correct type for TIOCSPGRP/TIOCGPGRP
authorJoel Sing <joel@sing.id.au>
Mon, 2 Nov 2020 15:11:51 +0000 (02:11 +1100)
committerJoel Sing <joel@sing.id.au>
Fri, 13 Nov 2020 13:56:34 +0000 (13:56 +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).

Update #40995

Change-Id: I622a0543fd562d97f76a7376a84fd2641e6d6a24
Reviewed-on: https://go-review.googlesource.com/c/go/+/267605
Trust: Joel Sing <joel@sing.id.au>
Run-TryBot: Joel Sing <joel@sing.id.au>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/syscall/exec_bsd.go
src/syscall/exec_unix_test.go

index af6c836961858111e89cfe49be6a2090c986346d..b297db96cc4fa899cdc747e3931f508167ffa5a6 100644 (file)
@@ -117,14 +117,16 @@ 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(SYS_GETPID, 0, 0, 0)
                        if err1 != 0 {
                                goto childerror
                        }
 
-                       pgrp = int(r1)
+                       pgrp = _C_int(r1)
                }
 
                // Place process group in foreground.
index 4431f7fc90095dacad1c2cec5fd36886b9318891..d6b6f51fa6ebfb6b9096ae43776e6eacefb7a47c 100644 (file)
@@ -172,7 +172,9 @@ func TestForeground(t *testing.T) {
                t.Skipf("Can't test Foreground. Couldn't open /dev/tty: %s", err)
        }
 
-       fpgrp := 0
+       // This should really be pid_t, however _C_int (aka int32) is generally
+       // equivalent.
+       fpgrp := int32(0)
 
        errno := syscall.Ioctl(tty.Fd(), syscall.TIOCGPGRP, uintptr(unsafe.Pointer(&fpgrp)))
        if errno != 0 {