aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/os_linux.go
diff options
context:
space:
mode:
authorcions <gh.cions@gmail.com>2024-09-24 01:27:40 +0000
committerGopher Robot <gobot@golang.org>2024-09-26 13:17:09 +0000
commita3a05ed04cb53c53bdacded2d16f0f3e5facdbb0 (patch)
tree71444f68912290bd3a092dd011bb80db04d23b8e /src/runtime/os_linux.go
parent607975cfa15768e3587facfbde18ef9f18c46170 (diff)
downloadgo-a3a05ed04cb53c53bdacded2d16f0f3e5facdbb0.tar.xz
os: ignore SIGSYS in checkPidfd
In Android version 11 and earlier, pidfd-related system calls are not allowed by the seccomp policy, which causes crashes due to SIGSYS signals. Fixes #69065 Change-Id: Ib29631639a5cf221ac11b4d82390cb79436b8657 GitHub-Last-Rev: aad6b3b32c81795f86bc4a9e81aad94899daf520 GitHub-Pull-Request: golang/go#69543 Reviewed-on: https://go-review.googlesource.com/c/go/+/614277 Auto-Submit: Ian Lance Taylor <iant@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com>
Diffstat (limited to 'src/runtime/os_linux.go')
-rw-r--r--src/runtime/os_linux.go13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/runtime/os_linux.go b/src/runtime/os_linux.go
index 3911276cf2..e18ef8e776 100644
--- a/src/runtime/os_linux.go
+++ b/src/runtime/os_linux.go
@@ -879,8 +879,9 @@ func runPerThreadSyscall() {
}
const (
- _SI_USER = 0
- _SI_TKILL = -6
+ _SI_USER = 0
+ _SI_TKILL = -6
+ _SYS_SECCOMP = 1
)
// sigFromUser reports whether the signal was sent because of a call
@@ -892,6 +893,14 @@ func (c *sigctxt) sigFromUser() bool {
return code == _SI_USER || code == _SI_TKILL
}
+// sigFromSeccomp reports whether the signal was sent from seccomp.
+//
+//go:nosplit
+func (c *sigctxt) sigFromSeccomp() bool {
+ code := int32(c.sigcode())
+ return code == _SYS_SECCOMP
+}
+
//go:nosplit
func mprotect(addr unsafe.Pointer, n uintptr, prot int32) (ret int32, errno int32) {
r, _, err := syscall.Syscall6(syscall.SYS_MPROTECT, uintptr(addr), n, uintptr(prot), 0, 0, 0)