Seemingly the 64-bit int is always aligned to 8 in LP64. But this is not hold in LP32.
Consequently sizeof(gralloc_drm_handle_t) are different between LP64 (which is 18 ints) and LP32 (which is 16 ints). As a result, 32-bit apps will crash in 64-bit OS since the checking handle->base.numInts != GRALLOC_GBM_HANDLE_NUM_INTS is true.
Fix it by always aligning 64-bit int to 8. Besides, to avoid additional padding, just exchange the order of data_owner and modifier. It aligns modifier to 8 natually. This makes gralloc_drm_handle_t fit in 16 ints perfectly.
(v2) gralloc_drm_handle.h patch now applied in gralloc_handle.h and GRALLOC_HANDLE_VERSION updated to 4
597725e9 android: Fix 32-bit app crashing in 64-bit Android
android/gralloc_handle.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)