From: Sascha Hauer <s.hauer@pengutronix.de>
To: Ahmad Fatoum <a.fatoum@pengutronix.de>
Cc: Barebox List <barebox@lists.infradead.org>
Subject: Re: [PATCH 1/2] ARM: i.MX: tqma6ulx: fix barebox chainloading with OP-TEE enabled
Date: Fri, 27 Jun 2025 14:43:37 +0200 [thread overview]
Message-ID: <aF6R-RbRmCgcp9AE@pengutronix.de> (raw)
In-Reply-To: <70b41f3b-4329-48f7-827f-1924e002ab04@pengutronix.de>
On Thu, Jun 26, 2025 at 05:37:35PM +0200, Ahmad Fatoum wrote:
> Hello Sascha,
>
> On 6/26/25 16:03, Sascha Hauer wrote:
> > Chainloading barebox when OP-TEE is enabled has multiple bugs, fix them.
> >
> > When barebox starts we have to guess if we have to start OP-TEE or not.
> > As we can't detect the exception level on ARMv7 we do this by checking
> > if a first stage loader has passed us a device tree.
> >
> > First of all the device tree is passed in r2, not in r0, so fix the
> > register we use.
> >
> > Then we have to check if r2 is within the SDRAM. We check against
> > MX6_MMDC_P0_BASE_ADDR which is the base of the SDRAM controller. Use the
> > base address of the SDRAM instead.
> >
> > Finally we manipulate the TZASC which we are obviously not allowed in
> > EL1, so move the manipulation to the code which is only executed in EL2.
>
> EL1/EL2 are ARMv8-specific.
What's the correct term for ARMv7 then? Supervisor mode? My google foo
always points me to the ARMv8 terms.
> > if (IS_ENABLED(CONFIG_FIRMWARE_TQMA6UL_OPTEE) &&
> > - !(r0 > MX6_MMDC_P0_BASE_ADDR &&
> > - r0 < MX6_MMDC_P0_BASE_ADDR + SZ_256M)) {
> > + !(r2 > MX6_MMDC_PORT0_BASE_ADDR && r2 < MX6_MMDC_PORT0_BASE_ADDR + SZ_256M)) {
> > + /* Enable normal/secure r/w for TZC380 region0 */
> > + writel(0xf0000000, 0x021D0108);
>
> I think this is problematic:
>
> - robustness-wise: We have no guarantee that there isn't some lesser
> used BootROM code path that happens to leave a suitable DRAM
> look-alike address that would trick us here.
>
> - security wise, even if we check for FDT header if r2 points into
> DRAM, a compromised OS could spray RAM with FDT magic,
> trigger a warm reset that has the BootROM produce a DRAM lookalike
> pointer in r2 and then OP-TEE loading is skipped and the kernel
> starts in the highest privilege level.
>
> To address this, we need some way to set a sticky bit that's cleared
> only on reset. One way, would be to set up an IVT and try to access the
> L2 cache controller while data_abort_mask() is active, like
> imx6_cannot_write_l2x0 is doing.
I'll send an updated series shortly.
Sascha
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
prev parent reply other threads:[~2025-06-27 13:23 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-26 14:03 [PATCH 1/2] ARM: i.MX: tqma6ulx: fix barebox chainloading with OP-TEE enabled Sascha Hauer
2025-06-26 14:03 ` [PATCH 2/2] ARM: i.MX: Webasto ccbv2: " Sascha Hauer
2025-06-26 15:16 ` Marco Felsch
2025-06-26 15:17 ` [PATCH 1/2] ARM: i.MX: tqma6ulx: " Marco Felsch
2025-06-26 15:37 ` Ahmad Fatoum
2025-06-26 22:36 ` Marco Felsch
2025-06-27 8:42 ` Ahmad Fatoum
2025-06-27 12:43 ` Sascha Hauer [this message]
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=aF6R-RbRmCgcp9AE@pengutronix.de \
--to=s.hauer@pengutronix.de \
--cc=a.fatoum@pengutronix.de \
--cc=barebox@lists.infradead.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.