drm/i915: Bail early if we try to mmap an object too large to be mapped.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
fb7d516af1
commit
da761a6edf
|
@ -1258,6 +1258,7 @@ int
|
||||||
i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
|
i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file_priv)
|
struct drm_file *file_priv)
|
||||||
{
|
{
|
||||||
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
struct drm_i915_gem_mmap *args = data;
|
struct drm_i915_gem_mmap *args = data;
|
||||||
struct drm_gem_object *obj;
|
struct drm_gem_object *obj;
|
||||||
loff_t offset;
|
loff_t offset;
|
||||||
|
@ -1270,6 +1271,11 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data,
|
||||||
if (obj == NULL)
|
if (obj == NULL)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
|
||||||
|
if (obj->size > dev_priv->mm.gtt_mappable_end) {
|
||||||
|
drm_gem_object_unreference_unlocked(obj);
|
||||||
|
return -E2BIG;
|
||||||
|
}
|
||||||
|
|
||||||
offset = args->offset;
|
offset = args->offset;
|
||||||
|
|
||||||
down_write(¤t->mm->mmap_sem);
|
down_write(¤t->mm->mmap_sem);
|
||||||
|
@ -1547,6 +1553,7 @@ int
|
||||||
i915_gem_mmap_gtt_ioctl(struct drm_device *dev, void *data,
|
i915_gem_mmap_gtt_ioctl(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file_priv)
|
struct drm_file *file_priv)
|
||||||
{
|
{
|
||||||
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
struct drm_i915_gem_mmap_gtt *args = data;
|
struct drm_i915_gem_mmap_gtt *args = data;
|
||||||
struct drm_gem_object *obj;
|
struct drm_gem_object *obj;
|
||||||
struct drm_i915_gem_object *obj_priv;
|
struct drm_i915_gem_object *obj_priv;
|
||||||
|
@ -1566,6 +1573,11 @@ i915_gem_mmap_gtt_ioctl(struct drm_device *dev, void *data,
|
||||||
}
|
}
|
||||||
obj_priv = to_intel_bo(obj);
|
obj_priv = to_intel_bo(obj);
|
||||||
|
|
||||||
|
if (obj->size > dev_priv->mm.gtt_mappable_end) {
|
||||||
|
ret = -E2BIG;
|
||||||
|
goto unlock;
|
||||||
|
}
|
||||||
|
|
||||||
if (obj_priv->madv != I915_MADV_WILLNEED) {
|
if (obj_priv->madv != I915_MADV_WILLNEED) {
|
||||||
DRM_ERROR("Attempting to mmap a purgeable buffer\n");
|
DRM_ERROR("Attempting to mmap a purgeable buffer\n");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
|
Loading…
Reference in New Issue