aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJike Song <jike.song@intel.com>2016-12-15 21:51:05 -0500
committerZhenyu Wang <zhenyuw@linux.intel.com>2016-12-25 20:45:29 -0500
commitfaaaa53bdc6750c438887d44f99b60ad97ec74b4 (patch)
tree5e1a0e43d3b4f64416770d2800fe98adf228e6f8
parentbfeca3e5716a16b95a1fb7104e477ca3bd5ed59e (diff)
drm/i915/gvt/kvmgt: check returned slot for gfn
gfn_to_memslot() may return NULL if the gfn is mmio or invalid. A malicious user might input a bad gfn to panic the host if we don't check it. Signed-off-by: Jike Song <jike.song@intel.com> Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
-rw-r--r--drivers/gpu/drm/i915/gvt/kvmgt.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c
index 4ba196796846..8b3b071a535e 100644
--- a/drivers/gpu/drm/i915/gvt/kvmgt.c
+++ b/drivers/gpu/drm/i915/gvt/kvmgt.c
@@ -1137,6 +1137,10 @@ static int kvmgt_write_protect_add(unsigned long handle, u64 gfn)
1137 1137
1138 idx = srcu_read_lock(&kvm->srcu); 1138 idx = srcu_read_lock(&kvm->srcu);
1139 slot = gfn_to_memslot(kvm, gfn); 1139 slot = gfn_to_memslot(kvm, gfn);
1140 if (!slot) {
1141 srcu_read_unlock(&kvm->srcu, idx);
1142 return -EINVAL;
1143 }
1140 1144
1141 spin_lock(&kvm->mmu_lock); 1145 spin_lock(&kvm->mmu_lock);
1142 1146
@@ -1167,6 +1171,10 @@ static int kvmgt_write_protect_remove(unsigned long handle, u64 gfn)
1167 1171
1168 idx = srcu_read_lock(&kvm->srcu); 1172 idx = srcu_read_lock(&kvm->srcu);
1169 slot = gfn_to_memslot(kvm, gfn); 1173 slot = gfn_to_memslot(kvm, gfn);
1174 if (!slot) {
1175 srcu_read_unlock(&kvm->srcu, idx);
1176 return -EINVAL;
1177 }
1170 1178
1171 spin_lock(&kvm->mmu_lock); 1179 spin_lock(&kvm->mmu_lock);
1172 1180