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

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

  • AESE Qy、Qx AESMC Qy、Qy
  • AESD Qy、Qx AESIMC Qy、Qy
  • 解决方案

    影响:

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

    变通方法:

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

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

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

    受影响的配置:

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

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

    解决办法:

    这是第三方错误(Arm, Inc. 1655431); 无修复计划。

    最新文章

    最新文章