NativeMIDI: Fix access to unaligned 64-bit data
Accessing unaligned 64-bit data in 32-bit ARM code leads
to SIGBUS / BUS_ADRALN fault. Since the timestamp position
in the message buffer is arbitrary, use memcpy to copy
it to the output argument.
Bug: 114123427
Test: 32-bit android.nativemidi.cts.NativeMidiEchoTest
Change-Id: I0cb08cb0b124e3f4a05ea19bf91f40081a584a2e
diff --git a/media/native/midi/midi.cpp b/media/native/midi/midi.cpp
index 78ca0ab..a5bdba8 100644
--- a/media/native/midi/midi.cpp
+++ b/media/native/midi/midi.cpp
@@ -338,7 +338,8 @@
numMessageBytes = std::min(maxBytes, numMessageBytes);
memcpy(buffer, readBuffer + 1, numMessageBytes);
if (timestampPtr != nullptr) {
- *timestampPtr = *(uint64_t*)(readBuffer + readCount - sizeof(uint64_t));
+ memcpy(timestampPtr, readBuffer + readCount - sizeof(uint64_t),
+ sizeof(*timestampPtr));
}
}
*numBytesReceivedPtr = numMessageBytes;