mirror of
https://github.com/golang/go
synced 2024-11-23 05:10:09 -07:00
runtime: check for nil g and m in msanread
fixes #18707. Change-Id: Ibc4efef01197799f66d10bfead22faf8ac00473c Reviewed-on: https://go-review.googlesource.com/35452 Run-TryBot: Bryan Mills <bcmills@google.com> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
6593d8650d
commit
ea7d9e6a52
12
misc/cgo/testsanitizers/msan_shared.go
Normal file
12
misc/cgo/testsanitizers/msan_shared.go
Normal file
@ -0,0 +1,12 @@
|
||||
// Copyright 2017 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// This program segfaulted during libpreinit when built with -msan:
|
||||
// http://golang.org/issue/18707
|
||||
|
||||
package main
|
||||
|
||||
import "C"
|
||||
|
||||
func main() {}
|
@ -68,6 +68,25 @@ fi
|
||||
|
||||
status=0
|
||||
|
||||
testmsanshared() {
|
||||
goos=$(go env GOOS)
|
||||
suffix="-installsuffix testsanitizers"
|
||||
libext="so"
|
||||
if [ "$goos" == "darwin" ]; then
|
||||
libext="dylib"
|
||||
fi
|
||||
go build -msan -buildmode=c-shared $suffix -o ${TMPDIR}/libmsanshared.$libext msan_shared.go
|
||||
|
||||
echo 'int main() { return 0; }' > ${TMPDIR}/testmsanshared.c
|
||||
$CC $(go env GOGCCFLAGS) -fsanitize=memory -o ${TMPDIR}/testmsanshared ${TMPDIR}/testmsanshared.c ${TMPDIR}/libmsanshared.$libext
|
||||
|
||||
if ! LD_LIBRARY_PATH=. ${TMPDIR}/testmsanshared; then
|
||||
echo "FAIL: msan_shared"
|
||||
status=1
|
||||
fi
|
||||
rm -f ${TMPDIR}/{testmsanshared,testmsanshared.c,libmsanshared.$libext}
|
||||
}
|
||||
|
||||
if test "$msan" = "yes"; then
|
||||
if ! go build -msan std; then
|
||||
echo "FAIL: build -msan std"
|
||||
@ -108,6 +127,8 @@ if test "$msan" = "yes"; then
|
||||
echo "FAIL: msan_fail"
|
||||
status=1
|
||||
fi
|
||||
|
||||
testmsanshared
|
||||
fi
|
||||
|
||||
if test "$tsan" = "yes"; then
|
||||
|
@ -28,9 +28,11 @@ const msanenabled = true
|
||||
// the runtime, but operations like a slice copy can call msanread
|
||||
// anyhow for values on the stack. Just ignore msanread when running
|
||||
// on the system stack. The other msan functions are fine.
|
||||
//
|
||||
//go:nosplit
|
||||
func msanread(addr unsafe.Pointer, sz uintptr) {
|
||||
g := getg()
|
||||
if g == g.m.g0 || g == g.m.gsignal {
|
||||
if g == nil || g.m == nil || g == g.m.g0 || g == g.m.gsignal {
|
||||
return
|
||||
}
|
||||
domsanread(addr, sz)
|
||||
|
Loading…
Reference in New Issue
Block a user