omap iommu: Insert a gap page between IOVMAs against override
authorHiroshi DOYU <Hiroshi.DOYU@nokia.com>
Thu, 6 May 2010 13:10:18 +0000 (16:10 +0300)
committerHiroshi DOYU <Hiroshi.DOYU@nokia.com>
Fri, 14 May 2010 07:23:36 +0000 (10:23 +0300)
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>
arch/arm/plat-omap/iovmm.c

index 65c6d1ff72370c37a9840ff2942f270de08d95f7..5afe0135b979c1c95ef0d9c19378a9aa276c2626 100644 (file)
@@ -287,16 +287,16 @@ static struct iovm_struct *alloc_iovm_area(struct iommu *obj, u32 da,
        prev_end = 0;
        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;
 
                if (flags & IOVMF_DA_ANON)
-                       start = roundup(tmp->da_end, alignement);
+                       start = roundup(tmp->da_end + 1, alignement);
 
                prev_end = tmp->da_end;
        }
 
-       if ((start >= prev_end) && (ULONG_MAX - start >= bytes))
+       if ((start > prev_end) && (ULONG_MAX - start >= bytes))
                goto found;
 
        dev_dbg(obj->dev, "%s: no space to fit %08x(%x) flags: %08x\n",