浏览代码

drm/exynos: fixed exynos_drm_gem_map_pages bug.

this patch fixes the problem that the physical memory region to be mapped
to user space could be exceeded. if page fault address was placed at between
buffer start and end then memory region to be mapped would be exceeded.

Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Inki Dae 13 年之前
父节点
当前提交
f6ead8dea5
共有 1 个文件被更改,包括 3 次插入13 次删除
  1. 3 13
      drivers/gpu/drm/exynos/exynos_drm_gem.c

+ 3 - 13
drivers/gpu/drm/exynos/exynos_drm_gem.c

@@ -149,22 +149,12 @@ static int exynos_drm_gem_map_pages(struct drm_gem_object *obj,
 	unsigned long pfn;
 	unsigned long pfn;
 
 
 	if (exynos_gem_obj->flags & EXYNOS_BO_NONCONTIG) {
 	if (exynos_gem_obj->flags & EXYNOS_BO_NONCONTIG) {
-		unsigned long usize = buf->size;
-
 		if (!buf->pages)
 		if (!buf->pages)
 			return -EINTR;
 			return -EINTR;
 
 
-		while (usize > 0) {
-			pfn = page_to_pfn(buf->pages[page_offset++]);
-			vm_insert_mixed(vma, f_vaddr, pfn);
-			f_vaddr += PAGE_SIZE;
-			usize -= PAGE_SIZE;
-		}
-
-		return 0;
-	}
-
-	pfn = (buf->dma_addr >> PAGE_SHIFT) + page_offset;
+		pfn = page_to_pfn(buf->pages[page_offset++]);
+	} else
+		pfn = (buf->dma_addr >> PAGE_SHIFT) + page_offset;
 
 
 	return vm_insert_mixed(vma, f_vaddr, pfn);
 	return vm_insert_mixed(vma, f_vaddr, pfn);
 }
 }