for i := 0; auxv[i] != _AT_NULL; i += 2 {
                switch auxv[i] {
                case _AT_RANDOM: // kernel provides a pointer to 16-bytes worth of random data
-                       if auxv[i+1] != 0 {
-                               // 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
-                       }
+                       startupRandomData = (*[16]byte)(unsafe.Pointer(uintptr(auxv[i+1])))[:]
+                       // the pointer provided may not be word alined, so we must to treat it
+                       // as a byte array.
+                       randomNumber = uint32(startupRandomData[4]) | uint32(startupRandomData[5])<<8 |
+                               uint32(startupRandomData[6])<<16 | uint32(startupRandomData[7])<<24
 
                case _AT_PLATFORM: // v5l, v6l, v7l
                        t := *(*uint8)(unsafe.Pointer(uintptr(auxv[i+1] + 1)))