Commit f681c2aa authored by Rob Clark's avatar Rob Clark
Browse files

drm/msm: Fix another leak in the submit error path



put_unused_fd() doesn't free the installed file, if we've already done
fd_install().  So we need to also free the sync_file.

Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
Patchwork: https://patchwork.freedesktop.org/patch/653583/


Signed-off-by: default avatarRob Clark <robin.clark@oss.qualcomm.com>
parent 5d319f75
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -658,6 +658,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
	struct msm_ringbuffer *ring;
	struct msm_submit_post_dep *post_deps = NULL;
	struct drm_syncobj **syncobjs_to_reset = NULL;
	struct sync_file *sync_file = NULL;
	int out_fence_fd = -1;
	unsigned i;
	int ret;
@@ -867,7 +868,7 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
	}

	if (ret == 0 && args->flags & MSM_SUBMIT_FENCE_FD_OUT) {
		struct sync_file *sync_file = sync_file_create(submit->user_fence);
		sync_file = sync_file_create(submit->user_fence);
		if (!sync_file) {
			ret = -ENOMEM;
		} else {
@@ -901,8 +902,11 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
out_unlock:
	mutex_unlock(&queue->lock);
out_post_unlock:
	if (ret && (out_fence_fd >= 0))
	if (ret && (out_fence_fd >= 0)) {
		put_unused_fd(out_fence_fd);
		if (sync_file)
			fput(sync_file->file);
	}

	if (!IS_ERR_OR_NULL(submit)) {
		msm_gem_submit_put(submit);