drm/i915: check for multiple write domains in pin_and_relocate
The assumption that an object has only ever one write domain is deeply threaded into gem (it's even encoded the the singular of the variable name). Don't let userspace screw us over. Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
922a2efc1b
commit
16edd55029
|
@ -3367,6 +3367,16 @@ i915_gem_object_pin_and_relocate(struct drm_gem_object *obj,
|
|||
}
|
||||
|
||||
/* Validate that the target is in a valid r/w GPU domain */
|
||||
if (reloc->write_domain & (reloc->write_domain - 1)) {
|
||||
DRM_ERROR("reloc with multiple write domains: "
|
||||
"obj %p target %d offset %d "
|
||||
"read %08x write %08x",
|
||||
obj, reloc->target_handle,
|
||||
(int) reloc->offset,
|
||||
reloc->read_domains,
|
||||
reloc->write_domain);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (reloc->write_domain & I915_GEM_DOMAIN_CPU ||
|
||||
reloc->read_domains & I915_GEM_DOMAIN_CPU) {
|
||||
DRM_ERROR("reloc with read/write CPU domains: "
|
||||
|
|
Loading…
Reference in New Issue