Commit 18226ba52159 ("drm/syncobj: reject invalid flags in
drm_syncobj_find_fence") forgot to take into account the fact that
drm_syncobj_find() takes a reference to syncobj and returns early
without dropping the reference, leading to memory leaks.

Fixes: 18226ba52159 ("drm/syncobj: reject invalid flags in 
drm_syncobj_find_fence")
Reported by: Sam Spencer <[email protected]>
Signed-off-by: Liviu Dudau <[email protected]>
---
 drivers/gpu/drm/drm_syncobj.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
index 8d9fd1917c6e6..c9dbf64c0c9f2 100644
--- a/drivers/gpu/drm/drm_syncobj.c
+++ b/drivers/gpu/drm/drm_syncobj.c
@@ -442,13 +442,15 @@ int drm_syncobj_find_fence(struct drm_file *file_private,
        u64 timeout = nsecs_to_jiffies64(DRM_SYNCOBJ_WAIT_FOR_SUBMIT_TIMEOUT);
        int ret;
 
-       if (flags & ~DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT)
-               return -EINVAL;
-
        if (!syncobj)
                return -ENOENT;
 
-       /* Waiting for userspace with locks help is illegal cause that can
+       if (flags & ~DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT) {
+               ret = -EINVAL;
+               goto out;
+       }
+
+       /* Waiting for userspace with locks held is illegal cause that can
         * trivial deadlock with page faults for example. Make lockdep complain
         * about it early on.
         */
-- 
2.54.0

Reply via email to