diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem_execbuffer.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_execbuffer.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c index 907386630e26..4192066ff60e 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c | |||
@@ -1512,7 +1512,7 @@ execbuf_submit(struct i915_execbuffer_params *params, | |||
1512 | params->args_batch_start_offset; | 1512 | params->args_batch_start_offset; |
1513 | 1513 | ||
1514 | if (exec_len == 0) | 1514 | if (exec_len == 0) |
1515 | exec_len = params->batch->size; | 1515 | exec_len = params->batch->size - params->args_batch_start_offset; |
1516 | 1516 | ||
1517 | ret = params->engine->emit_bb_start(params->request, | 1517 | ret = params->engine->emit_bb_start(params->request, |
1518 | exec_start, exec_len, | 1518 | exec_start, exec_len, |
@@ -1738,6 +1738,12 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, | |||
1738 | ret = -EINVAL; | 1738 | ret = -EINVAL; |
1739 | goto err; | 1739 | goto err; |
1740 | } | 1740 | } |
1741 | if (args->batch_start_offset > params->batch->size || | ||
1742 | args->batch_len > params->batch->size - args->batch_start_offset) { | ||
1743 | DRM_DEBUG("Attempting to use out-of-bounds batch\n"); | ||
1744 | ret = -EINVAL; | ||
1745 | goto err; | ||
1746 | } | ||
1741 | 1747 | ||
1742 | params->args_batch_start_offset = args->batch_start_offset; | 1748 | params->args_batch_start_offset = args->batch_start_offset; |
1743 | if (intel_engine_needs_cmd_parser(engine) && args->batch_len) { | 1749 | if (intel_engine_needs_cmd_parser(engine) && args->batch_len) { |