mirror of
https://github.com/golang/go
synced 2024-11-23 00:20:12 -07:00
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>
This commit is contained in:
parent
da879c6e6a
commit
2fcca5d52d
@ -203,6 +203,7 @@ type cloneArgs struct {
|
||||
//
|
||||
//go:noinline
|
||||
//go:norace
|
||||
//go:nocheckptr
|
||||
func forkAndExecInChild1(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr *ProcAttr, sys *SysProcAttr, pipe int) (pid uintptr, err1 Errno, mapPipe [2]int, locked bool) {
|
||||
// Defined in linux/prctl.h starting with Linux 4.3.
|
||||
const (
|
||||
|
Loading…
Reference in New Issue
Block a user