]> Cypherpunks repositories - gostls13.git/commit
[release-branch.go1.12] runtime: scan gp._panic in stack scan
authorCherry Zhang <cherryyz@google.com>
Sun, 10 Feb 2019 04:31:59 +0000 (23:31 -0500)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 13 Feb 2019 16:52:03 +0000 (16:52 +0000)
commit74f0f6939cb4863bde85af64beb490a1b673b0a7
tree617acdb97dae6f809a69807c510d03b53c96df9b
parent7ab5e0c5e2e2e75da90d18ecb4b8461b0c29c94c
[release-branch.go1.12] runtime: scan gp._panic in stack scan

In runtime.gopanic, the _panic object p is stack allocated and
referenced from gp._panic. With stack objects, p on stack is dead
at the point preprintpanics runs. gp._panic points to p, but
stack scan doesn't look at gp. Heap scan of gp does look at
gp._panic, but it stops and ignores the pointer as it points to
the stack. So whatever p points to may be collected and clobbered.
We need to scan gp._panic explicitly during stack scan.

To test it reliably, we introduce a GODEBUG mode "clobberfree",
which clobbers the memory content when the GC frees an object.

Fixes #30150.

Change-Id: I11128298f03a89f817faa221421a9d332b41dced
Reviewed-on: https://go-review.googlesource.com/c/161778
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
(cherry picked from commit af8f4062c24cb36af4dc24fbaffd23aa7f7bde36)
Reviewed-on: https://go-review.googlesource.com/c/162358
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/runtime/crash_test.go
src/runtime/extern.go
src/runtime/mgcmark.go
src/runtime/mgcsweep.go
src/runtime/runtime1.go
src/runtime/testdata/testprog/crash.go