From: Rick Hudson Date: Mon, 22 Jun 2015 18:05:00 +0000 (-0400) Subject: runtime: remove race and increase precision in pointer validation. X-Git-Tag: go1.5beta1~152 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=1ab9176e54bedd37cbb0c6941160a0cfc2e24eac;p=gostls13.git runtime: remove race and increase precision in pointer validation. This CL removes the single and racy use of mheap.arena_end outside of the bookkeeping done in mHeap_init and mHeap_Alloc. There should be no way for heapBitsForSpan to see a pointer to an invalid span. This CL makes the check for this more precise by checking that the pointer is between mheap_.arena_start and mheap_.arena_used instead of mheap_.arena_end. Change-Id: I1200b54353ee1eda002d92645fd8d26048600ceb Reviewed-on: https://go-review.googlesource.com/11342 Reviewed-by: Austin Clements --- diff --git a/src/runtime/mbitmap.go b/src/runtime/mbitmap.go index 146ffbfcb6..4d39c321d8 100644 --- a/src/runtime/mbitmap.go +++ b/src/runtime/mbitmap.go @@ -164,7 +164,7 @@ func heapBitsForAddr(addr uintptr) heapBits { // heapBitsForSpan returns the heapBits for the span base address base. func heapBitsForSpan(base uintptr) (hbits heapBits) { - if base < mheap_.arena_start || base >= mheap_.arena_end { + if base < mheap_.arena_start || base >= mheap_.arena_used { throw("heapBitsForSpan: base out of range") } hbits = heapBitsForAddr(base)