From: Robin Murphy <robin.murphy-5wv7dgnIgG8@public.gmane.org>
To: Anup Patel <anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>,
Catalin Marinas <catalin.marinas-5wv7dgnIgG8@public.gmane.org>,
Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>,
Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>,
Robin Murphy <Robin.Murphy-5wv7dgnIgG8@public.gmane.org>,
Sricharan R <sricharan-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
Linux IOMMU
<iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>,
Linux ARM Kernel
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>
Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
Device Tree <devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Scott Branden <sbranden-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>,
Pawel Moll <pawel.moll-5wv7dgnIgG8@public.gmane.org>,
Ian Campbell
<ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org>,
Ray Jui <rjui-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>,
Linux Kernel
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Vikram Prakash <vikramp-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
BCM Kernel Feedback
<bcm-kernel-feedback-list-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>,
Kumar Gala <galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
Subject: Re: [RFC PATCH 5/6] iommu/arm-smmu: Option to treat instruction fetch as data read for SMMUv2
Date: Thu, 28 Jan 2016 17:10:33 +0000 [thread overview]
Message-ID: <56AA4B89.3040400@arm.com> (raw)
In-Reply-To: <1453872079-27140-6-git-send-email-anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
On 27/01/16 05:21, Anup Patel wrote:
> Currently, the SMMU driver by default provides unprivilege read-write
> permission in page table entries of stage1 page table. For SMMUv2 with
> aarch64 long descriptor format, a privilege instruction fetch will
> generate context fault. To allow privilege instruction fetch from a
> MMU master we need to treat instruction fetch as data read.
>
> This patch adds an optional DT attribute 'smmu-inst-as-data' to treat
> privilege/unprivilege instruction fetch as data read for SMMUv2.
What's the use-case for retaining the privilege attribute over the
instruction attribute? The pagetable code still maps everything with
unprivileged permissions, and it isn't going to be relevant for the vast
majority of devices. Conversely, the instruction/data distinction is
likely to be useful in a lot more cases - there's a veritable class of
exploits around tricking a DSP/GPU/VPU/whatever into executing malicious
firmware/shaders/etc. - and the IOMMU API does already have support for
that which this change subtly undermines: if you override INSTCFG this
way, you also need to stop the SMMU from claiming to support
IOMMU_NOEXEC, because it no longer will.
> Signed-off-by: Anup Patel <anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
> Reviewed-by: Ray Jui <rjui-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
> Reviewed-by: Vikram Prakash <vikramp-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
> Reviewed-by: Scott Branden <sbranden-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
> ---
> drivers/iommu/arm-smmu.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
> index 43424fe..a14850b 100644
> --- a/drivers/iommu/arm-smmu.c
> +++ b/drivers/iommu/arm-smmu.c
> @@ -169,6 +169,9 @@
> #define S2CR_TYPE_TRANS (0 << S2CR_TYPE_SHIFT)
> #define S2CR_TYPE_BYPASS (1 << S2CR_TYPE_SHIFT)
> #define S2CR_TYPE_FAULT (2 << S2CR_TYPE_SHIFT)
> +#define S2CR_INSTCFG_SHIFT 26
> +#define S2CR_INSTCFG_MASK 0x3
> +#define S2CR_INSTCFG_DATA (0x2 << S2CR_INSTCFG_SHIFT)
>
> /* Context bank attribute registers */
> #define ARM_SMMU_GR1_CBAR(n) (0x0 + ((n) << 2))
> @@ -305,6 +308,7 @@ struct arm_smmu_device {
> u32 features;
>
> #define ARM_SMMU_OPT_SECURE_CFG_ACCESS (1 << 0)
> +#define ARM_SMMU_OPT_INST_AS_DATA (1 << 1)
> u32 options;
> enum arm_smmu_arch_version version;
>
> @@ -366,6 +370,7 @@ struct arm_smmu_option_prop {
>
> static struct arm_smmu_option_prop arm_smmu_options[] = {
> { ARM_SMMU_OPT_SECURE_CFG_ACCESS, "calxeda,smmu-secure-config-access" },
> + { ARM_SMMU_OPT_INST_AS_DATA, "smmu-inst-as-data" },
> { 0, NULL},
> };
>
> @@ -1097,6 +1102,9 @@ static int arm_smmu_domain_add_master(struct arm_smmu_domain *smmu_domain,
> idx = cfg->smrs ? cfg->smrs[i].idx : cfg->streamids[i];
> s2cr = S2CR_TYPE_TRANS |
> (smmu_domain->cfg.cbndx << S2CR_CBNDX_SHIFT);
> + if ((smmu->version == ARM_SMMU_V2) &&
I would say this is too broad a condition - there's still no need to do
this for AArch32 contexts at stage 1, and there's no need for it at
stage 2 at all.
Robin.
> + (smmu->options & ARM_SMMU_OPT_INST_AS_DATA))
> + s2cr |= S2CR_INSTCFG_DATA;
> writel_relaxed(s2cr, gr0_base + ARM_SMMU_GR0_S2CR(idx));
> }
>
>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2016-01-28 17:10 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-27 5:21 [RFC PATCH 0/6] iommu/arm-smmu: Add support for DMA domains and instruction fetch Anup Patel
[not found] ` <1453872079-27140-1-git-send-email-anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2016-01-27 5:21 ` [RFC PATCH 1/6] iommu/arm-smmu: Init driver using IOMMU_OF_DECLARE Anup Patel
2016-01-27 5:21 ` [RFC PATCH 2/6] iommu/arm-smmu: Invoke DT probe from arm_smmu_of_setup() Anup Patel
2016-01-27 5:21 ` [RFC PATCH 3/6] of: iommu: Increment DT node refcount in of_iommu_set_ops() Anup Patel
2016-01-28 17:15 ` Robin Murphy
2016-01-27 5:21 ` [RFC PATCH 4/6] iommu/arm-smmu: Add support for IOMMU_DOMAIN_DMA in SMMUv1/SMMUv2 driver Anup Patel
[not found] ` <1453872079-27140-5-git-send-email-anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2016-01-28 17:28 ` Robin Murphy
2016-01-28 17:48 ` Mark Rutland
[not found] ` <56AA4FBE.6090702-5wv7dgnIgG8@public.gmane.org>
2016-01-29 3:58 ` Anup Patel
2016-01-27 5:21 ` [RFC PATCH 5/6] iommu/arm-smmu: Option to treat instruction fetch as data read for SMMUv2 Anup Patel
[not found] ` <1453872079-27140-6-git-send-email-anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2016-01-28 17:10 ` Robin Murphy [this message]
[not found] ` <56AA4B89.3040400-5wv7dgnIgG8@public.gmane.org>
2016-01-29 3:42 ` Anup Patel
2016-01-27 5:21 ` [RFC PATCH 6/6] iommu/arm-smmu: Update bindings document for smmu-inst-as-data DT option Anup Patel
[not found] ` <1453872079-27140-7-git-send-email-anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2016-01-27 12:28 ` Mark Rutland
2016-01-27 14:22 ` Anup Patel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=56AA4B89.3040400@arm.com \
--to=robin.murphy-5wv7dgnigg8@public.gmane.org \
--cc=anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org \
--cc=bcm-kernel-feedback-list-dY08KVG/lbpWk0Htik3J/w@public.gmane.org \
--cc=catalin.marinas-5wv7dgnIgG8@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
--cc=ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=pawel.moll-5wv7dgnIgG8@public.gmane.org \
--cc=rjui-dY08KVG/lbpWk0Htik3J/w@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=sbranden-dY08KVG/lbpWk0Htik3J/w@public.gmane.org \
--cc=sricharan-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
--cc=vikramp-dY08KVG/lbpWk0Htik3J/w@public.gmane.org \
--cc=will.deacon-5wv7dgnIgG8@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).