OSDN Git Service

amdgpu: free flink bo in bo import
authorJunwei Zhang <Jerry.Zhang@amd.com>
Tue, 14 Aug 2018 03:00:08 +0000 (11:00 +0800)
committerChristian König <christian.koenig@amd.com>
Fri, 17 Aug 2018 10:54:36 +0000 (12:54 +0200)
Fix potential memory leak when handle flink bo in bo import.
Free the flink bo after bo import and in error handling.

Signed-off-by: Junwei Zhang <Jerry.Zhang@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
amdgpu/amdgpu_bo.c

index 8efd014..7ea1d0f 100644 (file)
@@ -255,6 +255,7 @@ int amdgpu_bo_import(amdgpu_device_handle dev,
                     struct amdgpu_bo_import_result *output)
 {
        struct drm_gem_open open_arg = {};
+       struct drm_gem_close close_arg = {};
        struct amdgpu_bo *bo = NULL;
        int r;
        int dma_fd;
@@ -342,15 +343,19 @@ int amdgpu_bo_import(amdgpu_device_handle dev,
 
                bo->handle = open_arg.handle;
                if (dev->flink_fd != dev->fd) {
+                       close_arg.handle = open_arg.handle;
                        r = drmPrimeHandleToFD(dev->flink_fd, bo->handle, DRM_CLOEXEC, &dma_fd);
                        if (r) {
                                free(bo);
+                               drmIoctl(dev->flink_fd, DRM_IOCTL_GEM_CLOSE,
+                                        &close_arg);
                                pthread_mutex_unlock(&dev->bo_table_mutex);
                                return r;
                        }
                        r = drmPrimeFDToHandle(dev->fd, dma_fd, &bo->handle );
 
                        close(dma_fd);
+                       drmIoctl(dev->flink_fd, DRM_IOCTL_GEM_CLOSE, &close_arg);
 
                        if (r) {
                                free(bo);