]> Cypherpunks repositories - gostls13.git/commitdiff
internal/syscall/unix: add PidFDSendSignal for Linux
authorKir Kolyshkin <kolyshkin@gmail.com>
Wed, 13 Sep 2023 07:58:20 +0000 (00:58 -0700)
committerMichael Knyszek <mknyszek@google.com>
Tue, 21 Nov 2023 22:23:07 +0000 (22:23 +0000)
CL 520266 added pidfd_send_signal linux syscall numbers to the
syscall package for the sake of a unit test.

As pidfd_send_signal will be used from the os package, let's revert the
changes to syscall package, add the pidfd_send_signal syscall numbers
and the implementation to internal/syscall/unix, and change the above
test to use it.

Updates #51246.
For #62654.

Change-Id: I862174c3c1a64baf1080792bdb3a1c1d1b417bb4
Reviewed-on: https://go-review.googlesource.com/c/go/+/528436
Run-TryBot: Kirill Kolyshkin <kolyshkin@gmail.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
21 files changed:
src/internal/syscall/unix/pidfd_linux.go [new file with mode: 0644]
src/internal/syscall/unix/sysnum_linux_386.go
src/internal/syscall/unix/sysnum_linux_amd64.go
src/internal/syscall/unix/sysnum_linux_arm.go
src/internal/syscall/unix/sysnum_linux_generic.go
src/internal/syscall/unix/sysnum_linux_mips64x.go
src/internal/syscall/unix/sysnum_linux_mipsx.go
src/internal/syscall/unix/sysnum_linux_ppc64x.go
src/internal/syscall/unix/sysnum_linux_s390x.go
src/syscall/exec_linux_test.go
src/syscall/export_linux_test.go
src/syscall/syscall_linux_386.go
src/syscall/syscall_linux_amd64.go
src/syscall/syscall_linux_arm.go
src/syscall/syscall_linux_arm64.go
src/syscall/syscall_linux_loong64.go
src/syscall/syscall_linux_mips64x.go
src/syscall/syscall_linux_mipsx.go
src/syscall/syscall_linux_ppc64x.go
src/syscall/syscall_linux_riscv64.go
src/syscall/syscall_linux_s390x.go

diff --git a/src/internal/syscall/unix/pidfd_linux.go b/src/internal/syscall/unix/pidfd_linux.go
new file mode 100644 (file)
index 0000000..02cfaa0
--- /dev/null
@@ -0,0 +1,15 @@
+// Copyright 2023 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package unix
+
+import "syscall"
+
+func PidFDSendSignal(pidfd uintptr, s syscall.Signal) error {
+       _, _, errno := syscall.Syscall(pidfdSendSignalTrap, pidfd, uintptr(s), 0)
+       if errno != 0 {
+               return errno
+       }
+       return nil
+}
index 2bda08ccf1ae45f1a61dd16bd593f36d8844586a..9f750a1c03e2acd4b559d2bbc899286c124c2bec 100644 (file)
@@ -5,6 +5,7 @@
 package unix
 
 const (
-       getrandomTrap     uintptr = 355
-       copyFileRangeTrap uintptr = 377
+       getrandomTrap       uintptr = 355
+       copyFileRangeTrap   uintptr = 377
+       pidfdSendSignalTrap uintptr = 424
 )
index ae5239ebfb5dc3298827e080def682c900c590e1..706898d41e5a17a9905130f0ea533a938e85d3bf 100644 (file)
@@ -5,6 +5,7 @@
 package unix
 
 const (
-       getrandomTrap     uintptr = 318
-       copyFileRangeTrap uintptr = 326
+       getrandomTrap       uintptr = 318
+       copyFileRangeTrap   uintptr = 326
+       pidfdSendSignalTrap uintptr = 424
 )
