* [PATCHv7 01/26] iommu/arm-smmu: change IOMMU_EXEC to IOMMU_NOEXEC [not found] <1411483586-29304-1-git-send-email-a.motakis@virtualopensystems.com> @ 2014-09-23 14:46 ` Antonios Motakis 2014-09-23 14:58 ` Will Deacon 2014-09-23 14:46 ` [PATCHv7 03/26] iommu/arm-smmu: add IOMMU_CAP_NOEXEC to the ARM SMMU driver Antonios Motakis 1 sibling, 1 reply; 4+ messages in thread From: Antonios Motakis @ 2014-09-23 14:46 UTC (permalink / raw) To: linux-arm-kernel 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> --- drivers/iommu/arm-smmu.c | 9 +++++---- include/linux/iommu.h | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index a83cc2a..c7cbdda 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -1252,7 +1252,7 @@ static int arm_smmu_alloc_init_pte(struct arm_smmu_device *smmu, pmd_t *pmd, unsigned long pfn, int prot, int stage) { 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)) { /* Allocate a new set of tables */ @@ -1286,10 +1286,11 @@ static int arm_smmu_alloc_init_pte(struct arm_smmu_device *smmu, pmd_t *pmd, 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 (prot & IOMMU_EXEC) - pteval &= ~ARM_SMMU_PTE_XN; - else if (!(prot & (IOMMU_READ | IOMMU_WRITE))) + if (!(prot & (IOMMU_READ | IOMMU_WRITE))) pteval &= ~ARM_SMMU_PTE_PAGE; pteval |= ARM_SMMU_PTE_SH_IS; diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 20f9a52..e1a644c 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -27,7 +27,7 @@ #define IOMMU_READ (1 << 0) #define IOMMU_WRITE (1 << 1) #define IOMMU_CACHE (1 << 2) /* DMA cache coherency */ -#define IOMMU_EXEC (1 << 3) +#define IOMMU_NOEXEC (1 << 3) struct iommu_ops; struct iommu_group; -- 1.8.3.2 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCHv7 01/26] iommu/arm-smmu: change IOMMU_EXEC to IOMMU_NOEXEC 2014-09-23 14:46 ` [PATCHv7 01/26] iommu/arm-smmu: change IOMMU_EXEC to IOMMU_NOEXEC Antonios Motakis @ 2014-09-23 14:58 ` Will Deacon 2014-09-23 22:14 ` Alex Williamson 0 siblings, 1 reply; 4+ messages in thread From: Will Deacon @ 2014-09-23 14:58 UTC (permalink / raw) To: linux-arm-kernel Hi Antonios, On Tue, Sep 23, 2014 at 03:46:00PM +0100, Antonios Motakis wrote: > 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> > --- > drivers/iommu/arm-smmu.c | 9 +++++---- > include/linux/iommu.h | 2 +- > 2 files changed, 6 insertions(+), 5 deletions(-) [...] > diff --git a/include/linux/iommu.h b/include/linux/iommu.h > index 20f9a52..e1a644c 100644 > --- a/include/linux/iommu.h > +++ b/include/linux/iommu.h > @@ -27,7 +27,7 @@ > #define IOMMU_READ (1 << 0) > #define IOMMU_WRITE (1 << 1) > #define IOMMU_CACHE (1 << 2) /* DMA cache coherency */ > -#define IOMMU_EXEC (1 << 3) > +#define IOMMU_NOEXEC (1 << 3) This hunk needs to be a separate patch merged by Joerg before I can take the arm-smmu part (which looks fine). Will ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCHv7 01/26] iommu/arm-smmu: change IOMMU_EXEC to IOMMU_NOEXEC 2014-09-23 14:58 ` Will Deacon @ 2014-09-23 22:14 ` Alex Williamson 0 siblings, 0 replies; 4+ messages in thread From: Alex Williamson @ 2014-09-23 22:14 UTC (permalink / raw) To: linux-arm-kernel On Tue, 2014-09-23 at 15:58 +0100, Will Deacon wrote: > Hi Antonios, > > On Tue, Sep 23, 2014 at 03:46:00PM +0100, Antonios Motakis wrote: > > 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> > > --- > > drivers/iommu/arm-smmu.c | 9 +++++---- > > include/linux/iommu.h | 2 +- > > 2 files changed, 6 insertions(+), 5 deletions(-) > > [...] > > > diff --git a/include/linux/iommu.h b/include/linux/iommu.h > > index 20f9a52..e1a644c 100644 > > --- a/include/linux/iommu.h > > +++ b/include/linux/iommu.h > > @@ -27,7 +27,7 @@ > > #define IOMMU_READ (1 << 0) > > #define IOMMU_WRITE (1 << 1) > > #define IOMMU_CACHE (1 << 2) /* DMA cache coherency */ > > -#define IOMMU_EXEC (1 << 3) > > +#define IOMMU_NOEXEC (1 << 3) > > This hunk needs to be a separate patch merged by Joerg before I can take the > arm-smmu part (which looks fine). That separate hunk would be unbuildable since arm-smmu depends on the IOMMU_EXEC define. Patch 2/ is also in iommu code and gates patch 3/ in arm-smmu. The IOMMU-core changes are pretty trivial, so perhaps Joerg would be willing to ACK 1&2 and let Will include the first 3 patches through his tree. These first 3 patches should have been sent on their own since they're small an obvious so they don't get hung up on the reset of the series. Thanks, Alex ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCHv7 03/26] iommu/arm-smmu: add IOMMU_CAP_NOEXEC to the ARM SMMU driver [not found] <1411483586-29304-1-git-send-email-a.motakis@virtualopensystems.com> 2014-09-23 14:46 ` [PATCHv7 01/26] iommu/arm-smmu: change IOMMU_EXEC to IOMMU_NOEXEC Antonios Motakis @ 2014-09-23 14:46 ` Antonios Motakis 1 sibling, 0 replies; 4+ messages in thread From: Antonios Motakis @ 2014-09-23 14:46 UTC (permalink / raw) To: linux-arm-kernel The ARM SMMU supports the IOMMU_NOEXEC protection flag. Add the corresponding IOMMU capability. Signed-off-by: Antonios Motakis <a.motakis@virtualopensystems.com> --- drivers/iommu/arm-smmu.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index c7cbdda..7c0fa25 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -1539,6 +1539,8 @@ static int arm_smmu_domain_has_cap(struct iommu_domain *domain, return features & ARM_SMMU_FEAT_COHERENT_WALK; case IOMMU_CAP_INTR_REMAP: return 1; /* MSIs are just memory writes */ + case IOMMU_CAP_NOEXEC: + return 1; default: return 0; } -- 1.8.3.2 ^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-09-23 22:14 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1411483586-29304-1-git-send-email-a.motakis@virtualopensystems.com>
2014-09-23 14:46 ` [PATCHv7 01/26] iommu/arm-smmu: change IOMMU_EXEC to IOMMU_NOEXEC Antonios Motakis
2014-09-23 14:58 ` Will Deacon
2014-09-23 22:14 ` Alex Williamson
2014-09-23 14:46 ` [PATCHv7 03/26] iommu/arm-smmu: add IOMMU_CAP_NOEXEC to the ARM SMMU driver Antonios Motakis
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).