diff options
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 15 |
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 | ||
| 1774 | err: | 1778 | err: |
| 1775 | i915_gem_object_put(obj); | 1779 | i915_gem_object_put(obj); |
| 1776 | |||
| 1777 | return addr; | 1780 | return addr; |
| 1778 | } | 1781 | } |
| 1779 | 1782 | ||
