问题标签 [trust-zone]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
136 浏览

linux - 信任区系统中非 SecureOS 和 SecureOS 中直接访问内存的过程如何工作

我不确定我是否了解 ARM 处理器中 CPU 直接访问内存的完整流程,我想知道内存的哪一部分访问缓存(L1 和 L2),DMA 和 MMU(或安全 MMU)参与其中。我不确定我是否理解从 non-secureOS 向 SecureOS 发送数据的过程是从通过 DMA 分配共享缓冲区并将数据写入共享缓冲区(在 secureOS 和 non-secureOS 之间)和发送开始的。

附加问题:

  1. 为什么 DMA 需要在安全或非安全之间进行通信?为什么不能通过内核缓冲区(kmalloc()、kzalloc()、get_page() 等)使用?
  2. 通常,CPU 可以在没有 DMA 的情况下访问内存吗?DMA一定要参加吗?
  3. CPU(缓存 L1 或 L2)与 DMA 之间可能没有一致性?例如:non-secureOS 将自己的数据写入 DMA 缓冲区并发送到 secureOS。安全操作系统接收缓冲区,非安全操作系统再次更改缓冲区而不刷新(我认为更改保留在缓存中),最后安全操作系统从缓存中读取陈旧的假数据
0 投票
1 回答
214 浏览

gcc - `cmse_check_address_range` 通过编译器升级改变行为

我正在使用带有 arm trust-zone 的 Cortex-M33。我的安全固件中有一个安全 api,我可以从我的非安全固件中调用它。一切都按预期工作-至少在我将编译器从升级gcc-arm-none-eabi-7-2018-q2-updategcc-arm-none-eabi-10-2020-q4-major.

有问题的函数如下所示:

我通过使用确保提供的指针确实位于非安全空间中cmse_check_address_range。这适用于版本 7,但如果我使用版本 10 编译代码,NULL则会返回。我没有更改源代码或任何其他部分的任何内容,只是编译器。

我检查了该功能的任何更改,但甚至https://github.com/gcc-mirror/gcc/commits/master/libgcc/config/arm/cmse.c没有显示任何更改。

有什么改变吗?也许我没有按预期使用该功能(我需要不同的功能标志吗?但话又说回来,它适用于版本 7。

更新:

0 投票
0 回答
54 浏览

cortex-m - Cortex-M33 上的内存保护控制器 (MPC) 的配置

我可以使用一些帮助来了解如何为 M33 配置 MPC。我使用带有 AN505 (IOTKit_CM33) 的 MPS2+ 板。我运行 uVision Pack 安装程序提供的示例 TrustZone 代码。

背景:器件 AN505 具有 SSRAM1 (4MB) 和 SSRAM3 (2MB)。SSRAM1 映射到 1) 0x0000_0000 - 0x003F_FFFF (NS) 2) 0x0040_0000 - 0x007F_FFFF (NS) 3) 0x1000_0000 - 0x103F_FFFF (S) 和 4) 0x1040_0000 - 0x107F_FFFF (S)。SSRAM3 映射到 1) 0x2820_0000 - 0x283F_FFFF (NS) 和 2) 0x3820_0000 - 0x383F_FFFF (S)。SSRAM1 的 MPC 块大小为 128KB。SSRAM3 的块大小为 64KB。

我们将 SSRAM1 的一半配置为普通世界,将整个 SSRAM3 配置为普通世界。

示例代码显示

这对我来说没有意义:

  1. SSRAM3 为 2MB。它应该有 2048KB/64KB = 32 个块。所以,我们应该只需要 1 个 BLK_LUT。因此,我们应该设置 BLK_IDX = 0。但是代码将 BLK_IDX 设置为 1。

  2. 在设置 SSRAM1 的注释中,它说“blk_cnt = 0x10”。这是一个错误吗?不应该是 0x400000/blk_size = 0x20。由于这只是一个评论,我想无论如何都没关系。

我在这里很困惑。先感谢您。

0 投票
0 回答
60 浏览

linux - 在 Optee 之后无法启动 Linux

我正在开发 ZC702 板并尝试启动 Linux 和 Optee。我的引导流程是:

FSBL--->U-Boot--->OP-TEE--->Linux

尽管 Op-tee 已成功启动,但 Linux 在启动时会挂起 'zynq_early_slcr_init' 函数。

可能是 Op-tee 操作系统锁定访问 SLCR。所以当 Linux 访问 SLCR 时,系统会崩溃。

我怎么解决这个问题?

0 投票
0 回答
34 浏览

linux - ioremap、地址和与 TrustZone 的关系

