From 17371eea25f203575389f85b33ddb58792d25e84 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Thu, 28 Apr 2022 11:44:28 -0400 Subject: [PATCH] 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 --- src/syscall/syscall_linux.go | 4 ++++ 1 file changed, 4 insertions(+) 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) -- 2.48.1