mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-10 14:19:09 -04:00
iommu: iommu-debug: check valid pfn before performing ATOS ops
ATOS operation can be fatal when performed on invalid pfn. Validate mapped entry pfn for validity before performing ATOS operation. Change-Id: Ie1b118d768c396f91618ee1eb101754cbee5318e Signed-off-by: Prakash Gupta <guptap@codeaurora.org> [isaacm@codeaurora: Move PFN validity check prior to IOVA assignment] Signed-off-by: Isaac J. Manjarres <isaacm@codeaurora.org>
This commit is contained in:
parent
bda68082e0
commit
a9cbc7f9c5
1 changed files with 9 additions and 0 deletions
|
|
@ -1562,6 +1562,8 @@ static ssize_t iommu_debug_atos_write(struct file *file,
|
|||
{
|
||||
struct iommu_debug_device *ddev = file->private_data;
|
||||
dma_addr_t iova;
|
||||
phys_addr_t phys;
|
||||
unsigned long pfn;
|
||||
|
||||
if (kstrtox_from_user(ubuf, count, 0, &iova)) {
|
||||
pr_err_ratelimited("Invalid format for iova\n");
|
||||
|
|
@ -1569,7 +1571,14 @@ static ssize_t iommu_debug_atos_write(struct file *file,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
phys = iommu_iova_to_phys(ddev->domain, ddev->iova);
|
||||
pfn = __phys_to_pfn(phys);
|
||||
if (!pfn_valid(pfn)) {
|
||||
dev_err(ddev->dev, "Invalid ATOS operation page %pa\n", &phys);
|
||||
return -EINVAL;
|
||||
}
|
||||
ddev->iova = iova;
|
||||
|
||||
pr_err_ratelimited("Saved iova=%pa for future ATOS commands\n", &iova);
|
||||
return count;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue