From c4b22eb59c8003a2975b26186a818fc4f1aefb1b Mon Sep 17 00:00:00 2001 From: Chris Michael Date: Wed, 19 Apr 2017 14:56:27 -0400 Subject: [PATCH] ecore-drm2: Iterate plane formats properly This patch addresses an issue where plane formats were not being properly copied into our Plane State structure and causing any usage of our atomic code paths to crash and burn @fix Signed-off-by: Chris Michael --- src/lib/ecore_drm2/ecore_drm2_device.c | 9 +++++++-- src/lib/ecore_drm2/ecore_drm2_private.h | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/lib/ecore_drm2/ecore_drm2_device.c b/src/lib/ecore_drm2/ecore_drm2_device.c index 74284c4502..a771091a52 100644 --- a/src/lib/ecore_drm2/ecore_drm2_device.c +++ b/src/lib/ecore_drm2/ecore_drm2_device.c @@ -527,6 +527,8 @@ _drm2_atomic_state_fill(Ecore_Drm2_Atomic_State *state, int fd) state->plane_states = calloc(state->planes, sizeof(Ecore_Drm2_Plane_State)); if (state->plane_states) { + unsigned int f = 0; + for (i = 0; i < state->planes; i++) { drmModePlanePtr plane; @@ -539,8 +541,11 @@ _drm2_atomic_state_fill(Ecore_Drm2_Atomic_State *state, int fd) pstate->obj_id = pres->planes[i]; pstate->mask = plane->possible_crtcs; pstate->num_formats = plane->count_formats; - memcpy(pstate->formats, plane->formats, - plane->count_formats * sizeof(plane->formats[0])); + + pstate->formats = calloc(plane->count_formats, sizeof(uint32_t)); + + for (f = 0; f < plane->count_formats; f++) + pstate->formats[f] = plane->formats[f]; sym_drmModeFreePlane(plane); diff --git a/src/lib/ecore_drm2/ecore_drm2_private.h b/src/lib/ecore_drm2/ecore_drm2_private.h index 7bc69bf460..73e61f2431 100644 --- a/src/lib/ecore_drm2/ecore_drm2_private.h +++ b/src/lib/ecore_drm2/ecore_drm2_private.h @@ -649,7 +649,7 @@ typedef struct _Ecore_Drm2_Plane_State uint32_t supported_rotations; uint32_t num_formats; - uint32_t formats[]; + uint32_t *formats; } Ecore_Drm2_Plane_State; struct _Ecore_Drm2_Atomic_State