diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 725b4484a092..c60ca32f65d2 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
@@ -3158,6 +3158,16 @@ i915_gem_object_pin_and_relocate(struct drm_gem_object *obj, | |||
3158 | return -EINVAL; | 3158 | return -EINVAL; |
3159 | } | 3159 | } |
3160 | 3160 | ||
3161 | if (reloc->delta >= target_obj->size) { | ||
3162 | DRM_ERROR("Relocation beyond target object bounds: " | ||
3163 | "obj %p target %d delta %d size %d.\n", | ||
3164 | obj, reloc->target_handle, | ||
3165 | (int) reloc->delta, (int) target_obj->size); | ||
3166 | drm_gem_object_unreference(target_obj); | ||
3167 | i915_gem_object_unpin(obj); | ||
3168 | return -EINVAL; | ||
3169 | } | ||
3170 | |||
3161 | if (reloc->write_domain & I915_GEM_DOMAIN_CPU || | 3171 | if (reloc->write_domain & I915_GEM_DOMAIN_CPU || |
3162 | reloc->read_domains & I915_GEM_DOMAIN_CPU) { | 3172 | reloc->read_domains & I915_GEM_DOMAIN_CPU) { |
3163 | DRM_ERROR("reloc with read/write CPU domains: " | 3173 | DRM_ERROR("reloc with read/write CPU domains: " |