Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aa149431 authored by Chris Wilson's avatar Chris Wilson
Browse files

drm/i915: Sanity check the vma->node prior to binding into the GTT



We rely on the VMA being allocated inside the drm_mm and for its allotted
node being large enough to accommodate all the vma->pages.

Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Matthew Auld <matthew.william.auld@gmail.com>
Reviewed-by: default avatarMatthew Auld <matthew.william.auld@gmail.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170225181122.4788-3-chris@chris-wilson.co.uk
parent 357480ce
Loading
Loading
Loading
Loading
+9 −6
Original line number Original line Diff line number Diff line
@@ -241,7 +241,15 @@ int i915_vma_bind(struct i915_vma *vma, enum i915_cache_level cache_level,
	u32 vma_flags;
	u32 vma_flags;
	int ret;
	int ret;


	if (WARN_ON(flags == 0))
	GEM_BUG_ON(!drm_mm_node_allocated(&vma->node));
	GEM_BUG_ON(vma->size > vma->node.size);

	if (GEM_WARN_ON(range_overflows(vma->node.start,
					vma->node.size,
					vma->vm->total)))
		return -ENODEV;

	if (GEM_WARN_ON(!flags))
		return -EINVAL;
		return -EINVAL;


	bind_flags = 0;
	bind_flags = 0;
@@ -258,11 +266,6 @@ int i915_vma_bind(struct i915_vma *vma, enum i915_cache_level cache_level,
	if (bind_flags == 0)
	if (bind_flags == 0)
		return 0;
		return 0;


	if (GEM_WARN_ON(range_overflows(vma->node.start,
					vma->node.size,
					vma->vm->total)))
		return -ENODEV;

	trace_i915_vma_bind(vma, bind_flags);
	trace_i915_vma_bind(vma, bind_flags);
	ret = vma->vm->bind_vma(vma, cache_level, bind_flags);
	ret = vma->vm->bind_vma(vma, cache_level, bind_flags);
	if (ret)
	if (ret)