Browse Source

omap iommu: Insert a gap page between IOVMAs against override

Inserting a gap page between IOVMAs could detect an override on other
IOVMA with iommu fault. This was originally suggested by Sakari Ailus
and based on the work and comment by David Cohen.

Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com>
Cc: David Cohen <david.cohen@nokia.com>
Cc: Sakari Ailus <Sakari.Ailus@nokia.com>
Hiroshi DOYU 15 years ago
parent
commit
fa460b88e0
1 changed files with 3 additions and 3 deletions
  1. 3 3
      arch/arm/plat-omap/iovmm.c

+ 3 - 3
arch/arm/plat-omap/iovmm.c

@@ -287,16 +287,16 @@ static struct iovm_struct *alloc_iovm_area(struct iommu *obj, u32 da,
 	prev_end = 0;
 	prev_end = 0;
 	list_for_each_entry(tmp, &obj->mmap, list) {
 	list_for_each_entry(tmp, &obj->mmap, list) {
 
 
-		if ((prev_end <= start) && (start + bytes < tmp->da_start))
+		if ((prev_end < start) && (start + bytes < tmp->da_start))
 			goto found;
 			goto found;
 
 
 		if (flags & IOVMF_DA_ANON)
 		if (flags & IOVMF_DA_ANON)
-			start = roundup(tmp->da_end, alignement);
+			start = roundup(tmp->da_end + 1, alignement);
 
 
 		prev_end = tmp->da_end;
 		prev_end = tmp->da_end;
 	}
 	}
 
 
-	if ((start >= prev_end) && (ULONG_MAX - start >= bytes))
+	if ((start > prev_end) && (ULONG_MAX - start >= bytes))
 		goto found;
 		goto found;
 
 
 	dev_dbg(obj->dev, "%s: no space to fit %08x(%x) flags: %08x\n",
 	dev_dbg(obj->dev, "%s: no space to fit %08x(%x) flags: %08x\n",