index acaec05879056efc87641b0a6f3e5925a73b4fbf..c00644b5528ab3af54a3ac0029e1795acb8d839c 100644 (file)
@@ -5,6 +5,7 @@
 package unix
 
 const (
-       getrandomTrap     uintptr = 384
-       copyFileRangeTrap uintptr = 391
+       getrandomTrap       uintptr = 384
+       copyFileRangeTrap   uintptr = 391
+       pidfdSendSignalTrap uintptr = 424
 )
index 8c132c6bf5071a65554b9909dee60b1ac938874a..bf25428e7ec5b6e530fde8ef5c576ae293b427c2 100644 (file)
@@ -11,6 +11,7 @@ package unix
 // means only arm64 loong64 and riscv64 use the standard numbers.
 
 const (
-       getrandomTrap     uintptr = 278
-       copyFileRangeTrap uintptr = 285
+       getrandomTrap       uintptr = 278
+       copyFileRangeTrap   uintptr = 285
+       pidfdSendSignalTrap uintptr = 424
 )
index bca526d2b905bf6c15d3bda2a51f4bd3b5bda243..6a9e238ce3d31a2cb5d7a2ee42e457a6e9cdcf36 100644 (file)
@@ -7,6 +7,7 @@
 package unix
 
 const (
-       getrandomTrap     uintptr = 5313
-       copyFileRangeTrap uintptr = 5320
+       getrandomTrap       uintptr = 5313
+       copyFileRangeTrap   uintptr = 5320
+       pidfdSendSignalTrap uintptr = 5424
 )
index c86195e49698a5a636ee13872edc11fd4a4e79e9..22d38f148edd502be08e01f5dd126e3703441057 100644 (file)
@@ -7,6 +7,7 @@
 package unix
 
 const (
-       getrandomTrap     uintptr = 4353
-       copyFileRangeTrap uintptr = 4360
+       getrandomTrap       uintptr = 4353
+       copyFileRangeTrap   uintptr = 4360
+       pidfdSendSignalTrap uintptr = 4424
 )
index a4dcf2bc9d71f53e7ca423c70d4f3032734f0db0..945ec28c2a04e03961da75718ad7050c0fae8853 100644 (file)
@@ -7,6 +7,7 @@
 package unix
 
 const (
-       getrandomTrap     uintptr = 359
-       copyFileRangeTrap uintptr = 379
+       getrandomTrap       uintptr = 359
+       copyFileRangeTrap   uintptr = 379
+       pidfdSendSignalTrap uintptr = 424
 )
index bf2c01e4e16dbc2b3ed6ef2b879de041ef312b8b..2c74343820189ab4edf3eaf8ef4cd54df9db467b 100644 (file)
@@ -5,6 +5,7 @@
 package unix
 
 const (
-       getrandomTrap     uintptr = 349
-       copyFileRangeTrap uintptr = 375
+       getrandomTrap       uintptr = 349
+       copyFileRangeTrap   uintptr = 375
+       pidfdSendSignalTrap uintptr = 424
 )
