Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/msm: fix leak in failed submit path

Signed-off-by: Rob Clark <robdclark@gmail.com>

Rob Clark 40e6815b 6860b56c

+13 -5
+1
drivers/gpu/drm/msm/msm_drv.h
··· 161 161 162 162 int msm_register_mmu(struct drm_device *dev, struct msm_mmu *mmu); 163 163 164 + void msm_gem_submit_free(struct msm_gem_submit *submit); 164 165 int msm_ioctl_gem_submit(struct drm_device *dev, void *data, 165 166 struct drm_file *file); 166 167
+11 -2
drivers/gpu/drm/msm/msm_gem_submit.c
··· 56 56 return submit; 57 57 } 58 58 59 + void msm_gem_submit_free(struct msm_gem_submit *submit) 60 + { 61 + fence_put(submit->fence); 62 + list_del(&submit->node); 63 + kfree(submit); 64 + } 65 + 59 66 static int submit_lookup_objects(struct msm_gem_submit *submit, 60 67 struct drm_msm_gem_submit *args, struct drm_file *file) 61 68 { ··· 331 324 return 0; 332 325 } 333 326 334 - static void submit_cleanup(struct msm_gem_submit *submit, bool fail) 327 + static void submit_cleanup(struct msm_gem_submit *submit) 335 328 { 336 329 unsigned i; 337 330 ··· 455 448 args->fence = submit->fence->seqno; 456 449 457 450 out: 458 - submit_cleanup(submit, !!ret); 451 + submit_cleanup(submit); 452 + if (ret) 453 + msm_gem_submit_free(submit); 459 454 mutex_unlock(&dev->struct_mutex); 460 455 return ret; 461 456 }
+1 -3
drivers/gpu/drm/msm/msm_gpu.c
··· 446 446 drm_gem_object_unreference(&msm_obj->base); 447 447 } 448 448 449 - fence_put(submit->fence); 450 - list_del(&submit->node); 451 - kfree(submit); 449 + msm_gem_submit_free(submit); 452 450 } 453 451 454 452 static void retire_submits(struct msm_gpu *gpu)