具有安全域和次安全域的数据处理装置中的异常处理的制作方法

文档序号:8367481阅读:309来源:国知局
具有安全域和次安全域的数据处理装置中的异常处理的制作方法
【技术领域】
[0001] 本发明涉及数据处理领域,并且特别涉及具有安全域和次安全域的数据处理。
【背景技术】
[0002] 很多数据处理系统及架构提供了隔离并保护敏感数据和代码部分不被无权的人 或进程访问的方法。虽然能够提供安全是重要的,但是在与该保护相关联的性能和电路面 积中存在开销。
[0003] 在诸如微控制器之类的小型系统中,将这些开销保持较低是非常重要的,从而可 能需要在安全等级与性能之间做出折衷。
[0004] 英国剑桥的ARM?用其Trustzone结构提供了保持数据和代码安全的一个方 法,其中存在安全状态和非安全状态,并且软件处理器被用于在状态之间进行转换,该软件 处理器保护安全侧的安全。虽然该方法提供了很高的安全度,但是需要以软件处理器形式 的相当大的软件干预来改变安全状态,这既降低了系统的性能,又增加了为安全软件开发 外部应用程序接口 API所需的工作量,因为所有通话必须通过软件处理器来代理。类似地, 虽然在安全域中发生但需要在非安全域中处理的异常也需要通过安全异常处理器来代理, 这允许安全状态在控制转到非安全异常处理器之前得到保护。

【发明内容】

