aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2016-11-14 06:29:30 -0500
committerChris Wilson <chris@chris-wilson.co.uk>2016-11-18 15:51:53 -0500
commitb17993b7b29612369270567643bcff814f4b3d7f (patch)
tree4d2f3fdbc2b7d2a494ef79f6b5dcffecd71dbcb7
parent786d290cae849a8fc1145e969bfb0953072e3fc7 (diff)
drm/i915: Don't touch NULL sg on i915_gem_object_get_pages_gtt() error
On the DMA mapping error path, sg may be NULL (it has already been marked as the last scatterlist entry), and we should avoid dereferencing it again. Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Fixes: e227330223a7 ("drm/i915: avoid leaking DMA mappings") Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Imre Deak <imre.deak@intel.com> Cc: stable@vger.kernel.org Link: http://patchwork.freedesktop.org/patch/msgid/20161114112930.2033-1-chris@chris-wilson.co.uk Reviewed-by: Matthew Auld <matthew.auld@intel.com>
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index d5b7723bb028..4500731fed10 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2386,7 +2386,7 @@ i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
2386 page = shmem_read_mapping_page(mapping, i); 2386 page = shmem_read_mapping_page(mapping, i);
2387 if (IS_ERR(page)) { 2387 if (IS_ERR(page)) {
2388 ret = PTR_ERR(page); 2388 ret = PTR_ERR(page);
2389 goto err_pages; 2389 goto err_sg;
2390 } 2390 }
2391 } 2391 }
2392 if (!i || 2392 if (!i ||
@@ -2419,8 +2419,9 @@ i915_gem_object_get_pages_gtt(struct drm_i915_gem_object *obj)
2419 2419
2420 return st; 2420 return st;
2421 2421
2422err_pages: 2422err_sg:
2423 sg_mark_end(sg); 2423 sg_mark_end(sg);
2424err_pages:
2424 for_each_sgt_page(page, sgt_iter, st) 2425 for_each_sgt_page(page, sgt_iter, st)
2425 put_page(page); 2426 put_page(page);
2426 sg_free_table(st); 2427 sg_free_table(st);