aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 30d516e975c6..8558e81fdc2a 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1734,8 +1734,13 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
1734 * pages from. 1734 * pages from.
1735 */ 1735 */
1736 if (!obj->base.filp) { 1736 if (!obj->base.filp) {
1737 i915_gem_object_put(obj); 1737 addr = -ENXIO;
1738 return -ENXIO; 1738 goto err;
1739 }
1740
1741 if (range_overflows(args->offset, args->size, (u64)obj->base.size)) {
1742 addr = -EINVAL;
1743 goto err;
1739 } 1744 }
1740 1745
1741 addr = vm_mmap(obj->base.filp, 0, args->size, 1746 addr = vm_mmap(obj->base.filp, 0, args->size,
@@ -1749,8 +1754,8 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
1749 struct vm_area_struct *vma; 1754 struct vm_area_struct *vma;
1750 1755
1751 if (down_write_killable(&mm->mmap_sem)) { 1756 if (down_write_killable(&mm->mmap_sem)) {
1752 i915_gem_object_put(obj); 1757 addr = -EINTR;
1753 return -EINTR; 1758 goto err;
1754 } 1759 }
1755 vma = find_vma(mm, addr); 1760 vma = find_vma(mm, addr);
1756 if (vma && __vma_matches(vma, obj->base.filp, addr, args->size)) 1761 if (vma && __vma_matches(vma, obj->base.filp, addr, args->size))
@@ -1768,12 +1773,10 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
1768 i915_gem_object_put(obj); 1773 i915_gem_object_put(obj);
1769 1774
1770 args->addr_ptr = (u64)addr; 1775 args->addr_ptr = (u64)addr;
1771
1772 return 0; 1776 return 0;
1773 1777
1774err: 1778err:
1775 i915_gem_object_put(obj); 1779 i915_gem_object_put(obj);
1776
1777 return addr; 1780 return addr;
1778} 1781}
1779 1782