]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: on Plan 9, zero memory returned to the brk by sysFree
authorAustin Clements <austin@google.com>
Thu, 12 Feb 2015 15:37:01 +0000 (10:37 -0500)
committerAustin Clements <austin@google.com>
Thu, 12 Feb 2015 16:27:29 +0000 (16:27 +0000)
Plan 9's sysFree has an optimization where if the object being freed
is the last object allocated, it will roll back the brk to allow the
memory to be reused by sysAlloc.  However, it does not zero this
"returned" memory, so as a result, sysAlloc can return non-zeroed
memory after a sysFree.  This leads to corruption because the runtime
assumes sysAlloc returns zeroed memory.

Fix this by zeroing the memory returned by sysFree.

Fixes #9846.

Change-Id: Id328c58236eb7c464b31ac1da376a0b757a5dc6a
Reviewed-on: https://go-review.googlesource.com/4700
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: David du Colombier <0intro@gmail.com>
src/runtime/mem_plan9.go

index 477a52700e7c3f86bf5b104e6f6881e200e8ea3c..6ceed25d87972b85489a5a5cbc3b009773f10c67 100644 (file)
@@ -48,6 +48,7 @@ func sysFree(v unsafe.Pointer, n uintptr, stat *uint64) {
        n = memRound(n)
        if bloc == uintptr(v)+n {
                bloc -= n
+               memclr(unsafe.Pointer(bloc), n)
        }
        unlock(&memlock)
 }