From: Michael Pratt Date: Thu, 28 Apr 2022 15:44:28 +0000 (-0400) Subject: syscall: add //go:norace to RawSyscall X-Git-Tag: go1.19beta1~523 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=17371eea25f203575389f85b33ddb58792d25e84;p=gostls13.git syscall: add //go:norace to RawSyscall RawSyscall is used in a variety of rather unsafe conditions, such as after fork in forkAndExecInChild1. Disable race instrumentation to avoid calling TSAN in unsafe conditions. For #51087 Change-Id: I47c35e6f0768c77ddab99010ea0404c45ad2f1da Reviewed-on: https://go-review.googlesource.com/c/go/+/402914 TryBot-Result: Gopher Robot Reviewed-by: Cherry Mui Auto-Submit: Michael Pratt Run-TryBot: Michael Pratt --- diff --git a/src/syscall/syscall_linux.go b/src/syscall/syscall_linux.go index f9adecdd5e..ab634a2cbe 100644 --- a/src/syscall/syscall_linux.go +++ b/src/syscall/syscall_linux.go @@ -46,11 +46,15 @@ func runtime_exitsyscall() // uintptr arguments are pointers, because some values may look like pointers, // but not really be pointers, and adjusting their value would break the call. // +// //go:norace, on RawSyscall, to avoid race instrumentation if RawSyscall is +// called after fork, or from a signal handler. +// // //go:linkname to ensure ABI wrappers are generated for external callers // (notably x/sys/unix assembly). //go:uintptrkeepalive //go:nosplit +//go:norace //go:linkname RawSyscall func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) { return RawSyscall6(trap, a1, a2, a3, 0, 0, 0)