mirror of
https://github.com/golang/go
synced 2024-11-23 19:00:04 -07:00
[dev.cc] runtime: fix bus error accessing auxv random data on arm5
It's rather unsporting of the kernel to give us a pointer to unaligned memory. This fixes one crash, the next crash occurs in the soft float emulation. LGTM=minux, rsc, austin R=minux, rsc, austin CC=golang-codereviews https://golang.org/cl/177730043
This commit is contained in:
parent
1f420c13bd
commit
14d23bfd7b
@ -50,9 +50,12 @@ func setup_auxv(argc int32, argv **byte) {
|
||||
|
||||
for i := 0; auxv[i] != _AT_NULL; i += 2 {
|
||||
switch auxv[i] {
|
||||
case _AT_RANDOM: // kernel provided 16-byte worth of random data
|
||||
case _AT_RANDOM: // kernel provides a pointer to 16-bytes worth of random data
|
||||
if auxv[i+1] != 0 {
|
||||
randomNumber = *(*uint32)(unsafe.Pointer(uintptr(auxv[i+1])))
|
||||
// the pointer provided may not be word alined, so we must to treat it
|
||||
// as a byte array.
|
||||
rnd := (*[16]byte)(unsafe.Pointer(uintptr(auxv[i+1])))
|
||||
randomNumber = uint32(rnd[0]) | uint32(rnd[1])<<8 | uint32(rnd[2])<<16 | uint32(rnd[3])<<24
|
||||
}
|
||||
|
||||
case _AT_PLATFORM: // v5l, v6l, v7l
|
||||
|
Loading…
Reference in New Issue
Block a user