跳转到主要内容

【问答】Versal ACAP、APU - ELR 错误报告序列中加密指令之间的中断

<strong>描述</strong>
在 aarch32 模式下,如果执行的代码包含下面的加密指令序列,并且在执行第一条加密指令后立即断言并中断,ELR 会被记录为返回地址,产生的错误可能会导致数据损坏:

<li>AESE Qy、Qx AESMC Qy、Qy

<li>AESD Qy、Qx AESIMC Qy、Qy</li>

<strong>解决方案</strong>

<strong>影响:</strong>

如果满足上述条件,异常序列中记录的返回地址将不正确,序列中的第二条加密指令将被执行两次,这可能会导致数据损坏。

<strong>变通方法:</strong>

Arm 预期 AES 指令仅用于手动优化的 AES 库。 AES、ECB 和 CBC 模式在单个操作中读取和存储向量寄存器。这些不受错误影响。

在 AES GCM 模式下,可以读取 32 位值用作计数器。这满足条件 2。您可以通过将值复制到另一个 Q 寄存器并按上述序列使用它来实现具有 32 位计数器值的 AES GCM,从而避免条件 2。

这些加密扩展是可选的。运行 aarch32 软件时,操作系统可能会声明这些未实现。

<strong>受影响的配置:</strong>

此错误影响在以下条件下包含 Arm Cortex-A72 (APU) 的所有 Versal 器件:

1. 内核处于 AArch32 状态:A32 或 T32。
2. 执行指令并产生 32 位结果。
3. 上述执行中描述了两个加密指令序列之一,使用条件 2 的 32 位结果作为源操作数。
4. 中断在序列中的两条指令之间被断言和执行。

<strong>解决办法:</strong><br />
<p>这是第三方错误(<a href="https://developer.arm.com/documentation/epm012079/latest/">Arm, Inc. 1655431</a>); 无修复计划。</p>