iommu/arm-smmu: change IOMMU_EXEC to IOMMU_NOEXEC
Exposing the XN flag of the SMMU driver as IOMMU_NOEXEC instead of IOMMU_EXEC makes it enforceable, since for IOMMUs that don't support the XN flag pages will always be executable. Signed-off-by: Antonios Motakis <a.motakis@virtualopensystems.com> Acked-by: Joerg Roedel <jroedel@suse.de> Signed-off-by: Will Deacon <will.deacon@arm.com>
This commit is contained in:
parent
f114040e3e
commit
a720b41c41
|
@ -1281,7 +1281,7 @@ static int arm_smmu_alloc_init_pte(struct arm_smmu_device *smmu, pmd_t *pmd,
|
||||||
unsigned long pfn, int prot, int stage)
|
unsigned long pfn, int prot, int stage)
|
||||||
{
|
{
|
||||||
pte_t *pte, *start;
|
pte_t *pte, *start;
|
||||||
pteval_t pteval = ARM_SMMU_PTE_PAGE | ARM_SMMU_PTE_AF | ARM_SMMU_PTE_XN;
|
pteval_t pteval = ARM_SMMU_PTE_PAGE | ARM_SMMU_PTE_AF;
|
||||||
|
|
||||||
if (pmd_none(*pmd)) {
|
if (pmd_none(*pmd)) {
|
||||||
/* Allocate a new set of tables */
|
/* Allocate a new set of tables */
|
||||||
|
@ -1315,10 +1315,11 @@ static int arm_smmu_alloc_init_pte(struct arm_smmu_device *smmu, pmd_t *pmd,
|
||||||
pteval |= ARM_SMMU_PTE_MEMATTR_NC;
|
pteval |= ARM_SMMU_PTE_MEMATTR_NC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (prot & IOMMU_NOEXEC)
|
||||||
|
pteval |= ARM_SMMU_PTE_XN;
|
||||||
|
|
||||||
/* If no access, create a faulting entry to avoid TLB fills */
|
/* If no access, create a faulting entry to avoid TLB fills */
|
||||||
if (prot & IOMMU_EXEC)
|
if (!(prot & (IOMMU_READ | IOMMU_WRITE)))
|
||||||
pteval &= ~ARM_SMMU_PTE_XN;
|
|
||||||
else if (!(prot & (IOMMU_READ | IOMMU_WRITE)))
|
|
||||||
pteval &= ~ARM_SMMU_PTE_PAGE;
|
pteval &= ~ARM_SMMU_PTE_PAGE;
|
||||||
|
|
||||||
pteval |= ARM_SMMU_PTE_SH_IS;
|
pteval |= ARM_SMMU_PTE_SH_IS;
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#define IOMMU_READ (1 << 0)
|
#define IOMMU_READ (1 << 0)
|
||||||
#define IOMMU_WRITE (1 << 1)
|
#define IOMMU_WRITE (1 << 1)
|
||||||
#define IOMMU_CACHE (1 << 2) /* DMA cache coherency */
|
#define IOMMU_CACHE (1 << 2) /* DMA cache coherency */
|
||||||
#define IOMMU_EXEC (1 << 3)
|
#define IOMMU_NOEXEC (1 << 3)
|
||||||
|
|
||||||
struct iommu_ops;
|
struct iommu_ops;
|
||||||
struct iommu_group;
|
struct iommu_group;
|
||||||
|
|
Loading…
Reference in New Issue