mirror of
https://github.com/golang/go
synced 2024-10-03 00:21:22 -06:00
runtime: check kernel physical page size during init
The runtime hard-codes an assumed physical page size. If this is smaller than the kernel's page size or not a multiple of it, sysUnused may incorrectly release more memory to the system than intended. Add a runtime startup check that the runtime's assumed physical page is compatible with the kernel's physical page size. For #9993. Change-Id: Ida9d07f93c00ca9a95dd55fc59bf0d8a607f6728 Reviewed-on: https://go-review.googlesource.com/22064 Reviewed-by: Rick Hudson <rlh@golang.org>
This commit is contained in:
parent
d6b177d1eb
commit
8ce844e88e
@ -178,6 +178,7 @@ var failthreadcreate = []byte("runtime: failed to create new OS thread\n")
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
_AT_NULL = 0 // End of vector
|
_AT_NULL = 0 // End of vector
|
||||||
|
_AT_PAGESZ = 6 // System physical page size
|
||||||
_AT_RANDOM = 25 // introduced in 2.6.29
|
_AT_RANDOM = 25 // introduced in 2.6.29
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -201,7 +202,21 @@ func sysargs(argc int32, argv **byte) {
|
|||||||
// The kernel provides a pointer to 16-bytes
|
// The kernel provides a pointer to 16-bytes
|
||||||
// worth of random data.
|
// worth of random data.
|
||||||
startupRandomData = (*[16]byte)(unsafe.Pointer(val))[:]
|
startupRandomData = (*[16]byte)(unsafe.Pointer(val))[:]
|
||||||
|
|
||||||
|
case _AT_PAGESZ:
|
||||||
|
// Check that the true physical page size is
|
||||||
|
// compatible with the runtime's assumed
|
||||||
|
// physical page size.
|
||||||
|
if sys.PhysPageSize < val {
|
||||||
|
print("runtime: kernel page size (", val, ") is larger than runtime page size (", sys.PhysPageSize, ")\n")
|
||||||
|
exit(1)
|
||||||
}
|
}
|
||||||
|
if sys.PhysPageSize%val != 0 {
|
||||||
|
print("runtime: runtime page size (", sys.PhysPageSize, ") is not a multiple of kernel page size (", val, ")\n")
|
||||||
|
exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
archauxv(tag, val)
|
archauxv(tag, val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user