CN104115155A - 在具有安全域和次安全域的数据处理设备中的异常处理 - Google Patents
在具有安全域和次安全域的数据处理设备中的异常处理 Download PDFInfo
- Publication number
- CN104115155A CN104115155A CN201380008455.1A CN201380008455A CN104115155A CN 104115155 A CN104115155 A CN 104115155A CN 201380008455 A CN201380008455 A CN 201380008455A CN 104115155 A CN104115155 A CN 104115155A
- Authority
- CN
- China
- Prior art keywords
- abnormal
- data
- register
- security
- subset
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
- G06F21/74—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information operating in dual or compartmented mode, i.e. at least one secure mode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2105—Dual mode as a secondary aspect
Abstract
提供了一种用于处理异常的数据处理设备和方法,所述数据处理设备具有被配置成响应于程序代码而执行数据处理操作的处理电路,所述处理电路包括用于控制异常处理的异常控制电路。多个寄存器被提供来存储数据,所述寄存器包括寄存器的第一子集和寄存器的第二子集,并且数据存储装置同样被提供来存储数据,所述数据存储装置包括包括安全区和次安全区在内的多个区,其中,安全区用于存储可由处理电路在安全域中操作时访问并且不可由处理电路在次安全域中操作时访问的数据。响应于来自由处理电路所执行的后台处理的初始异常,异常控制电路在触发处理电路执行与异常相对应的异常处理例程之前执行对来自寄存器的第一子集的数据的状态保存,其中,异常处理例程负责执行对来自寄存器的第二子集的数据的状态保存。响应于引起从安全域到次安全域的转变的第一异常,在后台处理由处理电路在安全域中执行的情况下,异常控制电路在触发处理电路在次安全域中执行异常处理例程之前执行额外的对来自寄存器的第二子集的数据的状态保存。本发明的硬件机制使得能够实现安全异常的有效处理,而无需通过异常处理程序进行代理。
Description
技术领域
本技术领域涉及数据处理的领域,并且特别地涉及敏感数据和代码的处理。
背景技术
许多数据处理系统和架构提供了隔离并且保护敏感数据和代码段以免于由未授权的人或进程访问的方式。尽管重要的是能够提供安全性,但是在与这种保护相关联的性能和电路面积中存在开销。
在诸如微控制器之类的小型系统中,使这些开销保持在低值是非常重要的,并且因此可能需要做出在安全性的级别与性能之间的某种权衡。
使数据和代码保持安全的一个方式由英国剑桥的用其Trustzone架构提供,其中存在安全状态和非安全状态(也被称为安全域和非安全域),并且异常指令被用来在状态之间转变,异常处理程序保护安全侧的安全性。尽管这种方式提供高度的安全性,但是需要软件异常处理程序形式的大量的软件干预来改变安全性状态,这既降低了系统的性能又增加了为安全软件开发外部应用程序接口API所需要的努力量,因为所有调用都必须通过异常处理程序来代理。类似地,需要在非安全域中处理的在安全域中发生的异常同样需要通过安全异常处理程序来代理,这允许安全状态在控制传递给非安全异常处理程序之前得以保护。
US7966466和US2008/0250216公开了可替代的安全系统,其中数据存储装置具有安全侧和非安全侧,并且当前正被执行的代码在数据存储装置内的位置确定处理器正在操作的域,以及因此确定被允许访问的数据。
发明内容
从第一方面看,本发明提供了一种数据处理设备,其包括:被配置成响应于程序代码而执行数据处理操作的处理电路,处理电路包括用于控制异常处理的异常控制电路;被配置成存储数据的多个寄存器,寄存器包括寄存器的第一子集和寄存器的第二子集;以及被配置成存储数据的数据存储装置,数据存储装置包括包括安全区和次安全区在内的多个区,其中,安全区用于存储可由处理电路当在安全域中操作时访问并且不可由处理电路当在次安全域中操作时访问的数据;其中:响应于来自由处理电路所执行的后台处理的初始异常,异常控制电路被配置成在触发处理电路执行与异常相对应的异常处理例程之前执行对来自寄存器的第一子集的数据的状态保存,其中,异常处理例程负责执行对来自寄存器的第二子集的数据的状态保存;并且响应于引起从安全域到次安全域的转变的第一异常,在后台处理由处理电路在安全域中执行的情况下,异常控制电路被配置成在触发处理电路在次安全域中执行异常处理例程之前执行额外的对来自寄存器的第二子集的数据的状态保存。
当在后台处理期间发生异常时,后台处理可能已将数据值放入寄存器,并且以便允许这些数据值在异常结束时被保持和存储,系统可以执行数据从寄存器到数据存储装置(典型地,到在数据存储装置中提供的堆栈)的状态保存。如上面所讨论的那样,对于一些系统来说,重要的是实现在所实现的安全性级别与处理性能之间的权衡。这在响应于异常而执行状态保存时同样成立。
由于性能原因,执行寄存器的第一子集和第二子集中的数据的状态保存可能是有用的。依照本发明,对来自第一子集的数据的状态保存能够由硬件中的异常控制电路在触发异常处理例程之前执行。相比之下,异常处理例程(即软件)可以负责执行对来自寄存器的第二子集的数据的状态保存。
然而,从安全性观点看,在异常处理例程的控制下的寄存器的第二子集的状态保存有时是有问题的。如果异常引起从安全域到次安全域的转变,则紧跟在安全域中执行的后台处理之后,异常处理例程能够修改在安全域中位于寄存器的第二子集的安全数据。
为了防止这种安全性漏洞,依照本发明,如果在后台处理是在安全域中的情况下发生引起从安全域到次安全(在本文中也被称为非安全)域的转变的第一异常,则异常控制电路在次安全域中触发异常处理例程之前,除了第一子集之外,还执行额外的对来自寄存器的第二子集的数据的状态保存。通过提供用于在触发异常处理例程之前保存寄存器的第二子集的状态的硬件机制,能够防止数据被次安全域中的软件修改。
因此,本技术能够在响应于异常而执行状态保存时实现安全性与性能之间的改进的平衡。本发明的硬件机制使得能实现次安全异常的有效处理,而无需通过安全异常处理程序进行代理。
响应于第一异常,异常控制电路在一个实施例中被配置成在触发处理电路执行异常处理例程之前清除寄存器的第二子集。这意味着,在次安全域中的异常处理例程不能够访问当在安全域中时放入寄存器的第二子集的任何数据。
进一步地,在一个实施例中,响应于第一异常,在异常控制电路触发处理电路执行异常处理例程之前,数据处理设备被配置成确保寄存器的第一子集不包含安全数据。存在能够实现此情况的许多方式。例如,硬件或软件都可以确保寄存器的第一子集被清除使得那些寄存器不包含任何安全数据。可替代地,可以是寄存器的第一子集能够被巧妙地设计以便仅在处理电路被触发执行异常处理例程之前包括非安全数据,在这种情况下可以没有必要清除寄存器的第一子集。
在本申请中,术语“调用寄存器”和“被调用寄存器”可以被用来分别指示寄存器的第一子集和第二子集。
虽然异常处理例程负责执行对来自寄存器的第二子集(被调用寄存器)的数据的状态保存,但是异常处理例程实际地执行对来自第二子集的数据的状态保存不总是必要的。例如,如果异常控制电路已经执行额外的对寄存器的第二子集的状态保存,则异常处理例程能够省略对这些寄存器的状态保存。
可替代地,更简单的方式可以是即使额外的状态保存已经由硬件执行了,异常处理例程也总是执行对来自被调用寄存器的数据的状态保存。因为寄存器可能已经被硬件清除,所以异常处理例程无论如何都将不能够访问在被调用寄存器中预先保持的安全数据值,并且与将已清除数据值保存到数据存储装置的次安全区以及之后(在异常完成时)恢复已清除数据值相关联的开销可能小于与提供用于允许异常处理例程检测硬件是否已经执行了额外的状态保存的机制相关联的开销。
关于寄存器的第一子集(调用寄存器)和寄存器的第二子集(被调用寄存器),在一个实施例中寄存器的第一子集有可包括零个寄存器,使得需要在异常处理程序附近保持的全部寄存器都是在第二子集中。在这种情况下,对于大多数异常,没有状态保存将由异常控制电路来执行,异常处理例程负责第二子集中的所有寄存器的保存。然而,响应于引起从安全域到次安全域的转变的第一异常,额外的状态保存可以使用异常控制电路将第二子集(需要被保持的所有寄存器)保存在硬件中,以防止通过异常处理例程在次安全域中对这种数据的访问。
另外的异常有可能在在当前异常已完成的时刻是待决的。在这种情况下,处理电路可以在返回到在当前异常之前正被执行的后台处理之前向另外的异常提供服务。这种情形被称为“尾链”,并且另外的异常被称为“尾链化”异常。
触发额外的状态保存的第一异常可以是当处理电路正在执行后台处理时发生的初始异常。可替代地,第一异常它本身可以是在初始异常之后但在返回到后台处理之前被处理的尾链化异常。
在本申请中,术语“后台处理”被用来指示被更高优先级的异常中断的处理。如果异常处理例程它本身被更高优先级异常(在本文中被称为占先异常)中断,则对于占先异常来说,被中断的异常处理例程它本身可以称为“后台处理”,并且占先异常然后可以触发在异常处理例程被中断之前正由异常处理例程所使用的数据的状态保存。
在使用尾链的一个实施例中,可以降低与尾链化异常有关地需要的状态保存的量。特别地,在一个实施例中,异常控制电路被配置成,响应于比其对应的异常处理例程正被执行的当前异常优先级更低的新的异常,在使处理电路返回到后台处理之前将新的异常的处理作为尾链化异常控制。进一步地,异常控制电路被配置成,除了在当前异常在安全域中被执行、新的异常指示切换到次安全域、并且后台处理在安全域中被执行的情况下,在控制新的异常的处理时不再执行另外的状态保存操作,因此异常控制电路被配置成,在当前异常的异常处理例程的完成之后,执行额外的对来自寄存器的第二子集的数据的状态保存,并且确保寄存器的第二子集在触发处理电路执行与新的异常相对应的异常处理例程之前被清除。如较早地提到的那样,寄存器的第一子集的清除取决于实施方式而可以是必要的或不是必要的。当非安全的尾链化异常跟随它本身在安全后台处理中引起中断的安全异常时,这样的方法允许数据的安全性被维持。
在处理尾链化异常时,关于状态恢复操作,还能够实现另外的效率。例如,在一个实施例中,异常控制电路被配置成,除了在当前异常在次安全域中被执行、新的异常指示切换到安全域、并且后台处理在安全域中被执行的情况下,在控制新的异常的处理时不执行状态恢复操作,因此异常控制电路被配置成,在针对当前异常的异常处理例程的完成之后,在触发处理电路执行与新的异常相对应的异常处理例程之前执行数据到寄存器的第二子集中的状态恢复操作。
如较早地提到的那样,当当前异常正被处理时发生的更高优先级异常被作为占先异常处理。如果早些时候在当前异常的处理中发生这样的占先异常,并且特别是当异常控制电路在触发处理电路执行针对当前异常的异常处理例程之前仍然在处理较早地提到的状态保存或额外的状态保存操作时,则在一个实施例中能够修改异常控制电路的状态保存和额外的状态保存操作。特别地,在一个实施例中,如果当执行额外的寄存器的第二子集的状态保存时发生比第一异常具有更高优先级的占先异常,并且占先异常不需要从安全域到次安全域的转变,则异常控制电路被配置成在触发处理电路处理占先异常的异常处理例程之前取消额外的状态保存。
可替代地,或另外地,如果当前异常不引起从安全域到次安全域的转变,并且如果在与当前异常相关联的异常处理例程的处理开始之前发生比当前异常具有更高优先级并且需要从安全域到次安全域的转变的占先异常,则异常控制电路可以被配置成在触发处理电路处理占先异常的异常处理例程之前额外地执行额外的来自寄存器的第二子集的数据的状态保存。
如果在异常控制电路已执行了任何需要的关于当前异常的状态保存或额外的状态保存并且处理电路已被触发来执行针对该当前异常的异常处理例程之后但是在该异常处理例程已完成之前发生占先异常,则在一个实施例中,异常控制电路被配置成,当确定寄存器的第一子集或寄存器的第一和第二子集二者的状态保存在触发处理电路执行占先异常的异常处理例程之前是需要的时,将当前异常视为后台处理。
在一个实施例中,数据存储装置包括多个堆栈,所述多个堆栈包括在安全区中的安全堆栈和在次安全区中的次安全堆栈。在这样的实施例中,当执行来自寄存器的第一子集的数据的状态保存和额外的来自寄存器的第二子集的数据的状态保存时,异常控制电路被配置成将数据保存到与处理电路在执行后台处理时正在操作的域的安全性相对应的安全堆栈和次安全堆栈中的一个。
在一个实施例中,数据处理设备进一步包括安全配置存储位置以用于存储指示多个寄存器中的哪些可用于通过当前执行代码用于存储安全数据的安全配置值,其中,响应于引起从安全域到次安全域的转变的异常,异常控制电路被配置成将由安全配置值所指示的寄存器中的一个或多个包括在寄存器的第二子集内。因此,这允许关于至少形成寄存器的第二子集的寄存器的某种可配置性,并且因此允许关于哪些寄存器经受由异常控制电路所执行的额外的状态保存操作的某种可配置性。
在一个实施例中,数据处理设备进一步包括用于存储异常返回值的存储位置,处理电路被配置成将域值设置在异常返回值内以指示数据处理设备在从后台处理取得初始异常时操作的域,异常控制电路依靠域值来确定寄存器中的哪些应该经受状态保存或状态恢复操作。这提供用于在任何特定情形下允许异常控制电路确定状态保存和/或额外的状态保存是否是需要的简单机制。
从第二方面看,本发明提供了一种数据处理设备,其包括:用于响应于程序代码而执行数据处理操作的数据处理电路;多个寄存器;以及用于存储数据的数据存储装置,数据存储装置包括每个区都具有安全级别的多个区,并包括用于存储数据处理电路在安全域中操作时可访问的而在次安全域中操作时不可访问的敏感数据的至少一个安全区和用于存储次安全数据的次安全区;数据存储装置包括至少两个堆栈,在安全区中的安全堆栈和在次安全区中的次安全堆栈;其中数据处理电路包括异常处理电路,异常处理电路被配置成在数据处理电路正在安全域中执行并且异常指示切换到次安全域中执行程序代码以清除寄存器的寄存器集合时对异常的接收做出响应,在寄存器集合内的寄存器取决于执行的域的安全级别和将发生异常的域。
在一个这样的实施例中,数据处理电路被进一步配置成在清除一组寄存器之前,将存储在该组寄存器中的状态保存到数据处理电路正在执行的域的堆栈。
此外,在一个实施例中,数据处理设备包括安全配置存储位置以用于存储指示多个寄存器中的哪些可用于通过当前执行代码用于存储安全状态的值,数据处理电路被配置成依靠由安全配置值所指示的多个寄存器以及执行的域的安全级别和将发生异常的域来确定哪些寄存器是在该组寄存器内。
从第三方面看,本发明提供了一种在数据处理设备上处理数据的方法,数据处理设备包括:用于响应于程序代码而执行数据处理操作的处理电路,处理电路包括用于控制异常处理的异常控制电路;用于存储数据的多个寄存器,寄存器包括寄存器的第一子集合和寄存器的第二子集;以及用于存储数据的数据存储装置,数据存储装置包括包括安全区和次安全区在内的多个区,其中,安全区用于存储可由处理电路当在安全域中操作时访问并且不可由处理电路在次安全域中操作时访问的数据,方法包括:响应于来自由处理电路所执行的后台处理的初始异常,采用异常控制电路来在触发处理电路执行与异常相对应的异常处理例程之前执行对来自寄存器的第一子集的数据的状态保存,其中,异常处理例程负责执行对来自寄存器的第二子集的数据的状态保存;并且响应于引起从安全域到次安全域的转变的第一异常,在后台处理由处理电路在安全域中执行的情况下,采用异常控制电路来在触发处理电路在次安全域中执行异常处理例程之前执行额外的对来自寄存器的第二子集的数据的状态保存。
从第四方面看,本发明提供了一种数据处理设备,其包括:用于响应于程序代码而执行数据处理操作的处理装置,处理装置包括用于控制异常处理的异常控制装置;用于存储数据的多个寄存器装置,包括寄存器装置的第一子集和寄存器装置的第二子集;以及用于存储数据的数据存储装置,包括包括安全区和次安全区在内的多个区,其中,安全区用于存储可由处理装置在安全域中操作时访问并且不可由处理装置在次安全域中操作时访问的数据;其中:响应于来自由处理装置所执行的后台处理的初始异常,异常控制装置在触发处理装置执行与异常相对应的异常处理例程之前执行对来自寄存器装置的第一子集的数据的状态保存,其中,异常处理例程负责执行对来自寄存器装置的第二子集的数据的状态保存;并且响应于引起从安全域到次安全域的转变的第一异常,在后台处理由处理装置在安全域中执行的情况下,异常控制装置在触发处理装置在次安全域中执行异常处理例程之前执行额外的对来自寄存器装置的第二子集的数据的状态保存。
附图说明
本发明将参考如附图中所图示的其实施例仅通过示例的方式来描述,在附图中:
图1示出了具有带安全区和非安全区的数据存储装置的根据一个实施例的数据处理设备;
图2示意性地图示了依照一个实施例数据处理设备的一组寄存器如何可以被分割成调用寄存器和被调用寄存器;
图3A和3B示意性地图示了依照实施例的由异常控制电路所执行的压栈和出栈操作;
图4示意性地示出了在代码执行期间针对各种不同场景的异常(在这个示例中为中断)的取得;
图5是示出了依照一个实施例在初始异常以及然后另外的异常被接收到时所被保存的状态的表;
图6针对示例实施例示出了其状态在异常的取得时取决于为了取得该异常所需要的域转变而被保存到堆栈的寄存器;
图7A和7B图示了依照一个实施例的两个示例尾链场景;
图8A和8B图示了依照一个实施例的另外两个尾链场景;
图9A和9B图示了依照一个实施例的两个早期占先场景;
图10示意性地图示了依照一个实施例的能够在处理占先异常时使用的分解技术;
图11示意性地图示了依照一个实施例用来存储包括安全性位的异常返回值的链路寄存器的使用;
图12是图示了依照一个实施例在接收到异常时执行的压栈操作的流程图;以及
图13是图示了依照一个实施例在完成异常时执行的出栈操作的流程图。
具体实施方式
图1示出了例如可以是微控制器的数据处理设备10。它包括用于处理指令的处理电路20和数据存储装置30,该数据存储装置30用于存储由处理电路20所处理的数据并且同样用于存储处理电路20执行的程序代码。
数据存储装置30具有不同安全性的两个区,安全区32和非安全区34(在本文中也被称为次安全区)。被存储在非安全区34中的代码在执行时不可访问在安全区32中存储的数据。
数据处理设备10还具有控制对安全32和非安全34区的访问的存储器保护单元MPU40。尽管这种控制可以通过存储器保护单元来执行,但是在其它实施例中,它可以由在该处理设备内的电路以更分布式的方式完成,所述电路监控当前正被执行的代码所被存储在里面的区,并且依靠此来控制对存储器的不同区的访问。
在这个实施例中,处理电路20正在其中执行的域的安全性根据当前正被执行的代码所被存储在的区来确定(用于确定操作的当前域的其它技术也是可能的)。因此,在安全数据存储装置32中存储的安全程序代码在安全域中被执行并且使用安全堆栈36将数据值存储在里面。类似地,在非安全数据存储装置34中存储的非安全代码在非安全域(在本文中也被称为次安全域)中被执行,并且使用非安全堆栈38用于在执行期间存储数据值。
处理电路20具有用于取出要被执行的指令的取出电路22。它同样具有用于对这些指令进行解码的解码电路24和用于执行它们的执行电路26。要被执行的指令由取出电路22经由存储器保护单元MPU40从数据存储装置30取出。指令和数据经由MPU40来检索,所述MPU40控制对安全区和非安全区的访问并且使安全数据与非安全侧隔离。
在这个实施例中,存在具有在数据处理期间使用的通用寄存器的寄存器组60。这些通用寄存器具有指示哪一个指令是要被执行的下一个指令的程序计数器PC,以及指示当前堆栈框架位于在堆栈中的哪一个点处的堆栈指针SP。在这个实施例中,因为在安全侧中存在堆栈并且在非安全侧中也存在堆栈,所以存在安全堆栈指针SSP和非安全堆栈指针NSP,但是在任何时候仅其中一个对于正在执行的程序而言是直接可见的。应该注意的是,在一些实施例中,对于每个堆栈来说可以存在多个堆栈指针,但是同样在任何时候仅一个将是可见的。在寄存器组60中还存在通用寄存器以用于存储由处理电路20正在处理的数据值。在这个实施例中,这些数据值被标记为R0至R12。
寄存器组60还包括链路寄存器65,所述链路寄存器65可以被用来在异常被取得或者函数被调用时存储返回值。返回值允许系统确定返回是异常返回还是函数返回,并且确定在从异常或函数返回时需要什么处理。可以使用不同种类的返回值,包括指示异常返回并且能够包括信息的异常返回(EXC_RETURN)值,诸如后台处理在里面被处理的域的安全性级别的指示,所述指示能够使得处理器能够确定如何处理异常返回,例如在恢复状态时要访问哪一个堆栈以及有多少寄存器需要被加载。
图1还示出了具有诸如浮点寄存器之类的额外的专用寄存器的额外的寄存器组64。在一个实施例中,能够将值设置在安全配置寄存器(SCR)62中以标识在额外的寄存器组64中的寄存器中的任一个是否能够存储安全数据,并且如果是这样的话,则那些寄存器将被认为(连同寄存器组60的寄存器一起)形成在控制从安全域到次安全域的转变时需要被管理的一组寄存器的一部分,并且反之亦然。
依照所描述的实施例,能够被用来在安全性域之间转变的一个机制是异常机制。依照这种机制,在发生异常时,将临时地暂停当前软件例程的执行,并且替代地执行将分支到用来处理该异常的异常处理例程,所使用的异常处理例程取决于异常发生的类型。一旦异常处理例程已被执行,异常返回然后将被用来返回到作为异常发生的结果而被临时地暂停的原始软件例程。
异常控制电路28被提供来控制异常的取得,并且在这些异常导致从更安全到次安全域的转变的情况下,在异常的取得之前清除可以存储敏感数据的该组寄存器以避免在这些寄存器中存储的数据可被非安全侧获得。在这些寄存器中的一些或全部中存储的状态将在异常控制电路28的控制下被存储在安全堆栈上,使得在从异常返回时能够恢复该状态。
虽然在图1中数据存储装置30包含单个安全区和单个非安全区,但是在本文中所描述的技术同样地适用于包括两个以上的不同安全性区的不同实施方式。
并且,虽然图1将异常控制电路28示出为与诸如执行级26之类的处理电路20的其它部分分离,但是在实践中,异常控制电路28可以至少部分再使用处理电路20的一些元件来控制异常的处理。
在控制从安全域到次安全域的转变并且反之亦然时需要被管理的寄存器的集合100在图2中被示意性地图示。依照所描述的实施例,这些寄存器中的一些被定义为调用寄存器110,而寄存器中的其它寄存器被定义为被调用寄存器120。调用寄存器是异常控制电路28将总是负责将状态保存到堆栈上的那些寄存器,而不管异常处理例程将在其中执行的域如何。在默认情况下,异常处理例程则负责将对被调用寄存器的状态保存。特别地,异常处理例程然后将被调用寄存器的状态保存到与异常处理例程正在其中执行的域相关联的堆栈上。进一步地,异常处理例程然后将负责在发出异常返回之前恢复那些被调用寄存器的状态(典型地通过将它们从堆栈往回拷贝到有关寄存器中)。
然而,依照所描述的实施例,在异常将需要从安全域到次安全域的转变、并且后台处理是在安全域中的情形下,异常控制电路28在使处理电路转变到异常处理例程的执行之前额外地负责将被调用寄存器的状态保存在安全堆栈36的堆栈帧内。
如较早地讨论的那样,SCR寄存器62的内容将定义哪些寄存器可以被用来存储安全数据,以及因此哪些寄存器需要被包含在寄存器的集合100内。在一个实施例中,SCR寄存器62的内容将标识额外的专用寄存器64中的任一个是否同样将被包括在除通用寄存器60之外的集合100内。
图3A图示了针对三个不同场景的异常控制电路对异常的发生和对该异常的后续完成的操作。场景中的第一个是其中后台处理是在安全域中,并且异常将由异常处理例程在安全域中处理,场景中的第二个是其中后台处理是在非安全域中,并且异常将由异常处理例程在安全域处理,以及第三场景是其中后台处理是在非安全域中,并且异常将由异常处理例程在非安全域中处理。
在这三个场景中的每一个中,当后台处理130被异常中断时,异常控制电路28被布置成在触发处理电路执行所需要的异常处理例程140以便处理异常之前,在点135处将来自调用寄存器的数据压栈到与后台处理在其中正被执行的域相关联的堆栈上。在异常完成时,异常控制电路在点150处恢复后台处理之前同样在点145处将预先压栈的数据从有关堆栈出栈回到调用寄存器中。
异常处理例程将典型地负责在异常处理例程期间在使用这些寄存器之前将来自被调用寄存器的数据压栈,并且负责稍后在异常处理例程的结束之前将该数据出栈回到被调用寄存器中。
在图3A的示例中,取决于特定实施方式,调用存储器在异常处理例程被执行之前可以被或者不被硬件清除。在一个实施例中,将不清除调用寄存器的内容,因为所设想的三个场景要么在异常被取得时不导致域的转变,要么仅导致从非安全域到安全域的转变,并且在一个实施例中,安全域被允许看到非安全数据。
图3B图示了针对其正在安全域中处理后台处理并且异常需要到非安全域的转变的场景的异常控制电路对异常的发生并且对异常的后续完成的操作。在这个示例中,当后台处理160被异常中断时,异常控制电路被配置成在点165处将来自调用寄存器的数据压栈到安全堆栈上,并且额外地在点170处被布置成将来自被调用寄存器的数据压栈到安全堆栈上。异常控制电路然后还将确保在触发处理电路执行异常处理例程175之前清除调用和被调用寄存器的内容。因此,在这种场景中,非安全异常处理例程不能够访问在调用或被调用寄存器中预先保持的安全数据。
在完成异常处理例程时,异常控制电路然后将在点180处将预先压栈的被调用数据从安全堆栈出栈回到被调用寄存器中,并且在点190处恢复后台处理之前,还将在点185处将预先压栈的调用数据从安全堆栈出栈回到调用寄存器中。
在一个特定实施例中,非安全异常处理例程仍然能够被布置成照常保存被调用寄存器的状态,但是在这种场景中,那些被调用寄存器将是空的,并且因此异常处理例程将仅仅将清除值存储到它将在发出异常返回之前稍后恢复到寄存器中的非安全堆栈上。
如上面所说明的那样,作为架构中的默认位置,寄存器状态的一部分由硬件在异常(例如中断)发生并且完成时自动地保存和恢复。通过扩展这样的架构以保存并且清除整个寄存器状态或安全域使用的寄存器状态中的至少全部,在中断引起安全到非安全转变的情况下,硬件能够在异常附近维持安全性。
通过利用上述技术,有可能通过扩展自动寄存器堆栈系统来去除通过安全状态代理中断的要求以便使异常控制电路将调用和被调用寄存器中的全部压入到堆栈(代替仅仅调用保存的寄存器),以及然后以便在切换到非安全状态并且跳转到异常处理例程(在中断的示例中为中断向量)之前清除它们的值。为了使中断延迟时间保持尽可能低,额外的寄存器状态在从安全向非安全状态转变时被仅压入到堆栈上。这在异常处理期间发生较高优先级异常(所谓的占先异常)时或在处理尾链异常时引入很多复杂性。图4示出了一些示例。
在第一示例中,在安全状态下执行后台程序代码并且接收到第一安全中断。寄存器(即调用寄存器)的子集被保存到安全堆栈,并且然后(虽然第一安全中断仍然正经由适当的中断向量处理)需要在非安全域中处理的第二较高优先级中断被接收到。因为它需要在非安全域中处理,所以在安全寄存器中的信息都不应该对于新的中断向量例程而言是可见的,并且因此所有安全寄存器(调用和被调用寄存器两者)应该被保存到安全堆栈并且然后在取得这个中断之前清除。当第二中断已完成时,处理返回到非完成的初始安全中断,并且响应于第二中断而被压入到安全堆栈的寄存器在该点通过弹出安全堆栈来恢复。这个第一安全中断然后能够完成,因此在重新开始安全后台处理之前,被压入到堆栈的原始子集然后能够通过弹出安全堆栈来恢复。
在第二示例中,第二中断具有比第一中断更低的优先级,并且因此第一中断将因此在取得非安全第二中断之前完成。一旦第一中断已完成,然后剩余的寄存器(即被调用寄存器)就被压入到安全堆栈,并且在取得非安全中断之前清除所有寄存器。虽然重要的是在该点处清除调用和被调用寄存器两者,但异常控制电路实际上可以不需要在这个阶段清除所有寄存器,因为例如可能已经较早地清除了调用寄存器。在非安全中断的末期,已被压入到安全堆栈的寄存器中的全部被恢复。
第三示例示出了接收到安全中断因此存在寄存器(调用寄存器)到非安全堆栈的部分保存的非安全后台代码。如果然后接收到具有较高优先级的第二非安全中断,则安全寄存器(调用和被调用)中的全部都将需要被压入到安全堆栈并且在它能够被取得之前清除。当非安全中断完成时,所有的安全寄存器需要从堆栈弹出,并且然后当安全中断完成时,非安全寄存器的原始子集被弹出。
第四示例示出了接收到使调用保存的寄存器被压入到安全堆栈的安全中断、但是在这个过程完成之前发生第二较高优先级非安全中断的安全后台代码。这个第二中断使剩余的寄存器(即被调用寄存器)在调用寄存器已被压栈之后被压入到安全堆栈上,从而导致所有寄存器的压入被执行。所有寄存器然后在取得非安全中断之前被清除。在完成这个中断时,被调用保存的寄存器在取得安全中断之前被从安全堆栈弹出。当安全中断完成时,从安全堆栈弹出原始调用寄存器。
图5示出了指示潜在中断和需要被执行的状态保存的表。在这点上,“压入子集”是将寄存器的调用保存的子集压入到堆栈上,“压入剩余”是将寄存器的被调用保存的子集压入到堆栈上,以及“压入所有”是将调用和被调用寄存器状态两者压入到堆栈上。在这点上,在一些寄存器不可用于存储敏感数据并且这是已知的情况下,然后这些寄存器可以无需被压入到堆栈上。
在表中,“异常进入”列标识如果在分支到初始中断的异常向量(其将在本文中被称为早期占先场景)之前发生比初始中断具有更高优先级的另外的中断则什么状态被压入到堆栈上。“异常返回”列标识如果发生具有低于或等于初始中断的优先级的另外的中断并且因此未被取得直到初始中断完成为止则什么状态被压入、弹出或者清除(这将在本文中被称为尾链场景)。虽然表中所标识的动作典型地是由异常控制电路硬件28所承担的动作,但是紧跟安全中断之后清除与非安全中断的尾链相关联的调用寄存器(“清除子集”)的动作在后台处理是在非安全域中的情形下事实上可以由软件而不是异常控制电路硬件来执行。对于在后台处理是在安全域中的情形下紧跟安全中断之后与非安全中断的尾链相关联的寄存器清除(形成“压入剩余并且清除所有”操作的一部分)的至少一部分情况也可能是这样的,其中软件能够被布置成清除调用寄存器,可是硬件然后将压入并且清除被调用寄存器。
如从图5的表的回顾显而易见,当从安全向非安全状态转变时,需要从寄存器去除能够保存安全状态的所有寄存器中的值,使得它们不可被非安全侧获得,并且因此除常见调用保存的寄存器状态之外,还执行额外的保存和清除。
图6示出了一个实施例的堆栈帧,并且特别是在从相同状态或次安全状态取得中断时保存到堆栈的堆栈帧上的寄存器内容(图6的左手侧)和在转变为次安全状态时保存到堆栈帧上的内容(图6的右手侧)。在这点上,在后者情况下需要保存并且清除更多寄存器,因为当这是必须不可被次安全状态获得的安全状态时不能够让寄存器存储任何状态。
图6标识了依照特定实施例的哪些寄存器被认为是调用寄存器并且哪些寄存器被认为是被调用寄存器。然而,如较早地讨论的那样,确切地哪些寄存器需要被包括在调用和被调用寄存器内可以取决于实施例而不同,并且能够由安全配置寄存器62中的值来指示,使得所需要的状态的保存和寄存器的清除能够通过使用这个值来确定。这个值可以由编译器针对特定设备来设置,并且这允许特定设备被以不同的方式使用以及在产品中提供某种灵活性。在其它实施例中,它可以由软件例如在系统正在启动时设置。
如将从上述描述所指出的那样,异常控制电路在发生异常时将寄存器状态的调用保存的段自动地压入和弹出到堆栈,并且必要时改变哪一个堆栈指针以及因此哪一个堆栈被使用。这甚至在具有安全和次安全域的系统中也允许以下优点被呈现:降低的中断延迟时间;降低的中断抖动;能够用C语言代替汇编语言编写异常处理程序;它使得能实现像异常进入上的异常和尾链这样的最优化。
图7A和7B图示了一些特定尾链示例场景。在图7A的示例中,在点250处正在执行安全后台处理,但是在点255处发生需要异常处理例程在安全域中被执行的初始异常。因此,在点255处,异常控制电路将来自调用寄存器的数据压栈到安全堆栈上,随后在点260处执行异常处理例程。
在点257处,发生另外的较低优先级异常,并且因此该异常仍然是未决的直到初始异常在点265处完成为止。在该点处,异常控制电路确定从安全到非安全域的转变是需要的以便处理另外的异常,并且因此在该点处将被调用寄存器压栈。它同样确保在触发处理电路在非安全域中执行所需要的异常处理例程以便在点270处处理另外的异常之前,被调用寄存器已被清除(调用寄存器已例如被软件较早地清除)。在点275处完成另外的异常时,异常控制电路然后在点280处重新开始后台处理之前将调用和被调用寄存器中的全部的内容出栈。
图7B图示了类似的示例,但在这个示例中,后台处理在点300处是在非安全域中。当在点305处发生初始异常时,然后在点310处执行针对初始异常的异常处理例程之前,异常控制电路像它在图7A的示例中所做的那样将调用寄存器压栈。在点307处发生的另外的较低优先级异常然后保持未决直到初始异常的处理在点315处结束为止。然而,在该点处,因为后台处理是非安全的,所以异常控制电路不执行压栈。如参考图5的表较早地讨论的那样,可以在这个阶段进行的可选步骤是清除调用寄存器,但是这个步骤可以替代地由软件代替异常控制电路硬件来执行。其后在点320处,在非安全域中处理针对另外的异常的异常处理例程。在点325处完成该另外的异常时,异常控制电路在点330处返回到后台处理之前将调用寄存器出栈。
在一个实施例中,图7A的示例是异常控制电路不得不在另外的异常紧跟初始异常的完成之后作为尾链化异常被处理时执行某种额外的压栈、并且因此执行压栈的开销保持至最小同时在处理尾链化异常时保持安全数据的安全性的仅有示例。
图8A和8B图示了两个另外的尾链示例。在图8A的示例中,在点350处正在执行安全后台处理,但是在点355处发生需要异常处理例程在非安全域中执行的初始异常。因此,在点355处,异常控制电路将来自调用寄存器和被调用寄存器的数据压栈到安全堆栈上,随后在点360处执行异常处理例程。
在点357处,发生另外的较低优先级异常,并且因此该异常仍然是未决的直到初始异常在点365处完成为止。在该点处,异常控制电路确定从非安全到安全域的转变是需要的以便处理另外的异常,并且因此在该点处在触发处理电路在安全域中执行所需要的异常处理例程以便在点370处处理该另外的异常之前将被调用寄存器出栈。在点375处完成该另外的异常时,异常控制电路然后在点380处重新开始后台处理之前将调用寄存器的内容出栈。
图8B图示了类似的示例,但在这个示例中,后台处理在点400处是在非安全域中。当在点405处发生初始异常时,然后在点410处执行针对初始异常的异常处理例程之前,异常控制电路将调用寄存器压栈。在点407处发生的另外的较低优先级异常然后保持未决直到初始异常的处理在点415处结束为止。然而,在该点处,异常控制电路确定不需要堆栈操作。其后在点420处在安全域中处理针对该另外的异常的异常处理例程。在点425处完成该另外的异常时,异常控制电路在点430处返回到后台处理之前将调用寄存器出栈。
在一个实施例中,图8A的示例是在异常控制电路不得不在另外的异常紧跟初始异常的完成之后作为尾链化异常被处理时执行出栈操作、并且因此执行出栈的开销保持至最小同时在处理尾链化异常时保持安全数据的安全性的简单尾链情形下的仅有示例。
图9A和9B图示了依照一个实施例的两个早期占先场景。在图9A的示例中,在安全域中在点450处执行的后台处理具有优先等级1,但是在接收到具有优先等级10并且需要在安全域中处理的异常时,异常控制电路开始在点455处将调用寄存器压栈以为在点460处转变到安全异常处理例程作准备。然而,在完成调用寄存器的压栈之前,在点465处接收到另外的异常,其具有较高的优先等级(在这个示例中优先等级为12),并且需要转变到非安全域。如在图9A的右手侧所示,在该点处,异常控制电路的压栈活动性被修改使得它将调用和被调用寄存器两者压栈(见点470),随后处理电路被触发来在点475处执行针对该另外的异常的异常处理代码。其后,优先等级10的安全异常然后能够作为尾链化异常被处理。
在图9B的示例中,在安全域中在点500处执行的后台处理具有优先等级1,但是在接收到具有优先等级10并且需要在非安全域中处理的异常时,异常控制电路开始在点505处将调用和被调用寄存器压栈以为在点510处转变到非安全异常处理例程作准备。然而,在完成寄存器的压栈之前,在点515处接收到另外的异常,其具有较高的优先等级(在这个示例中优先等级为12),并且需要转变到安全域。如在图9B的右手侧所示,在该点处,异常控制电路的压栈活动性被修改使得它仅将调用寄存器压栈(见点520),并且必要时这牵涉取消已经发生的任何被调用寄存器压栈的效果(例如,通过将那些受影响被调用寄存器的数据出栈)。其后,处理电路被触发来在点525处在安全域中执行针对该另外的异常的异常处理代码。其后,优先等级10的安全异常然后能够作为尾链化异常被处理。
图10示意性地图示了依照一个实施例能够在处理占先异常时使用的分解技术。不像参考图9A和9B所讨论的较早示例,在图10的示例中假定了到发生占先异常的时刻,已经发生了与当前异常相关联的任何状态保存,并且处理电路已被触发来执行所必要的异常处理例程。因此,在该点处,然后将需要中断当前异常处理例程的处理以便允许占先异常被取得。
如图10所示,在这样的场景中,占先异常的各种层次能够通过改变什么被视为后台处理来分解。特别地,如由转变550、560所示,这些能够被分解回为简单情况565,并且因此当取得第一异常时,后台处理是安全处理S1,以及最终当第一异常完成时,所返回到的后台处理再次是S1。对于第二异常,在取得占先异常的时刻,后台处理的视图像由虚线圆555示意性地图示的那样被改变,使得后台处理被认为是非安全处理N2,并且因此异常控制电路将占先异常视为简单情况570。因此,出于决定在取得异常S3时需要什么状态保存和/或恢复的目的,异常控制电路将后台处理视为非安全处理N2。
如图11所示,在一个实施例中,为了让异常控制电路能够确定在异常返回时要从哪一个堆栈恢复寄存器状态,以及处理电路应该返回到哪一个域,链路寄存器590可以被设置为特殊的EXC_RETURN值而不是返回地址。这个EXC_RETURN值可以包括向处理设备指示在取得异常之前处理电路在后台处理正被执行时所处于的域的安全性级别的安全性位。要返回到的实际程序计数器位置连同另一个寄存器状态一起被存储在这个域的堆栈上。在这种情况下,分支到EXC_RETURN值指示返回地址是在该堆栈上并且这是哪一个堆栈。
在一个实施例中,链路寄存器590不需要保持EXC_RETURN值长达异常处理例程正被执行的整个时间,并且替代地它可以在开始被设置为这个值,以及然后在之后不久移动到堆栈。当异常完成时,软件分支到由EXC_RETURN值所指示的地址,CPU将此定点为特殊事件,因为它不是有效的指令地址。
如果取得占先异常,则用于当前异常的EXC_RETURN值可以在针对新的占先异常在链路寄存器中设置新的EXC_RETURN值之前被存储在有关堆栈上(依照较早地讨论的过程)(其中设置的安全性位S适当地注意其处理正被中断的当前异常的域)。
图12是图示了依照一个实施例在接收到异常时执行的压栈操作的流程图。在步骤600处,确定是否已接收到异常,并且如果是这样的话,则过程进行到步骤605,其中确定处理电路是否当前正在执行后台处理,以及因此这种异常是否将是来自该后台处理的初始异常。如果确定了这个异常是来自后台处理的初始异常,则过程进行到步骤610,其中确定在取得异常时是否将需要安全到非安全转变(即,后台处理是否是在安全域中,并且将需要在非安全域中执行所需要的异常处理例程)。如果情况是这样的,则在步骤615处,调用和被调用寄存器两者都将使它们的数据通过异常控制电路28保存到安全堆栈。如果不是,则仅调用寄存器使它们的数据在步骤620处通过异常控制电路压栈,这种数据被保存到哪一个堆栈由后台处理正在其中执行的域来确定。过程然后返回到步骤600。
如果在步骤605处确定了在步骤600处接收到的异常不是来自后台处理的初始异常,则过程进行到步骤625,其中确定在步骤600处接收到的这个新的异常是否是比当前正被处理的现有异常更高的优先级。如果不是,则新的异常将被视为尾链化异常,并且在步骤630处将确定当前异常是否已结束。一旦当前异常已结束,然后就在步骤635处确定S位595是否在EXC_RETURN值内被设置。如果其没有被设置,则过程进行到步骤640,其中不执行另外的压栈,并且过程然后返回到步骤600。
然而,如果S位被设置,指示处理电路在来自后台处理的初始异常被取得的时刻正在安全域中操作,则在步骤645处确定新的异常是否需要安全到非安全转变以便让所需要的异常处理例程被执行。如果不是,则再次在步骤640处不执行另外的压栈并且过程返回到步骤600。然而,如果需要安全到非安全转变,则过程进行到步骤650,其中在过程然后返回到步骤600之前,在被调用寄存器内的数据同样被压栈在安全堆栈内。
如果在步骤625处确定了新的异常的确具有比当前异常更高的优先级,则新的异常将被视为占先异常。在步骤655处,然后将确定是否仍然针对当前异常执行压栈。如果是,则在步骤660处,压栈行为取决于新的异常而被修改,如参考图9A和9B预先所讨论的那样。其后,过程然后返回到步骤600。
如果在步骤655处,确定了对于当前异常仍然不在执行压栈,并且替代地处理电路已开始执行针对该当前异常的有关异常处理例程,则过程进行到步骤665,其中当前异常被视为后台处理,并且过程然后返回到步骤610。因此,在步骤665处,执行参考图10较早地讨论的分解技术。
图13是图示了依照一个实施例在完成异常时执行的出栈操作的流程图。在步骤700处,确定异常是否已完成,并且如果是这样的话,则过程进行步骤705,其中确定后台处理是否是在安全域中。如较早地提到的那样,这能够参考存储在EXC_RETURN值内的S位595来确定。如果从其返回的异常是占先异常,则像较早地讨论的那样,后台处理将被认为是被占先异常中断的异常处理例程。
如果后台处理是在安全域中,则在步骤710处,确定作为当前异常的完成的结果非安全到安全转变是否是需要的。如果是,则在步骤715处被调用寄存器的内容被出栈,随后过程进行到步骤720。如果在步骤710处确定了非安全到安全转变是不需要的,则过程直接地进行到步骤720。
在步骤720处,确定作为异常完成的结果返回到后台处理是否是需要的,并且如果不是,则过程返回到步骤700以等待下一个异常完成。然而,如果在步骤720处确定了返回到后台处理是需要的,则过程进行到步骤725,其中在过程返回到步骤700之前,调用寄存器的内容被出栈。
上面描述的实施例的技术实现了在响应于异常而执行状态保存时安全性与性能之间的平衡的改进,其中异常控制电路的硬件机制在无需通过异常处理程序进行代理的情况下实现了安全异常的有效处理。
本申请的主题与在共同转让的共同待决的美国申请号13/368,419和英国专利申请号1217531.1中所讨论的主题有关,并且这两个文档的全部内容从而通过引用并入。
尽管已经在本文中对特定实施例进行了描述,但是将了解的是,本发明不限于此,并且可以在本发明的范围内对其做出许多修改和添加。例如,在不背离本发明的范围的情况下,能够用独立权利要求的特征做出以下从属权利要求的特征的各种组合。
Claims (22)
1.一种数据处理设备,其包括:
被配置成响应于程序代码而执行数据处理操作的处理电路,所述处理电路包括用于控制异常处理的异常控制电路;
被配置成存储数据的多个寄存器,所述寄存器包括寄存器的第一子集和寄存器的第二子集;以及
被配置成存储数据的数据存储装置,所述数据存储装置包括包括安全区和次安全区在内的多个区,其中,安全区用于存储可由处理电路当在安全域中操作时访问并且不可由处理电路当在次安全域中操作时访问的数据;其中:
响应于来自由处理电路所执行的后台处理的初始异常,异常控制电路被配置成在触发处理电路执行与异常相对应的异常处理例程之前执行对来自寄存器的第一子集的数据的状态保存,其中,异常处理例程负责执行对来自寄存器的第二子集的数据的状态保存;并且
响应于引起从安全域到次安全域的转变的第一异常,在后台处理由处理电路在安全域中执行的情况下,异常控制电路被配置成在触发处理电路在次安全域中执行异常处理例程之前执行额外的对来自寄存器的第二子集的数据的状态保存。
2.根据权利要求1所述的数据处理设备,其中,响应于所述第一异常,异常控制电路被配置成在触发处理电路执行异常处理例程之前清除寄存器的第二子集。
3.根据权利要求2所述的数据处理设备,其中,响应于所述第一异常,数据处理设备被配置成在异常控制电路触发处理电路执行异常处理例程之前确保寄存器的第一子集不包含安全数据。
4.根据任何前述权利要求所述的数据处理设备,其中,如果异常控制电路已在触发处理电路执行异常处理例程之前执行了额外的状态保存,则异常处理例程不执行寄存器的第二子集的状态保存。
5.根据权利要求1至3中任一项所述的数据处理设备,其中,如果异常控制电路已在触发处理电路执行异常处理例程之前执行了额外的状态保存,则异常处理例程同样执行寄存器的第二子集的状态保存。
6.根据任何前述权利要求所述的数据处理设备,其中,所述第一异常包括在后台处理期间发生的初始异常。
7.根据权利要求1至5中任一项所述的数据处理设备,其中,所述第一异常包括在初始异常已被处理之后并且在返回到在初始异常之前正被执行的后台处理之前所处理的尾链化异常。
8.根据任何前述权利要求所述的数据处理设备,其中,响应于在所述初始异常已被处理并且在处理电路已返回到在初始异常之前正被执行的所述后台处理之前为待决的另外的异常,异常控制电路被配置成在使处理电路返回到后台处理之前将另外的异常的处理作为尾链化异常控制。
9.根据任何前述权利要求所述的数据处理设备,其中:
所述异常控制电路被配置成,响应于比正在被执行的异常处理例程所对应的当前异常更低的优先级的新的异常,在使处理电路返回到后台处理之前将新的异常的处理作为尾链化异常控制;
异常控制电路被配置成在控制新的异常的处理时不再执行状态保存操作,除非所述当前异常在所述安全域中被执行,所述新的异常指示切换到所述次安全域,并且所述后台处理在所述安全域中被执行,在这种情况下,所述异常控制电路被配置成,在完成针对所述当前异常的异常处理例程之后,执行所述额外的对来自寄存器的所述第二子集的数据的状态保存,并且确保寄存器的所述第二子集在触发处理电路执行与新的异常相对应的异常处理例程之前被清除。
10.根据任何前述权利要求所述的数据处理设备,其中:
所述异常控制电路被配置成,响应于比正在被执行的异常处理例程所对应的当前异常具有更低的优先级的新的异常,在使处理电路返回到后台处理之前将新的异常的处理作为尾链化异常控制;
异常控制电路被配置成在控制新的异常的处理时不执行状态恢复操作,除非所述当前异常在所述次安全域中被执行,所述新的异常指示切换到所述安全域,并且所述后台处理在所述安全域中被执行,在这种情况下,所述异常控制电路被配置成,在完成针对所述当前异常的异常处理例程之后,在触发处理电路执行与新的异常相对应的异常处理例程之前执行数据到寄存器的所述第二子集中的状态恢复操作。
11.根据任何前述权利要求所述的数据处理设备,其中,如果当执行额外的寄存器的第二子集的状态保存时发生比所述第一异常具有更高优先级的占先异常,并且该占先异常不需要从安全域到次安全域的转变,则异常控制电路被配置成在触发处理电路处理占先异常的异常处理例程之前取消额外的状态保存。
12.根据任何前述权利要求所述的数据处理设备,其中,如果当前异常未引起从安全域到次安全域的转变,并且如果在与当前异常相关联的异常处理例程的处理开始之前发生比当前异常具有更高优先级以及需要从安全域到次安全域的转变的占先异常,则异常控制电路被配置成在触发处理电路处理占先异常的异常处理例程之前额外地执行额外的对来自寄存器的第二子集的数据的状态保存。
13.根据任何前述权利要求所述的数据处理设备,其中,如果在异常控制电路已触发处理电路执行与当前异常相对应的异常处理例程之后、但是在该异常处理例程已完成之前发生占先异常,则异常控制电路被配置成在触发处理电路执行占先异常的异常处理例程之前确定是需要对寄存器的所述第一子集进行状态保存还是寄存器的所述第一和第二子集均进行状态保存时将当前异常视为所述后台处理。
14.根据任何前述权利要求所述的数据处理设备,其中,数据存储装置包括包括在安全区中的安全堆栈和在次安全区中的次安全堆栈在内的多个堆栈。
15.根据权利要求14所述的数据处理设备,其中,在对来自寄存器的第一子集的数据的状态保存和额外的对来自寄存器的第二子集的数据的状态保存中,异常控制电路被配置成将数据保存到与处理电路在执行所述后台处理时正在操作的域的安全性相对应的安全堆栈和次安全堆栈中的一个。
16.根据任何前述权利要求所述的数据处理设备,进一步包括安全配置存储位置以用于存储指示所述多个寄存器中的哪些可用于通过当前执行代码存储安全数据的安全配置值,其中,响应于引起从安全域到次安全域的转变的异常,异常控制电路被配置成将由所述安全配置值所指示的寄存器中的一个或多个包括在寄存器的所述第二子集内。
17.根据任何前述权利要求所述的数据处理设备,进一步包括用于存储异常返回值的存储位置,所述处理电路被配置成将域值设置在所述异常返回值内以指示所述数据处理设备在从所述后台处理取得初始异常后正在里面操作的域,所述异常控制电路依靠所述域值来确定所述寄存器中的哪些应该经受状态保存或状态恢复操作。
18.一种数据处理设备,其包括:
用于响应于程序代码而执行数据处理操作的数据处理电路;
多个寄存器;以及
用于存储数据的数据存储装置,所述数据存储装置包括每个区都具有安全级别的多个区,并包括用于存储所述数据处理电路在所述安全域中操作时可访问的而在次安全域中操作时不可访问的敏感数据的至少一个安全区和用于存储次安全数据的次安全区;
所述数据存储装置包括至少两个堆栈,在所述安全区中的安全堆栈和在所述次安全区中的次安全堆栈;其中
所述数据处理电路包括异常处理电路,所述异常处理电路被配置成在所述数据处理电路正在所述安全域中执行并且所述异常指示切换到次安全域中执行程序代码以清除所述寄存器的寄存器集合时对异常的接收做出响应,在所述寄存器集合内的寄存器取决于执行的所述域的安全级别和将发生所述异常的所述域。
19.根据权利要求18所述的数据处理设备,其中,所述数据处理电路被进一步配置成在清除所述寄存器集合之前,将存储在所述寄存器集合中的状态保存到所述数据处理电路正在里面执行的域的所述堆栈。
20.根据权利要求18所述的数据处理设备,其中,所述数据处理设备包括安全配置存储位置以用于存储指示所述多个寄存器中的哪些可用于由当前执行代码用于存储安全状态的值,所述数据处理电路被配置成依靠由所述安全配置值所指示的所述多个寄存器以及执行的域的安全级别和将发生所述异常的域来确定哪些寄存器是在寄存器集合内。
21.一种在数据处理设备上处理数据的方法,所述数据处理设备包括:用于响应于程序代码而执行数据处理操作的处理电路,所述处理电路包括用于控制异常处理的异常控制电路;用于存储数据的多个寄存器,所述寄存器包括寄存器的第一子集合和寄存器的第二子集;以及用于存储数据的数据存储装置,所述数据存储装置包括包括安全区和次安全区在内的多个区,其中,安全区用于存储可由处理电路当在安全域中操作时访问并且不可由处理电路在次安全域中操作时访问的数据,所述方法包括:
响应于来自由处理电路所执行的后台处理的初始异常,采用异常控制电路来在触发处理电路执行与异常相对应的异常处理例程之前执行对来自寄存器的第一子集的数据的状态保存,其中,异常处理例程负责执行对来自寄存器的第二子集的数据的状态保存;并且
响应于引起从安全域到次安全域的转变的第一异常,在后台处理由处理电路在安全域中执行的情况下,采用异常控制电路来在触发处理电路在次安全域中执行异常处理例程之前执行额外的对来自寄存器的第二子集的数据的状态保存。
22.一种数据处理设备,其包括:
用于响应于程序代码而执行数据处理操作的处理装置,所述处理装置包括用于控制异常处理的异常控制装置;
用于存储数据的多个寄存器装置,包括寄存器装置的第一子集和寄存器装置的第二子集;以及
用于存储数据的数据存储装置,包括包括安全区和次安全区在内的多个区,其中,安全区用于存储可由处理装置在安全域中操作时访问并且不可由处理装置在次安全域中操作时访问的数据;其中:
响应于来自由处理装置所执行的后台处理的初始异常,异常控制装置在触发处理装置执行与异常相对应的异常处理例程之前执行对来自寄存器装置的第一子集的数据的状态保存,其中,异常处理例程负责执行对来自寄存器装置的第二子集的数据的状态保存;并且
响应于引起从安全域到次安全域的转变的第一异常,在后台处理由处理装置在安全域中执行的情况下,异常控制装置在触发处理装置在次安全域中执行异常处理例程之前执行额外的对来自寄存器装置的第二子集的数据的状态保存。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/368,419 | 2012-02-08 | ||
US13/368,419 US9477834B2 (en) | 2012-02-08 | 2012-02-08 | Maintaining secure data isolated from non-secure access when switching between domains |
GB201217531A GB201217531D0 (en) | 2012-10-01 | 2012-10-01 | ARMv7-M Asset Protection Proposal |
GB1217531.1 | 2012-10-01 | ||
GB1220771.8A GB2499287A (en) | 2012-02-08 | 2012-11-19 | Exception handling in data processing with different security domains |
GB1220771.8 | 2012-11-19 | ||
PCT/GB2013/050102 WO2013117899A1 (en) | 2012-02-08 | 2013-01-17 | Exception handling in a data processing apparatus having a secure domain and a less secure domain |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104115155A true CN104115155A (zh) | 2014-10-22 |
CN104115155B CN104115155B (zh) | 2016-12-28 |
Family
ID=47521366
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380008455.1A Active CN104115155B (zh) | 2012-02-08 | 2013-01-17 | 在具有安全域和次安全域的数据处理设备中的异常处理 |
CN201310038646.4A Active CN103310163B (zh) | 2012-02-08 | 2013-01-31 | 使用安全域与次安全域的数据处理装置和方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310038646.4A Active CN103310163B (zh) | 2012-02-08 | 2013-01-31 | 使用安全域与次安全域的数据处理装置和方法 |
Country Status (10)
Country | Link |
---|---|
EP (1) | EP2812836B1 (zh) |
JP (2) | JP6134742B2 (zh) |
KR (1) | KR102075367B1 (zh) |
CN (2) | CN104115155B (zh) |
GB (2) | GB2499287A (zh) |
IL (1) | IL233521A (zh) |
IN (1) | IN2014DN05705A (zh) |
MY (1) | MY167888A (zh) |
TW (1) | TWI569164B (zh) |
WO (1) | WO2013117899A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105574440A (zh) * | 2014-10-31 | 2016-05-11 | 惠普发展公司,有限责任合伙企业 | 利用在安全域中执行的应用的硬件保护数据处理系统和方法 |
CN107402831A (zh) * | 2016-04-28 | 2017-11-28 | 想象技术有限公司 | 用于在异常驱动系统中处理异常的方法 |
CN107436752A (zh) * | 2017-07-20 | 2017-12-05 | 龙芯中科技术有限公司 | 异常现场恢复方法、装置及计算机可读存储介质 |
CN108415788A (zh) * | 2017-02-09 | 2018-08-17 | Arm 有限公司 | 用于对无响应处理电路作出响应的数据处理设备和方法 |
CN108701031A (zh) * | 2016-03-02 | 2018-10-23 | Arm有限公司 | 寄存器访问控制 |
CN110574009A (zh) * | 2017-05-05 | 2019-12-13 | Arm有限公司 | 用于管理对能力的使用的设备和方法 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9268970B2 (en) | 2014-03-20 | 2016-02-23 | Analog Devices, Inc. | System and method for security-aware master |
EP3343419A1 (en) | 2015-08-25 | 2018-07-04 | Seltech Corporation | System with hypervisor |
GB2552966B (en) * | 2016-08-15 | 2019-12-11 | Arm Ip Ltd | Methods and apparatus for protecting domains of a device from unauthorised accesses |
GB2577878B (en) | 2018-10-08 | 2020-11-11 | Advanced Risc Mach Ltd | Transition disable indicator |
GB2578135B (en) * | 2018-10-18 | 2020-10-21 | Advanced Risc Mach Ltd | Range checking instruction |
JP6877475B2 (ja) * | 2019-03-11 | 2021-05-26 | 日立Astemo株式会社 | 電子制御装置及びスタック使用方法 |
GB2589895B (en) | 2019-12-11 | 2022-03-16 | Advanced Risc Mach Ltd | Intermodal calling branch instruction |
GB2589897B (en) | 2019-12-11 | 2022-03-23 | Advanced Risc Mach Ltd | Domain transition disable configuration parameter |
CN114490448A (zh) * | 2020-11-13 | 2022-05-13 | 华为技术有限公司 | 一种切换执行环境的方法及其相关设备 |
CN117400387B (zh) * | 2023-12-13 | 2024-03-15 | 邯郸市丰泰陶瓷贸易有限公司 | 一种高性能陶瓷坯料制作装置及其方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2396034A (en) * | 2002-11-18 | 2004-06-09 | Advanced Risc Mach Ltd | Technique for accessing memory in a data processing apparatus |
US20040187117A1 (en) * | 2002-11-18 | 2004-09-23 | Arm Limited | Handling interrupts in data processing |
CN1711524A (zh) * | 2002-11-18 | 2005-12-21 | Arm有限公司 | 在安全模式和非安全模式间切换的处理器 |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH10228421A (ja) * | 1997-02-14 | 1998-08-25 | Nec Ic Microcomput Syst Ltd | メモリアクセス制御回路 |
JP2990140B2 (ja) * | 1998-01-09 | 1999-12-13 | 日本電気アイシーマイコンシステム株式会社 | 割り込み制御回路 |
JP3716604B2 (ja) * | 1998-03-24 | 2005-11-16 | 富士電機機器制御株式会社 | 情報処理装置 |
JP2002526822A (ja) * | 1998-09-25 | 2002-08-20 | ヒューズ・エレクトロニクス・コーポレーション | セキュリティ処理環境を提供するための装置 |
US6363474B1 (en) * | 1999-06-30 | 2002-03-26 | Bull Hn Information Systems Inc. | Process switching register replication in a data processing system |
GB2369464B (en) * | 2000-11-27 | 2005-01-05 | Advanced Risc Mach Ltd | A data processing apparatus and method for saving return state |
EP1331539B1 (en) * | 2002-01-16 | 2016-09-28 | Texas Instruments France | Secure mode for processors supporting MMU and interrupts |
GB2411254B (en) * | 2002-11-18 | 2006-06-28 | Advanced Risc Mach Ltd | Monitoring control for multi-domain processors |
GB2402785B (en) | 2002-11-18 | 2005-12-07 | Advanced Risc Mach Ltd | Processor switching between secure and non-secure modes |
GB2396930B (en) * | 2002-11-18 | 2005-09-07 | Advanced Risc Mach Ltd | Apparatus and method for managing access to a memory |
US7383587B2 (en) * | 2002-11-18 | 2008-06-03 | Arm Limited | Exception handling control in a secure processing system |
JP2004280801A (ja) * | 2003-02-24 | 2004-10-07 | Matsushita Electric Ind Co Ltd | プロセッサおよびこのプロセッサ用のプログラムを生成するコンパイラ装置 |
WO2006052703A2 (en) * | 2004-11-04 | 2006-05-18 | Board Of Trustees Of Michigan State University | Secure bit |
US7401210B2 (en) * | 2005-03-30 | 2008-07-15 | Arm Limited | Selecting subroutine return mechanisms |
JP4519738B2 (ja) * | 2005-08-26 | 2010-08-04 | 株式会社東芝 | メモリアクセス制御装置 |
US8959339B2 (en) * | 2005-12-23 | 2015-02-17 | Texas Instruments Incorporated | Method and system for preventing unauthorized processor mode switches |
US8621607B2 (en) * | 2006-05-18 | 2013-12-31 | Vmware, Inc. | Computational system including mechanisms for tracking taint |
WO2008030093A2 (en) * | 2006-09-06 | 2008-03-13 | Silicon Hive B.V. | Data processing circuit with a plurality of instruction modes |
GB2448151B (en) | 2007-04-03 | 2011-05-04 | Advanced Risc Mach Ltd | Memory domain based security control within data processing systems |
GB2448149B (en) * | 2007-04-03 | 2011-05-18 | Advanced Risc Mach Ltd | Protected function calling |
US8578483B2 (en) * | 2008-07-31 | 2013-11-05 | Carnegie Mellon University | Systems and methods for preventing unauthorized modification of an operating system |
US8051467B2 (en) * | 2008-08-26 | 2011-11-01 | Atmel Corporation | Secure information processing |
JP2010186386A (ja) * | 2009-02-13 | 2010-08-26 | Oki Semiconductor Co Ltd | プロセッサ |
GB2471138B (en) * | 2009-06-19 | 2014-08-13 | Advanced Risc Mach Ltd | Handling integer and floating point registers during a context switch |
JP2011070290A (ja) * | 2009-09-24 | 2011-04-07 | Renesas Electronics Corp | データプロセッサ |
GB2478733B (en) * | 2010-03-15 | 2013-08-14 | Advanced Risc Mach Ltd | Apparatus and method for handling exception events |
GB2482701C (en) * | 2010-08-11 | 2018-12-26 | Advanced Risc Mach Ltd | Illegal mode change handling |
-
2012
- 2012-11-19 GB GB1220771.8A patent/GB2499287A/en not_active Withdrawn
- 2012-11-19 GB GB1220769.2A patent/GB2501343A/en not_active Withdrawn
-
2013
- 2013-01-17 JP JP2014556134A patent/JP6134742B2/ja active Active
- 2013-01-17 WO PCT/GB2013/050102 patent/WO2013117899A1/en active Application Filing
- 2013-01-17 MY MYPI2014701893A patent/MY167888A/en unknown
- 2013-01-17 CN CN201380008455.1A patent/CN104115155B/zh active Active
- 2013-01-17 IN IN5705DEN2014 patent/IN2014DN05705A/en unknown
- 2013-01-17 EP EP13700948.6A patent/EP2812836B1/en active Active
- 2013-01-17 KR KR1020147023455A patent/KR102075367B1/ko active IP Right Grant
- 2013-01-24 TW TW102102670A patent/TWI569164B/zh active
- 2013-01-28 JP JP2013012980A patent/JP6189039B2/ja active Active
- 2013-01-31 CN CN201310038646.4A patent/CN103310163B/zh active Active
-
2014
- 2014-07-06 IL IL233521A patent/IL233521A/en active IP Right Grant
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2396034A (en) * | 2002-11-18 | 2004-06-09 | Advanced Risc Mach Ltd | Technique for accessing memory in a data processing apparatus |
US20040187117A1 (en) * | 2002-11-18 | 2004-09-23 | Arm Limited | Handling interrupts in data processing |
CN1711524A (zh) * | 2002-11-18 | 2005-12-21 | Arm有限公司 | 在安全模式和非安全模式间切换的处理器 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105574440A (zh) * | 2014-10-31 | 2016-05-11 | 惠普发展公司,有限责任合伙企业 | 利用在安全域中执行的应用的硬件保护数据处理系统和方法 |
CN105574440B (zh) * | 2014-10-31 | 2018-10-02 | 惠普发展公司,有限责任合伙企业 | 利用在安全域中执行的应用的硬件保护数据处理系统和方法 |
CN108701031A (zh) * | 2016-03-02 | 2018-10-23 | Arm有限公司 | 寄存器访问控制 |
CN107402831A (zh) * | 2016-04-28 | 2017-11-28 | 想象技术有限公司 | 用于在异常驱动系统中处理异常的方法 |
CN107402831B (zh) * | 2016-04-28 | 2022-08-09 | 北欧半导体公司 | 用于在异常驱动系统中处理异常的方法 |
CN108415788A (zh) * | 2017-02-09 | 2018-08-17 | Arm 有限公司 | 用于对无响应处理电路作出响应的数据处理设备和方法 |
CN108415788B (zh) * | 2017-02-09 | 2024-03-22 | Arm 有限公司 | 用于对无响应处理电路作出响应的数据处理设备和方法 |
CN110574009A (zh) * | 2017-05-05 | 2019-12-13 | Arm有限公司 | 用于管理对能力的使用的设备和方法 |
CN110574009B (zh) * | 2017-05-05 | 2023-09-26 | Arm有限公司 | 用于管理对能力的使用的设备和方法 |
CN107436752A (zh) * | 2017-07-20 | 2017-12-05 | 龙芯中科技术有限公司 | 异常现场恢复方法、装置及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
JP6134742B2 (ja) | 2017-05-24 |
CN103310163A (zh) | 2013-09-18 |
WO2013117899A1 (en) | 2013-08-15 |
KR20140123545A (ko) | 2014-10-22 |
KR102075367B1 (ko) | 2020-02-11 |
TWI569164B (zh) | 2017-02-01 |
EP2812836B1 (en) | 2016-01-06 |
CN104115155B (zh) | 2016-12-28 |
JP6189039B2 (ja) | 2017-08-30 |
IN2014DN05705A (zh) | 2015-04-10 |
GB201220771D0 (en) | 2013-01-02 |
IL233521A (en) | 2017-11-30 |
GB2499287A (en) | 2013-08-14 |
IL233521A0 (en) | 2014-08-31 |
JP2015506525A (ja) | 2015-03-02 |
CN103310163B (zh) | 2018-01-05 |
JP2013161479A (ja) | 2013-08-19 |
MY167888A (en) | 2018-09-26 |
GB201220769D0 (en) | 2013-01-02 |
EP2812836A1 (en) | 2014-12-17 |
GB2501343A (en) | 2013-10-23 |
TW201346625A (zh) | 2013-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104115155A (zh) | 在具有安全域和次安全域的数据处理设备中的异常处理 | |
CN104685508A (zh) | 具有安全域和次安全域的数据处理装置中的异常处理 | |
CN104704503A (zh) | 在安全域与次安全域之间进行转换时保护安全数据和程序代码免受非安全访问的数据处理装置和方法 | |
KR102069522B1 (ko) | 도메인간 전환시의 불안전한 액세스로부터 분리된 안전한 데이터의 유지 | |
US9202071B2 (en) | Exception handling in a data processing apparatus having a secure domain and a less secure domain | |
CN101213518A (zh) | 通过指令组设陷来优化os上下文切换的系统和方法 | |
US10503932B2 (en) | Secure mode state data access tracking | |
US20170017485A1 (en) | System and method for updating firmware in real-time | |
KR20200139706A (ko) | 트랜잭션에서의 예외처리 | |
CN105786597A (zh) | uCOS-III操作系统实现任务切换的方法及装置 | |
CN103593169B (zh) | 一种多线程处理器中的指令输出装置、方法及其处理器 | |
CN104978208A (zh) | 一种热重启方法及其装置 | |
CN108415729A (zh) | 一种cpu指令异常的处理方法及装置 | |
CN110059040A (zh) | 一种基于risc-v架构的可嵌套异常和非屏蔽中断系统及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |