1
0
mirror of https://github.com/golang/go synced 2024-11-26 10:58:16 -07:00
go/misc/cgo
Cherry Zhang 07cba70d57 cmd/compile, runtime: use __msan_memmove for moving data, split msanread to fields
Currently, for data moving, we generate an msanread of the source,
followed by an msanwrite of the destination. msanread checks
the source is initialized.

This has a problem: if the source is an aggregate type containing
alignment paddings, the padding bytes may not be thought as
initialized by MSAN. If we copy the aggregate type by value, if
it counts as a read, MSAN reports using uninitialized data. This
CL changes it to use __msan_memmove for data copying, which tells
MSAN to propagate initialized-ness but not check for it.

Caveat: technically __msan_memmove is not a public API of MSAN,
although the C compiler does generate direct calls to it.

Also, when instrumenting a load of a struct, split the
instrumentation to fields, instead of generating an msanread for
the whole struct. This skips padding bytes, which may not be
considered initialized in MSAN.

Fixes #42820.

Change-Id: Id861c8bbfd94cfcccefcc58eaf9e4eb43b4d85c6
Reviewed-on: https://go-review.googlesource.com/c/go/+/270859
Trust: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
2020-12-03 15:40:11 +00:00
..
errors cmd/go, cmd/cgo: don't let bogus symbol set cgo_ldflag 2020-11-12 20:58:06 +00:00
fortran
gmp
life
nocgo
stdio
test cmd/cgo: fix initialization of empty argument types 2020-11-13 15:15:15 +00:00
testasan
testcarchive all: enable more tests on macOS/ARM64 2020-10-06 21:56:24 +00:00
testcshared cmd/link: avoid exporting all symbols on windows buildmode=pie 2020-11-02 00:46:44 +00:00
testgodefs
testplugin cmd/compile: mark plugin-exported types as used in interface 2020-11-13 22:01:37 +00:00
testsanitizers cmd/compile, runtime: use __msan_memmove for moving data, split msanread to fields 2020-12-03 15:40:11 +00:00
testshared
testsigfwd
testso all: add GOOS=ios 2020-09-23 18:12:59 +00:00
testsovar all: add GOOS=ios 2020-09-23 18:12:59 +00:00
testtls