]> Cypherpunks repositories - gostls13.git/commit
runtime: reset write barrier buffer on all flush paths
authorAustin Clements <austin@google.com>
Fri, 8 Dec 2017 22:32:23 +0000 (17:32 -0500)
committerAustin Clements <austin@google.com>
Mon, 11 Dec 2017 14:51:39 +0000 (14:51 +0000)
commit043f112e521dc48ec8ccffa58ceb7e5403c73fb0
treef8a4cf131114321cadd1e6c6708b6631ffd46219
parent3675bff55d7c8ed0110423b0ca8ed8f529c58def
runtime: reset write barrier buffer on all flush paths

Currently, wbBufFlush does nothing if the goroutine is dying on the
assumption that the system is crashing anyway and running the write
barrier may crash it even more. However, it fails to reset the
buffer's "next" pointer. As a result, if there are later write
barriers on the same P, the write barrier will overflow the write
barrier buffer and start corrupting other fields in the P or other
heap objects. Often, this corrupts fields in the next allocated P
since they tend to be together in the heap.

Fix this by always resetting the buffer's "next" pointer, even if
we're not doing anything with the pointers in the buffer.

Updates #22987 and #22988. (May fix; it's hard to say.)

Change-Id: I82c11ea2d399e1658531c3e8065445a66b7282b2
Reviewed-on: https://go-review.googlesource.com/83016
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rick Hudson <rlh@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/runtime/mwbbuf.go