index 976275e1dcf3bc2471a2a835b2c52895c0122652..68ec6fe3f8e7cb8d11be33cc7849f965d4b688f7 100644 (file)
@@ -12,6 +12,7 @@ import (
        "flag"
        "fmt"
        "internal/platform"
+       "internal/syscall/unix"
        "internal/testenv"
        "io"
        "os"
@@ -560,11 +561,11 @@ func testPidFD(t *testing.T, userns bool) error {
 
        // Use pidfd to send a signal to the child.
        sig := syscall.SIGINT
-       if _, _, e := syscall.Syscall(syscall.Sys_pidfd_send_signal, uintptr(pidfd), uintptr(sig), 0); e != 0 {
-               if e != syscall.EINVAL && testenv.SyscallIsNotSupported(e) {
-                       t.Skip("pidfd_send_signal syscall not supported:", e)
+       if err := unix.PidFDSendSignal(uintptr(pidfd), sig); err != nil {
+               if err != syscall.EINVAL && testenv.SyscallIsNotSupported(err) {
+                       t.Skip("pidfd_send_signal syscall not supported:", err)
                }
-               t.Fatal("pidfd_send_signal syscall failed:", e)
+               t.Fatal("pidfd_send_signal syscall failed:", err)
        }
        // Check if the child received our signal.
        err = cmd.Wait()
index a09db6075308880f00b233ad4a9971263c11b4a7..3aa877cfe3c701b459257d3b1ee320b73f3401ba 100644 (file)
@@ -10,6 +10,5 @@ var (
 )
 
 const (
-       Sys_GETEUID           = sys_GETEUID
-       Sys_pidfd_send_signal = _SYS_pidfd_send_signal
+       Sys_GETEUID = sys_GETEUID
 )
index 1ab6c5e14853a913cb8ff1288e9f218b79168bb6..a559f7e288ac5cdc923e127bec2755428a0e2210 100644 (file)
@@ -7,11 +7,10 @@ package syscall
 import "unsafe"
 
 const (
-       _SYS_setgroups         = SYS_SETGROUPS32
-       _SYS_clone3            = 435
-       _SYS_faccessat2        = 439
-       _SYS_pidfd_send_signal = 424
-       _SYS_fchmodat2         = 452
+       _SYS_setgroups  = SYS_SETGROUPS32
+       _SYS_clone3     = 435
+       _SYS_faccessat2 = 439
+       _SYS_fchmodat2  = 452
 )
 
 func setTimespec(sec, nsec int64) Timespec {
index 1083a507c705d12105d5eddc2d186f575a585503..ec52f8a4bd9ec4d5c6ccdf1c86efee8e6539a2d7 100644 (file)
@@ -9,11 +9,10 @@ import (
 )
 
 const (
-       _SYS_setgroups         = SYS_SETGROUPS
-       _SYS_clone3            = 435
-       _SYS_faccessat2        = 439
-       _SYS_pidfd_send_signal = 424
-       _SYS_fchmodat2         = 452
+       _SYS_setgroups  = SYS_SETGROUPS
+       _SYS_clone3     = 435
+       _SYS_faccessat2 = 439
+       _SYS_fchmodat2  = 452
 )
 
 //sys  Dup2(oldfd int, newfd int) (err error)
index 2641cd286869971f8c72880d74d7a81e6ebb33bb..a6d92cea1317e8da8012c0b5e721d2b72936f682 100644 (file)
@@ -7,11 +7,10 @@ package syscall
 import "unsafe"
 
 const (
-       _SYS_setgroups         = SYS_SETGROUPS32
-       _SYS_clone3            = 435
-       _SYS_faccessat2        = 439
-       _SYS_pidfd_send_signal = 424
-       _SYS_fchmodat2         = 452
+       _SYS_setgroups  = SYS_SETGROUPS32
+       _SYS_clone3     = 435
+       _SYS_faccessat2 = 439
+       _SYS_fchmodat2  = 452
 )
 
 func setTimespec(sec, nsec int64) Timespec {
index 74d6e3a95865624227ceced74c9af1ed29f506aa..b87b51c0c04e44eceaef3c30f82eb28a27122746 100644 (file)
@@ -7,11 +7,10 @@ package syscall
 import "unsafe"
 
 const (
-       _SYS_setgroups         = SYS_SETGROUPS
-       _SYS_clone3            = 435
-       _SYS_faccessat2        = 439
-       _SYS_pidfd_send_signal = 424
-       _SYS_fchmodat2         = 452
+       _SYS_setgroups  = SYS_SETGROUPS
+       _SYS_clone3     = 435
+       _SYS_faccessat2 = 439
+       _SYS_fchmodat2  = 452
 )
 
 //sys  EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
index eb275bc71734296d281b6d1e588c539a3e3d77dd..634cf30cf26902200df201d4ff0f05b0183f3570 100644 (file)
@@ -7,11 +7,10 @@ package syscall
 import "unsafe"
 
 const (
-       _SYS_setgroups         = SYS_SETGROUPS
-       _SYS_clone3            = 435
-       _SYS_faccessat2        = 439
-       _SYS_pidfd_send_signal = 424
-       _SYS_fchmodat2         = 452
+       _SYS_setgroups  = SYS_SETGROUPS
+       _SYS_clone3     = 435
+       _SYS_faccessat2 = 439
+       _SYS_fchmodat2  = 452
 )
 
 //sys  EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
index 3bdee928ed6c7ec9c5d8062fa3dcdb7a9e3f86a5..41106ed81ff1ed5a38e10b9e751883fc10e0af5d 100644 (file)
@@ -11,11 +11,10 @@ import (
 )
 
 const (
-       _SYS_setgroups         = SYS_SETGROUPS
-       _SYS_clone3            = 5435
-       _SYS_faccessat2        = 5439
-       _SYS_pidfd_send_signal = 5424
-       _SYS_fchmodat2         = 5452
+       _SYS_setgroups  = SYS_SETGROUPS
+       _SYS_clone3     = 5435
+       _SYS_faccessat2 = 5439
+       _SYS_fchmodat2  = 5452
 )
 
 //sys  Dup2(oldfd int, newfd int) (err error)
index 7253c648e715d66e7f49dfdd69bfc3f16ec393f5..7d4f8f2264df70d5acf05c5d9b4d871eb54575f8 100644 (file)
@@ -9,11 +9,10 @@ package syscall
 import "unsafe"
 
 const (
-       _SYS_setgroups         = SYS_SETGROUPS
-       _SYS_clone3            = 4435
-       _SYS_faccessat2        = 4439
-       _SYS_pidfd_send_signal = 4424
-       _SYS_fchmodat2         = 4452
+       _SYS_setgroups  = SYS_SETGROUPS
+       _SYS_clone3     = 4435
+       _SYS_faccessat2 = 4439
+       _SYS_fchmodat2  = 4452
 )
 
 func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno)
index 9cfe2dc6959d9be3a7d942c1b76f0eacd8cceeda..13c184c44fec9818ec3a5ea803e7d07376383419 100644 (file)
@@ -11,11 +11,10 @@ import (
 )
 
 const (
-       _SYS_setgroups         = SYS_SETGROUPS
-       _SYS_clone3            = 435
-       _SYS_faccessat2        = 439
-       _SYS_pidfd_send_signal = 424
-       _SYS_fchmodat2         = 452
+       _SYS_setgroups  = SYS_SETGROUPS
+       _SYS_clone3     = 435
+       _SYS_faccessat2 = 439
+       _SYS_fchmodat2  = 452
 )
 
 //sys  Dup2(oldfd int, newfd int) (err error)
index 61fb4c166859ed032048b1e3c64a582f86eac755..00872a74fba96d06e1b1b8e40a90d14cbde26fc5 100644 (file)
@@ -7,11 +7,10 @@ package syscall
 import "unsafe"
 
 const (
-       _SYS_setgroups         = SYS_SETGROUPS
-       _SYS_clone3            = 435
-       _SYS_faccessat2        = 439
-       _SYS_pidfd_send_signal = 424
-       _SYS_fchmodat2         = 452
+       _SYS_setgroups  = SYS_SETGROUPS
+       _SYS_clone3     = 435
+       _SYS_faccessat2 = 439
+       _SYS_fchmodat2  = 452
 )
 
 //sys  EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
index 3a0afc404a096c9b6dd83524ec048e6105a0c2e9..ea667ec1da541148b8c9157c806ca564a8daa24a 100644 (file)
@@ -7,11 +7,10 @@ package syscall
 import "unsafe"
 
 const (
-       _SYS_setgroups         = SYS_SETGROUPS
-       _SYS_clone3            = 435
-       _SYS_faccessat2        = 439
-       _SYS_pidfd_send_signal = 424
-       _SYS_fchmodat2         = 452
+       _SYS_setgroups  = SYS_SETGROUPS
+       _SYS_clone3     = 435
+       _SYS_faccessat2 = 439
+       _SYS_fchmodat2  = 452
 )
 
 //sys  Dup2(oldfd int, newfd int) (err error)