drm: Branch 'master'
[email protected] (GitLab Mirror) Tue, 18 Dec 2018 20:26:46 +0000 (UTC)
| Newsgroups | gmane.comp.video.dri.patches |
|---|---|
| Message-ID | <[email protected]> |
android/gralloc_handle.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) New commits: commit 597725e9511f8c0405fdd8d92d749bce58c0bce3 Author: Mauro Rossi <[email protected]> Date: Tue Dec 11 23:22:35 2018 +0100 android: Fix 32-bit app crashing in 64-bit Android 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 Reported-by: Mauro Rossi <[email protected]> Signed-off-by: Chih-Wei Huang <[email protected]> Reviewed-by: Robert Foss <[email protected]> diff --git a/android/gralloc_handle.h b/android/gralloc_handle.h index bcf753da..d3d975ee 100644 --- a/android/gralloc_handle.h +++ b/android/gralloc_handle.h @@ -60,16 +60,16 @@ struct gralloc_handle_t { uint32_t usage; /* android libhardware usage flags */ uint32_t stride; /* the stride in bytes */ - uint64_t modifier; /* buffer modifiers */ - int data_owner; /* owner of data (for validation) */ + uint64_t modifier __attribute__((aligned(8))); /* buffer modifiers */ + union { void *data; /* pointer to struct gralloc_gbm_bo_t */ uint64_t reserved; } __attribute__((aligned(8))); }; -#define GRALLOC_HANDLE_VERSION 3 +#define GRALLOC_HANDLE_VERSION 4 #define GRALLOC_HANDLE_MAGIC 0x60585350 #define GRALLOC_HANDLE_NUM_FDS 1 #define GRALLOC_HANDLE_NUM_INTS ( \ --