• Austin Clements's avatar
    runtime: reset write barrier buffer on all flush paths · 043f112e
    Austin Clements authored
    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: 's avatarRick Hudson <rlh@golang.org>
    Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
    043f112e
mwbbuf.go 8.13 KB