]> Cypherpunks.ru repositories - gostls13.git/commit
cmd/compile: add -d=checkptr to validate unsafe.Pointer rules
authorMatthew Dempsky <mdempsky@google.com>
Wed, 13 Feb 2019 03:40:42 +0000 (19:40 -0800)
committerMatthew Dempsky <mdempsky@google.com>
Thu, 17 Oct 2019 00:40:21 +0000 (00:40 +0000)
commit80a6fedea05dbdab2e55b2ba922faeaf4155a981
tree2bf6dc699a1f356e4a3ac0320e521d61ae631539
parent3b003c3edb013786caeea6c0913b2e21fc4ad66b
cmd/compile: add -d=checkptr to validate unsafe.Pointer rules

This CL adds -d=checkptr as a compile-time option for adding
instrumentation to check that Go code is following unsafe.Pointer
safety rules dynamically. In particular, it currently checks two
things:

1. When converting unsafe.Pointer to *T, make sure the resulting
pointer is aligned appropriately for T.

2. When performing pointer arithmetic, if the result points to a Go
heap object, make sure we can find an unsafe.Pointer-typed operand
that pointed into the same object.

These checks are currently disabled for the runtime, and can also be
disabled through a new //go:nocheckptr annotation. The latter is
necessary for functions like strings.noescape, which intentionally
violate safety rules to workaround escape analysis limitations.

Fixes #22218.

Change-Id: If5a51273881d93048f74bcff10a3275c9c91da6a
Reviewed-on: https://go-review.googlesource.com/c/go/+/162237
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/gc/builtin.go
src/cmd/compile/internal/gc/builtin/runtime.go
src/cmd/compile/internal/gc/inl.go
src/cmd/compile/internal/gc/lex.go
src/cmd/compile/internal/gc/main.go
src/cmd/compile/internal/gc/walk.go
src/reflect/value.go
src/runtime/checkptr.go [new file with mode: 0644]
src/strings/builder.go