[0005] 从第一方面来看,本发明提供了一种数据处理装置,包括:
[0006] 处理电路,用于响应于程序代码而执行数据处理操作,处理电路包括用于控制异 常处理的异常控制电路;
[0007] 多个寄存器,用于存储数据,寄存器包括寄存器的第一子集和寄存器的第二子集; 以及
[0008] 数据存储设备,用于存储数据,数据存储设备包括多个区域,区域包括安全区域和 次安全区域,其中安全区域用于存储当在安全域中操作时可被处理电路访问而当在次安全 域中操作时不可被处理电路访问的数据;其中:
[0009] 响应于来自由处理电路执行的后台处理的最初异常,异常控制电路被配置为在触 发处理电路执行对应于异常的异常处理程序之前,执行来自寄存器的第一子集的数据的状 态保存,其中异常处理程序负责执行来自寄存器的第二子集的数据的状态保存;
[0010] 响应于导致从安全域转换到次安全域的第一异常,异常控制电路被配置为在触发 处理电路执行次安全域中的异常处理程序之前,执行来自寄存器的第二子集的数据的附加 状态保存,其中后台处理由处理电路在安全域中执行;并且
[0011] 响应于导致从安全域转换到次安全域的末尾连锁异常,异常控制电路被配置为触 发处理电路在不执行附加状态保存的情况下,执行异常处理程序,末尾连锁异常在第一异 常被处理之后并在返回后台处理之前被处理。
[0012] 当在后台处理期间发生异常时,后台处理可将数据值放置于寄存器中,从而允许 这些数据值在异常结束时被保留及恢复,该系统可执行对数据的从寄存器到数据存储设备 的状态保存。如上所述,对于一些系统,在所获得的安全性等级和处理性能之间获得折衷是 重要的。当响应于异常而执行状态保存时也是如此。
[0013] 由于性能原因,在第一子集和第二子集中执行对寄存器中的数据的状态保存可能 是有用的。对来自第一子集的数据的状态保存可由硬件中的异常控制电路在触发异常处理 程序之前执行。相反,异常处理程序(即,软件)可负责执行对来自寄存器的第二子集的数 据的状态保存。
[0014] 但是,从安全性角度来看,寄存器的第二子集的状态保存在异常处理程序的控制 之下有时可能是有问题的。如果在安全域中执行的后台处理之后,异常导致从安全域转换 到次安全域,则次安全异常处理程序可通过安全后台代码获取对位于寄存器的第二子集中 的安全数据的访问。
[0015] 为了防止该安全性破坏,如果在后台处理在安全域的情况下,发生导致从安全域 转换到次安全域的第一异常,则异常控制电路在触发次安全域中的异常处理程序之前,执 行对来自寄存器的第二子集的数据的附加状态保存。通过提供用于将寄存器的第二子集的 状态保存在硬件中的机制,次安全异常处理软件不必执行可能包含安全数据的寄存器第二 子集的状态保存。
[0016] 但是,在硬件中执行附加状态保存导致在开始异常处理程序之前的更长延迟。在 先前异常结束的时刻,可能有另一异常等待处理。在这种情况下,处理电路在返回后台处理 之前服务另一异常,该后台处理在先前异常之前正在被执行。这种情况被称为"末尾连锁", 并且另一异常被称为"末尾连锁"异常。在后台处理在安全域的情况下,为了降低附加状态 保存的性能影响,对于导致从安全域转换到次安全域的第一异常执行附加状态保存。对于 导致从安全域转换到次安全域的后续末尾连锁异常,不需要重复附加状态保存,因为后台 处理所需的数据值已响应于第一异常而被保存。因此,在很多情况下,可在不执行附加状态 保存的情况下,触发末尾连锁异常的异常处理程序。
[0017] 因此,当响应于异常而执行状态保存时,本技术可获得在安全性和性能之间改善 的平衡。本发明的硬件机制使得次安全异常能够有效处理,而不需要通过安全异常处理器 来代理。
[0018] 响应于导致从安全域转换到次安全域的第一异常,异常控制电路可在触发处理电 路执行异常处理程序之前清除寄存器第一子集和寄存器第二子集。这意味着次安全域中的 异常处理程序不能访问在安全域中时被放置于寄存器中的任意数据。
[0019] 此外,在一个实施例中,响应于所述第一异常,数据处理装置可被配置为在异常控 制电路触发处理电路执行异常处理程序之前,保证寄存器第一子集不包含安全数据。存在 很多方法实现这一目的。例如,硬件或软件均可保证寄存器第一子集被清除,使得这些寄存 器不包含任意安全数据。或者,可以是寄存器第一子集可被设计为在处理电路被触发执行 异常处理程序之前只包含非安全数据的情况,在这种情况下,可不必清除寄存器第一子集。
[0020] 在本申请中,术语"调用者寄存器"和"被调用者寄存器"可被用于分别指示寄存 器的第一子集和第二子集。
[0021] 虽然异常处理程序负责执行对来自寄存器第二子集(被调用者寄存器)的数据的 状态保存,但是异常处理程序可不必实际执行来自第二子集的数据的状态保存。例如,如果 异常控制电路已经执行了第二子集寄存器的附加状态保存,则异常处理程序可省去这些寄 存器的状态保存。
[0022] 或者,更简单的是,异常处理程序一直执行来自被调用者寄存器的数据的状态保 存,即使附加状态保存已被硬件执行。因为寄存器可能已被硬件清除,所以异常处理程序可 能无论如何也不能访问被调用者寄存器中的数据值,与软件将被清除的数据值保存到数据 存储设备并稍后恢复被清除的数据相关联的开销可小于用于使异常处理程序能够检测硬 件是否已经执行了附加状态保存的机制所导致的开销。
[0023] 对于寄存器第一子集(调用者寄存器)和寄存器第二子集(被调用者寄存器),寄 存器第一子集可包括〇个寄存器,使得所有寄存器都在第二子集中。在这种情况下,对于多 数异常没有状态保存将被异常控制电路执行,而异常处理程序负责第二子集中的所有寄存 器的保存。但是,响应于导致从第二安全域转换到次安全域的第一异常,附加状态保存可使 用异常控制电路将第二子集(所有寄存器)保存在硬件中,以防止被次安全域中的异常处 理程序访问该数据。
[0024] 触发附加状态保存的第一异常可以是在处理正在执行后台处理时发生的最初异 常。或者,第一异常自身可以是在最初异常之后而在返回后台处理之前被处理的末尾连锁 异常。
[0025] 在本申请中,术语"后台处理"被用于指示被具有更高优先级的异常打断的处理。 如果异常处理程序自身被更高优先级异常打断,则被打断的异常处理程序对于抢占异常可 变为"后台处理",并且随后抢占异常将在被打断之前触发对异常处理程序正在使用的数据 的状态保存。
[0026] 响应于导致从次安全域转换到安全域的末尾连锁异常,异常控制电路可在不将附 加状态保存中所保存的数据恢复到寄存器第二子集的情况下,控制处理电路触发异常处理 程序。在不存在本技术时,预期寄存器第二子集的数据应在该时刻被恢复,因为这些寄存器 中的数据预期对安全域中的异常是可见的。但是,本技术认识到该恢复操作是不必要的。通 过省去该恢复,当从安全域转换到次安全域的进一步的末尾连锁异常发生时,寄存器第二 子集将仍被保存,从而对于该进一步的末尾连锁异常可省去附加状态保存。这在多数情况 下提高了性能,因为末尾连锁异常可被更快处理,而没有由将数据保存或恢复到寄存器所 导致的延迟。
[0027] 当进入导致从安全域转换到次安全域的新的异常时,异常控制电路可使用状态保 存状态值来确定是否在触发异常处理程序之前执行附加状态保存。状态保存状态值可指示 在处理次安全域中的末尾连锁异常之前是否需要执行附加状态保存。附加状态保存是否必 需取决于异常处理的过去历史,因此状态保存状态值使该历史的方面能够被恢复,以允许 该系统确定附加状态保存是否需要再次被执行。
[0028] 在一个示例中,状态保存状态值可指示在停止后台处理和进入新异常之间,是否 有至少一个异常已在次安全域中被处理,其给出了附加状态保存在从安全异常到次安全异 常的下一个末尾连锁转换时是否将被需要的指示。
[0029] 当进入新异常时,附加状态保存可被执行,如果:
[0030] (a)后台处理在安全域中被执行;并且
[0031] (b)状态保存状态值指示在停止后台处理与进入新异常之间在次安全域中没有异 常已经被处理。
[0032] 在其他情况下,附加状态保存将不是必需的。如果后台处理不再安全域中,则后台 处理将不在寄存器中放置任何安全数据,因此不需要附加状态保存来保护数据不被次安全 域访问。此外,即使后台处理在安全域中,如果在停止安全域中的后台处理与进入新异常之 间,异常已在次安全域中被处理,则该异常将已触发附加状态保存,因此其不需要再次被触 发。
[0033] 安全性域值可被维护以指示后台处理是在安全域还是次安全域中被执行。因此, 基于安全性域值和状态保存状态值,异常控制电路可确定在进入新异常时是否需要执行附 加数据保存。
[0034] 如上所述,状态保存状态值可提供关于异常处理的过去历史(例如,异常在哪个 域中进行处理)的一些信息。但是,这可允许关于过去异常的一些信息可在次安全域中被 推测,这会导致安全性破坏。例如,这可允许次安全代码推测某些安全数据最近已被处理。 因此,需要在次安全域中处理的过程中使状态保存状态不可被访问。
[0035] 实现这一目的的一个方法是当进入次安全域时将状态保存状态值设置为固定值, 而当进入安全域时将状态保存状态值设置为可变值。可变值只在安全域中时是必需的,因 为当在次安全域中时,该值有用的安全到次安全状态转换将不会发生。因此,通过在进入次 安全域时将该值设置为固定值,在次安全域中执行的处理不能从状态保存状态值中获取关 于安全域的任意信息。
[0036] 状态保存状态值引发的另一可能的安全性问题是次安全域中的代码可能修改状 态保存状态值的值,从而影响在从安全域转换到次安全域时是否执行状态保存。如果黑客 能够获取状态保存是否被执行的控制,则这会导致安全数据的泄漏。存在防止该问题的若 干方法。
[0037] 在一个示例中,当从次安全域中的异常返回时,异常控制电路可检查状态保存状 态值是否仍具有其在进入次安全域时被设置的固定值,并且如果状态保存状态值不具有该 固定值,则触发错误。由于状态保存状态值在次安全域中时应具有固定值,于是任意其他值 可指示发生了篡改,从而可触发故障。
[0038] 或者,状态保存状态值在次安全域中的处理过程中可具有可变值。如果从安全性 的角度来看,允许次安全域中的异常访问具有可变值的状态保存状态值不是问题,则这可 能是适合的。但是,为了防止次安全域中的代码对状态保存状态值的改变影响后续状态保 存操作,当从次安全域中的异常返回时,异常控制电路可与状态保存状态值无关来控制异 常处理。当退出次安全域时,通过忽略状态保存状态值,并且不管状态保存状态值是具有一 个值还是另一值均执行相同处理,次安全域中的代码对状态保存状态值的任何篡改将不影 响该系统的安全性。
[0039] 例如,在离开次安全异常处理器之后,状态保存状态值可被重置为其在次安全域 中应具有的值,以覆盖在次安全域中操作时对状态值的任意修改。这意味着
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1