mirror of https://github.com/golang/go.git
runtime: check that sysUnused is always physical-page aligned
If sysUnused is passed an address or length that is not aligned to the physical page boundary, the kernel will unmap more memory than the caller wanted. Add a check for this. For #9993. Change-Id: I68ff03032e7b65cf0a853fe706ce21dc7f2aaaf8 Reviewed-on: https://go-review.googlesource.com/22065 Reviewed-by: Rick Hudson <rlh@golang.org> Reviewed-by: Dave Cheney <dave@cheney.net> Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
This commit is contained in:
parent
8ce844e88e
commit
1151473077
|
|
@ -132,6 +132,13 @@ func sysUnused(v unsafe.Pointer, n uintptr) {
|
|||
}
|
||||
}
|
||||
|
||||
if uintptr(v)&(sys.PhysPageSize-1) != 0 || n&(sys.PhysPageSize-1) != 0 {
|
||||
// madvise will round this to any physical page
|
||||
// *covered* by this range, so an unaligned madvise
|
||||
// will release more memory than intended.
|
||||
throw("unaligned sysUnused")
|
||||
}
|
||||
|
||||
madvise(v, n, _MADV_DONTNEED)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue