Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fa460b88 authored by Hiroshi DOYU's avatar Hiroshi DOYU
Browse files

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: default avatarHiroshi DOYU <Hiroshi.DOYU@nokia.com>
Cc: David Cohen <david.cohen@nokia.com>
Cc: Sakari Ailus <Sakari.Ailus@nokia.com>
parent 347815fc
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -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",