From 27ed1fcb04701477a62cc7cf883a1d64e26e6da9 Mon Sep 17 00:00:00 2001 From: Austin Clements Date: Thu, 12 Feb 2015 10:37:01 -0500 Subject: [PATCH] runtime: on Plan 9, zero memory returned to the brk by sysFree 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 Reviewed-by: David du Colombier <0intro@gmail.com> --- src/runtime/mem_plan9.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/runtime/mem_plan9.go b/src/runtime/mem_plan9.go index 477a52700e..6ceed25d87 100644 --- a/src/runtime/mem_plan9.go +++ b/src/runtime/mem_plan9.go @@ -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) } -- 2.50.0