有一些问题我不确定我是否完全理解 TrustZone 地址。据我所知,每个内核都带有描述给硬件的设备树配置。在 TrustZone 系统中,ns(非安全)内核与 dt(设备树)一起包含对“DMA 堆”的配置。DMA 堆用于内核作为“共享缓冲区”与 TrustZone 内核通信,这取决于 SMC 处理程序的实现。一般来说,不得不说 TrustZone 内核运行在“安全内存”(安全世界)上,而在另一个“世界”中,ns 内核运行在 ns 内存(非安全世界)上。这是通过物理总线事务上的特殊 NS 位实现对架构实施的。

  1. dt 文件中定义的大多数堆都指向节点类型“内存范围”。内存范围节点地址的更改是否会导致映射到安全地址?

  2. 我不确定,但是否有可能运行 kmalloc 导致映射到 TrustZone 安全内存?

  3. 根据ioremap功能:

ioremap() 函数用于将I/O 设备的物理地址映射到内核虚拟地址。内核创建一个页表,即将虚拟地址映射到请求的物理地址。当我们执行ioremap() 时,该映射被破坏。

可以将安全内存映射到 ns 内核吗?

  1. 据我所知,SMMU 负责 VA -> IPA -> PA 或 VA -> PA(在转换表上)之间的映射,这由页表的两个阶段完成。第 1 阶段由 ns 内核完成,第 2 阶段由 Hypervisor 完成。映射到安全地址的过程如何工作?在运行 ioremap() 之后,谁告诉管理程序在页表阶段 2 上进行映射?

谢谢,

0 投票
0 回答
25 浏览

linux-kernel - 设置带宽 API 用途

根据以下更改: qseecom: Add API to set bandwidth for CE HW 想了解什么是 CE clk ?它负责什么?

谢谢,

0 投票
0 回答
32 浏览

linux - 从非安全到安全的序列流

我想确定我是否理解描述非安全高级操作系统发送 smc 命令的过程。根据 Arm 用户手册和许多博客和文章,我认为这是以下场景:

  1. EL0(非安全)到 EL1(非安全)- svc
  2. EL1(非安全)到 EL2(hypervisovr - 非安全) - smc/hvc
  3. EL2(hypervisovr - non-secure) 到 EL3(monitor - non-secure) - smc 注意:这里 EL3(non-secure) 更改为 EL3(secure)
  4. EL3(监视器 - 安全)到 EL1(安全) - ???
  5. EL1(secure) 到 EL3(monitor - secure) - smc 注意:这里 EL3(secure) 更改为 EL3(monitor - non-secure)
  6. EL3(监视器 - 不安全)到 EL2(hypervisovr - 不安全) - eret
  7. EL2(hypervisovr - 非安全)到 EL1(非安全) - eret
  8. EL1(非安全)到 EL0(非安全)- ret 谁能填空并纠正我?感谢,
0 投票
0 回答
26 浏览

android - 使用 trustzone 服务的应用程序

有人知道使用 trustzone 服务的应用程序吗?应用程序的名称是什么,服务应用程序使用什么?

例如:“信号”应用程序使用密钥库服务来安全地存储我们的密钥以进行按摩加密

谢谢

0 投票
1 回答
80 浏览

c - 如何以日期时间格式在 OP-TEE 可信应用程序 (TA) 中获取 UTC 时间戳?

免责声明:我花了 4 到 5 个小时来寻找答案,在弄清楚之后,我决定在这里为同一个地方的人发布它。

OP-TEE 是开发 TA 和 CA 的一个很好的环境,但是,没有直接的方法来获取正确格式化的日期时间。也没有struct tm。因此,这让我想知道如何在 OP-TEE TA 中获得日期时间格式?

我花了很长时间尝试使用已经支持的mbedTLS库,对于新手来说,它们似乎确实支持获取日期时间格式。毕竟,他们确实有gmtime应该返回这个值的。

然而,遗憾的是,gmtimeARMv8 平台上的 OP-TEE 并没有相关功能的实现。这是一个相当艰难的运气。

那么如何在 OP-TEE TA 中获得 UTC 时间?

0 投票
0 回答
143 浏览

exception - 关于在 ARMv8-A(Cortex-A53) 中更改异常级别的问题

我是 ARMv8 的新手,所以在尝试更改异常级别时遇到了一些问题。启动后,我确定它在 EL2 上。但现在我想从 EL2 更改为非安全/安全 EL1。我做了一些尝试,但没有奏效。这是代码:

我做了很多测试并得到以下结论:

  1. 当spsr_el2设置为0x3c9时,这意味着我们将返回相同的EL(EL2)。它有效。打印是 1,2。
  2. 当spsr_el2设置为0x3c5时,这意味着我们将把EL改为EL1。但是,它只打印 1 而什么也没有。

我真的不知道如何解决这个问题。
我有两个问题:

  1. 我在切换到 EL1 时做错了什么?
  2. 如果能正确切换到EL1,应该在哪里设置EL1的安全状态?

非常感谢。