summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kgsl.c4
-rw-r--r--kgsl_iommu.c14
2 files changed, 14 insertions, 4 deletions
diff --git a/kgsl.c b/kgsl.c
index 173018e..c83d4c1 100644
--- a/kgsl.c
+++ b/kgsl.c
@@ -2304,6 +2304,10 @@ long kgsl_ioctl_gpu_aux_command(struct kgsl_device_private *dev_priv,
(KGSL_GPU_AUX_COMMAND_BIND | KGSL_GPU_AUX_COMMAND_TIMELINE)))
return -EINVAL;
+ if ((param->flags & KGSL_GPU_AUX_COMMAND_SYNC) &&
+ (param->numsyncs > KGSL_MAX_SYNCPOINTS))
+ return -EINVAL;
+
context = kgsl_context_get_owner(dev_priv, param->context_id);
if (!context)
return -EINVAL;
diff --git a/kgsl_iommu.c b/kgsl_iommu.c
index 23fee14..7dc6c04 100644
--- a/kgsl_iommu.c
+++ b/kgsl_iommu.c
@@ -1971,14 +1971,20 @@ static uint64_t kgsl_iommu_find_svm_region(struct kgsl_pagetable *pagetable,
static bool iommu_addr_in_svm_ranges(struct kgsl_pagetable *pagetable,
u64 gpuaddr, u64 size)
{
+ u64 end = gpuaddr + size;
+
+ /* Make sure size is not zero and we don't wrap around */
+ if (end <= gpuaddr)
+ return false;
+
if ((gpuaddr >= pagetable->compat_va_start && gpuaddr < pagetable->compat_va_end) &&
- ((gpuaddr + size) > pagetable->compat_va_start &&
- (gpuaddr + size) <= pagetable->compat_va_end))
+ (end > pagetable->compat_va_start &&
+ end <= pagetable->compat_va_end))
return true;
if ((gpuaddr >= pagetable->svm_start && gpuaddr < pagetable->svm_end) &&
- ((gpuaddr + size) > pagetable->svm_start &&
- (gpuaddr + size) <= pagetable->svm_end))
+ (end > pagetable->svm_start &&
+ end <= pagetable->svm_end))
return true;
return false;