From 8ed160d88bd834a22a3feccf3a1f215430c9431d Mon Sep 17 00:00:00 2001 From: Harshdeep Dhatt Date: Thu, 18 Mar 2021 10:55:52 +0530 Subject: [PATCH] msm: kgsl: Fix context leak in aux_command ioctl Currently, after timeline drawobj creation it is not immediately added to local drawobj list as a result if kgsl_drawobj_add_timeline fails this drawobj is leaked. As the timeline drawobj upon creation takes a refcount on the context this leak also results in context leak. Fix this by adding timeline drawobj to local drawobj list immediately after creation. Change-Id: I30f85506595ad7a7c54e82a7e850c96e7cdcbefd Signed-off-by: Harshdeep Dhatt Signed-off-by: Deepak Kumar --- drivers/gpu/msm/kgsl.c | 4 ++-- drivers/gpu/msm/kgsl_drawobj.c | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c index f099cab9ca81..ceddb7708d7b 100644 --- a/drivers/gpu/msm/kgsl.c +++ b/drivers/gpu/msm/kgsl.c @@ -2023,12 +2023,12 @@ long kgsl_ioctl_gpu_aux_command(struct kgsl_device_private *dev_priv, goto err; } + drawobjs[index++] = DRAWOBJ(timelineobj); + ret = kgsl_drawobj_add_timeline(dev_priv, timelineobj, u64_to_user_ptr(generic.priv), generic.size); if (ret) goto err; - - drawobjs[index++] = DRAWOBJ(timelineobj); } else { ret = -EINVAL; goto err; diff --git a/drivers/gpu/msm/kgsl_drawobj.c b/drivers/gpu/msm/kgsl_drawobj.c index 9f7883e9e24d..b2107bc2ac85 100644 --- a/drivers/gpu/msm/kgsl_drawobj.c +++ b/drivers/gpu/msm/kgsl_drawobj.c @@ -900,6 +900,7 @@ err: kgsl_timeline_put(timelineobj->timelines[i].timeline); kvfree(timelineobj->timelines); + timelineobj->timelines = NULL; return ret; }