aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPing Gao <ping.a.gao@intel.com>2017-07-04 04:09:58 -0400
committerZhenyu Wang <zhenyuw@linux.intel.com>2017-07-11 01:46:58 -0400
commit3364bf5fd00f0391ad090f547932a5c4b2068dbc (patch)
treefd2d4a63c55ec6535b72959e3259f4e8e0f89ffd
parent0de98709896d9c02ce3121ec3afb524253a5853f (diff)
drm/i915/gvt: Audit the command buffer address
The command buffer address in context like ring buffer base address and wa_ctx address need to be audit to make sure they are in the valid GGTT range. Signed-off-by: Ping Gao <ping.a.gao@intel.com> Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
-rw-r--r--drivers/gpu/drm/i915/gvt/cmd_parser.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c
index 51241de5e7a7..713848c36349 100644
--- a/drivers/gpu/drm/i915/gvt/cmd_parser.c
+++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c
@@ -2536,6 +2536,11 @@ static int scan_workload(struct intel_vgpu_workload *workload)
2536 gma_head == gma_tail) 2536 gma_head == gma_tail)
2537 return 0; 2537 return 0;
2538 2538
2539 if (!intel_gvt_ggtt_validate_range(s.vgpu, s.ring_start, s.ring_size)) {
2540 ret = -EINVAL;
2541 goto out;
2542 }
2543
2539 ret = ip_gma_set(&s, gma_head); 2544 ret = ip_gma_set(&s, gma_head);
2540 if (ret) 2545 if (ret)
2541 goto out; 2546 goto out;
@@ -2579,6 +2584,11 @@ static int scan_wa_ctx(struct intel_shadow_wa_ctx *wa_ctx)
2579 s.rb_va = wa_ctx->indirect_ctx.shadow_va; 2584 s.rb_va = wa_ctx->indirect_ctx.shadow_va;
2580 s.workload = workload; 2585 s.workload = workload;
2581 2586
2587 if (!intel_gvt_ggtt_validate_range(s.vgpu, s.ring_start, s.ring_size)) {
2588 ret = -EINVAL;
2589 goto out;
2590 }
2591
2582 ret = ip_gma_set(&s, gma_head); 2592 ret = ip_gma_set(&s, gma_head);
2583 if (ret) 2593 if (ret)
2584 goto out; 2594 goto out;