]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: zero-initialize LR on new stacks
authorAustin Clements <austin@google.com>
Wed, 26 Oct 2016 18:34:20 +0000 (14:34 -0400)
committerAustin Clements <austin@google.com>
Fri, 28 Oct 2016 19:14:03 +0000 (19:14 +0000)
Currently we initialize LR on a new stack by writing nil to it. But
this is an initializing write since the newly allocated stack is not
zeroed, so this is unsafe with the hybrid barrier. Change this is a
uintptr write to avoid a bad write barrier.

Updates #17503.

Change-Id: I062ac352e35df7da4644c1f2a5aaab87049d1f60
Reviewed-on: https://go-review.googlesource.com/32093
Reviewed-by: Rick Hudson <rlh@golang.org>
src/runtime/proc.go

index af111014f12cca1e6d8d87c974f8912229b3471e..774801ab15682420ea08e4ba4351430117c19212 100644 (file)
@@ -2806,7 +2806,7 @@ func newproc1(fn *funcval, argp *uint8, narg int32, nret int32, callerpc uintptr
        spArg := sp
        if usesLR {
                // caller's LR
-               *(*unsafe.Pointer)(unsafe.Pointer(sp)) = nil
+               *(*uintptr)(unsafe.Pointer(sp)) = 0
                prepGoExitFrame(sp)
                spArg += sys.MinFrameSize
        }