]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: add //go:norace to RawSyscall
authorMichael Pratt <mpratt@google.com>
Thu, 28 Apr 2022 15:44:28 +0000 (11:44 -0400)
committerGopher Robot <gobot@golang.org>
Thu, 28 Apr 2022 16:00:39 +0000 (16:00 +0000)
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 <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Auto-Submit: Michael Pratt <mpratt@google.com>
Run-TryBot: Michael Pratt <mpratt@google.com>

src/syscall/syscall_linux.go

index f9adecdd5e84799c9e331cb1dc8432d386a927d0..ab634a2cbe93adb6f712c082750725fb0cda4253 100644 (file)
@@ -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)