mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: fix stackFromSystem returning memory
The stackFromSystem debug mode has two problems: 1) It rounds the stack allocation to _PageSize. If the physical page size is >8K, this can cause unmapping the memory later to either under-unmap or over-unmap. 2) It doesn't return the rounded-up allocation size to its caller, so when we later unmap the memory, we may pass the wrong length. Fix these problems by rounding the size up to the physical page size and putting that rounded-up size in the returned stack bounds. Fixes #17289. Change-Id: I6b854af3b06bb16e3750798397bb5e2a722ec1cb Reviewed-on: https://go-review.googlesource.com/43636 Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
e16944da0e
commit
8a1c5b2e48
1 changed files with 2 additions and 1 deletions
|
|
@ -337,7 +337,8 @@ func stackalloc(n uint32) stack {
|
|||
}
|
||||
|
||||
if debug.efence != 0 || stackFromSystem != 0 {
|
||||
v := sysAlloc(round(uintptr(n), _PageSize), &memstats.stacks_sys)
|
||||
n = uint32(round(uintptr(n), physPageSize))
|
||||
v := sysAlloc(uintptr(n), &memstats.stacks_sys)
|
||||
if v == nil {
|
||||
throw("out of memory (stackalloc)")
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue