summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2015-07-21 13:46:45 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2015-07-28 18:09:06 +0100
commit1a6efaf68e207302cd9423051b8091fa663bbabe (patch)
treea3c008c484f6b41459849bc77186463233f3b5b9
parent293f8fac0a5c1cfd825005c94329aa8a5cd5ce30 (diff)
drm: Detect no-op drmModeAtomicRequest and return early
If the number of items to process in the request is zero, we can forgo duplicating, sorting the request and feeding it into the kernel and instead report success immediately. This prevents a NULL dereference of the sorted->items for the no-op request. Fixes: ed44e0b9585c563905447eceed12af9c1c7ca8d4 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Rob Clark <robclark@freedesktop.org> Cc: Daniel Stone <daniels@collabora.com> Cc: Emil Velikov <emil.l.velikov@gmail.com> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
-rw-r--r--xf86drmMode.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/xf86drmMode.c b/xf86drmMode.c
index 529429e8..fa219861 100644
--- a/xf86drmMode.c
+++ b/xf86drmMode.c
@@ -1289,7 +1289,7 @@ static int sort_req_list(const void *misc, const void *other)
int drmModeAtomicCommit(int fd, drmModeAtomicReqPtr req, uint32_t flags,
void *user_data)
{
- drmModeAtomicReqPtr sorted = drmModeAtomicDuplicate(req);
+ drmModeAtomicReqPtr sorted;
struct drm_mode_atomic atomic;
uint32_t *objs_ptr = NULL;
uint32_t *count_props_ptr = NULL;
@@ -1300,7 +1300,11 @@ int drmModeAtomicCommit(int fd, drmModeAtomicReqPtr req, uint32_t flags,
int obj_idx = -1;
int ret = -1;
- if (!sorted)
+ if (req->cursor == 0)
+ return 0;
+
+ sorted = drmModeAtomicDuplicate(req);
+ if (sorted == NULL)
return -ENOMEM;
memclear(atomic);