aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMatthew Auld <matthew.auld@intel.com>2021-01-22 18:15:13 +0000
committerDaniel Vetter <daniel.vetter@ffwll.ch>2021-03-24 19:30:35 +0100
commitf63f452ea6846867b7e775dcc0542b94fb9b1369 (patch)
treedd1d124abe04b3572714504e702381115cb6726c
parentdrm/i915/gt: Replace 'return' with a fall-through (diff)
downloadwireguard-linux-f63f452ea6846867b7e775dcc0542b94fb9b1369.tar.xz
wireguard-linux-f63f452ea6846867b7e775dcc0542b94fb9b1369.zip
drm/i915/gem: don't trust the dma_buf->size
At least for the time being, we need to limit our object sizes such that the number of pages can fit within a 32b signed int. It looks like we should also apply the same restriction to any imported dma-buf. Signed-off-by: Matthew Auld <matthew.auld@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20210122181514.541436-1-matthew.auld@intel.com Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c
index 04e9c04545ad..dc11497f830b 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c
@@ -244,6 +244,16 @@ struct drm_gem_object *i915_gem_prime_import(struct drm_device *dev,
}
}
+ /*
+ * XXX: There is a prevalence of the assumption that we fit the
+ * object's page count inside a 32bit _signed_ variable. Let's document
+ * this and catch if we ever need to fix it. In the meantime, if you do
+ * spot such a local variable, please consider fixing!
+ */
+
+ if (dma_buf->size >> PAGE_SHIFT > INT_MAX)
+ return ERR_PTR(-E2BIG);
+
/* need to attach */
attach = dma_buf_attach(dma_buf, dev->dev);
if (IS_ERR(attach))