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

Configure Feed

Select the types of activity you want to include in your feed.

drm/msm: Gracefully handle failure in _msm_gem_kernel_new

If any of the function calls in _msm_gem_kernel_new fail we need
to make sure to dereference the GEM object with the appropriate
function for the current locking state.

Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
Signed-off-by: Rob Clark <robdclark@gmail.com>

authored by

Jordan Crouse and committed by
Rob Clark
93f7abf1 546ec7b4

+12 -6
+12 -6
drivers/gpu/drm/msm/msm_gem.c
··· 1041 1041 1042 1042 if (iova) { 1043 1043 ret = msm_gem_get_iova(obj, aspace, iova); 1044 - if (ret) { 1045 - drm_gem_object_put(obj); 1046 - return ERR_PTR(ret); 1047 - } 1044 + if (ret) 1045 + goto err; 1048 1046 } 1049 1047 1050 1048 vaddr = msm_gem_get_vaddr(obj); 1051 1049 if (IS_ERR(vaddr)) { 1052 1050 msm_gem_put_iova(obj, aspace); 1053 - drm_gem_object_put(obj); 1054 - return ERR_CAST(vaddr); 1051 + ret = PTR_ERR(vaddr); 1052 + goto err; 1055 1053 } 1056 1054 1057 1055 if (bo) 1058 1056 *bo = obj; 1059 1057 1060 1058 return vaddr; 1059 + err: 1060 + if (locked) 1061 + drm_gem_object_put(obj); 1062 + else 1063 + drm_gem_object_put_unlocked(obj); 1064 + 1065 + return ERR_PTR(ret); 1066 + 1061 1067 } 1062 1068 1063 1069 void *msm_gem_kernel_new(struct drm_device *dev, uint32_t size,