]> Cypherpunks repositories - gostls13.git/commit
syscall: add a Go directive "go:nocheckptr" to forkAndExecInChild1
authorroot <vishwanatha.hd@ibm.com>
Sat, 1 Apr 2023 18:36:57 +0000 (18:36 +0000)
committerGopher Robot <gobot@golang.org>
Tue, 11 Apr 2023 21:27:33 +0000 (21:27 +0000)
commit2fcca5d52dd3d23ec2ca3a81e588e0f9d877ca69
treedc343d29212cce9ab3448d718768712c8f2ba003
parentda879c6e6a89244c71e3cb9a3c1ace66ce3647f9
syscall: add a Go directive "go:nocheckptr" to forkAndExecInChild1

forkAndExecInChild1 func must not acquire any locks in child, because
they might have been locked at the time of the fork. This implies to
no rescheduling, no malloc calls, and no new stack segments.

So, doing a "checkptrAlignment" is bad here, because checkptr
functions added by the instrumentation could grow the stack, which
should not be done between fork and exec calls.

Hence using a Go directive "go:nocheckptr" to forkAndExecInChild1
func,so that the compiler should not do "checkptrAlignment" when
functions marked with "go:norace".

This race detection bug was caught in go 1.21 on s390x.
Running a "./race.bash" script from "go/src" directory failed and the
bug details are provided in issue link mentioned below.

Fixes #58785

Change-Id: I254091368b0789d886acdf26f8aa8d8f5a986b24
Reviewed-on: https://go-review.googlesource.com/c/go/+/481415
Auto-Submit: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/syscall/exec_linux.go