CN104115154B - 当在域之间切换时维持安全数据与不安全访问相隔离 - Google Patents
当在域之间切换时维持安全数据与不安全访问相隔离 Download PDFInfo
- Publication number
- CN104115154B CN104115154B CN201380008433.5A CN201380008433A CN104115154B CN 104115154 B CN104115154 B CN 104115154B CN 201380008433 A CN201380008433 A CN 201380008433A CN 104115154 B CN104115154 B CN 104115154B
- Authority
- CN
- China
- Prior art keywords
- data processing
- storehouse
- security
- data
- safety zone
- 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.)
- Active
Links
- 238000012545 processing Methods 0.000 claims abstract description 195
- 238000013500 data storage Methods 0.000 claims abstract description 64
- 230000004044 response Effects 0.000 claims abstract description 62
- 239000003550 marker Substances 0.000 claims description 85
- 238000000034 method Methods 0.000 claims description 45
- 230000002159 abnormal effect Effects 0.000 claims description 24
- 230000008569 process Effects 0.000 claims description 23
- 238000011068 loading method Methods 0.000 claims description 11
- 230000008859 change Effects 0.000 claims description 9
- 230000005611 electricity Effects 0.000 claims description 3
- 230000035945 sensitivity Effects 0.000 claims description 3
- 238000000151 deposition Methods 0.000 claims description 2
- 230000006870 function Effects 0.000 description 129
- 238000006243 chemical reaction Methods 0.000 description 11
- 230000002349 favourable effect Effects 0.000 description 6
- 238000004590 computer program Methods 0.000 description 5
- 238000004321 preservation Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000012384 transportation and delivery Methods 0.000 description 2
- 102000044437 S1 domains Human genes 0.000 description 1
- 108700036684 S1 domains Proteins 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
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
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6245—Protecting personal data, e.g. for financial or medical purposes
-
- 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
-
- 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- 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/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
- G06F9/462—Saving or restoring of program or task context with multiple register sets
Abstract
一种数据处理设备,包括:数据处理电路,用于响应于程序代码而执行数据处理操作;多个寄存器;以及用于存储数据的数据存储装置,所述数据存储装置包括多个具有不同安全级别的区域,并且包括用于存储可被在安全域中工作的数据处理电路访问并且不可被在较不安全域中工作的数据处理电路访问的敏感数据的至少一个安全区域以及用于存储较不安全数据的较不安全区域。数据存储装置包括至少两个堆栈,即安全区域中的安全堆栈和较不安全区域中的较不安全堆栈。数据处理电路在处理在安全区域中存储的程序代码时在安全域中工作并且在处理在较不安全区域中存储的程序代码时在较不安全域中工作;其中数据处理电路被配置为响应于正被执行的程序代码的存储位置而确定要将数据存储到哪个堆栈或者要从哪个堆栈中加载数据。响应于在第一区域中存储的程序代码调用将被执行的函数,函数代码被存储在第二区域中,该第二区域具有与第一区域不同的安全级别,数据处理电路被配置为确定所述第一和第二区域中的哪一个具有更低安全级别并且被配置为在执行程序代码和函数代码时针对函数变元和返回数据值访问具有所述更低安全级别的区域的堆栈。
Description
技术领域
技术领域涉及数据处理领域并且具体涉及对敏感数据和代码的处理。
背景技术
许多数据处理系统和架构提供了隔离并保护敏感数据和代码段免受未经授权的人员或进程访问的多种方式。尽管能够提供安全性是重要的,但是存在与该保护相关联的性能和电路面积的开销。
在诸如微控制器之类的小型系统中,使这些开销保持较低是重要的,因而可能需要在安全级别与性能之间做出某种妥协。
一种使数据和代码保持安全的方式是由联合王国剑桥的利用其Trustzone架构提供的,在Trsutzone架构中存在安全和不安全状态并且异常指令被用来在这些状态之间转换,异常处理器(exception handler)保护安全侧的安全性。尽管该方法提供了高度的安全性,但是要改变安全状态需要软件异常处理器形式的大量软件干预,这既降低了系统性能又增加了为安全软件开发外部应用程序接口API的工作量,这是因为所有的调用都必须通过异常处理器来代理。
US7966466和US 2008/0250216公开了另一安全系统,其中数据存储装置具有安全侧和不安全侧并且当前正被执行的代码在该数据存储装置中的位置决定了处理器所工作于的域并从而决定了其所被允许访问的数据。
发明内容
本发明的第一方法提供了一种数据处理设备,数据处理设备包括:数据处理电路,用于响应于程序代码而执行数据处理操作;多个寄存器;以及用于存储数据的数据存储装置,数据存储装置包括多个区域,每个区域具有一个安全级别,并且包括用于存储可被在安全域中工作的数据处理电路访问并且不可被在较不安全域中工作的数据处理电路访问的敏感数据的至少一个安全区域以及用于存储较不安全数据的较不安全区域;数据存储装置包括至少两个堆栈,即安全区域中的安全堆栈和较不安全区域中的较不安全堆栈;数据处理电路在处理存储于安全区域中的程序代码时在安全域中工作并且在处理存储于较不安全区域中的程序代码时在较不安全域中工作;其中数据处理电路被配置为响应于正被执行的程序代码的存储位置而确定要将数据存储到哪个堆栈或者要从哪个堆栈中加载数据;并且响应于在第一区域中存储的程序代码调用将被执行的函数,函数代码被存储在第二区域中,第二区域具有与第一区域不同的安全级别,数据处理电路被配置为确定第一和第二区域中的哪一个具有更低安全级别并且被配置为在执行程序代码和函数代码时针对函数变元和返回数据值而访问具有更低安全级别的区域的堆栈。
本发明认识到,限制对安全数据和安全代码的访问是重要的但是以低延迟时间、面积高效的方式提供该安全性有时也是重要的。
在存储器的不同安全区域中使用不同堆栈是一种在处理期间存储数据的已知方式。当在任务以及域之间切换时,这些堆栈经常被用来存储处理器的当前状态以使得其稍后可被恢复。将在一个域中处理的数据和代码与正在另一个中处理的数据和代码相隔离当一个域中的程序调用另一个域中的函数并需要函数变元和返回值在这两者之间传递时变得更加复杂。当在安全和不安全域之间切换时,域之间的任何数据传送需要被仔细控制以避免敏感数据变得对不安全程序可用。本发明利用了不同安全区域中的堆栈并且还利用了根据当前正被执行的代码的存储位置来确定当前安全级别的能力,使得当检测到造成安全区域切换的函数调用时,其控制针对该函数的变元和返回值所进行访问的堆栈,使得它们可被从调用该函数的域以及该函数正在其中执行的域中访问而其他数据被维持在其自己的区域中。
以这种方式,利用很少的额外硬件并且不用专用的软件处理例程,可以在不同的安全域之间切换并且以高效方式在它们之间传送数据。
应当注意到,尽管更低安全级别的堆栈可被用来存储函数变元和返回数据值,但是并非所有的函数变元和返回数据值被存储在该堆栈上,在一些实施例中某些寄存器可能可用于存储对调用函数的程序和被调用的函数两者都可以访问的值,并且在这种情况下这些寄存器可被用于存储函数变元和返回数据值并且仅在需要在程序代码和函数之间传递更多值的情况下使用更低安全级别的堆栈。
应当注意到,调用函数的步骤涉及程序内的一个代码段分支到另一代码段,其中数据值需要在这两个代码段之间被传递。尽管这被描述为程序调用函数,但是应当明白这两个代码段之间可能没有显著差异,调用者被看作是程序而被调用者被看作是函数。因此,调用者可能是调用较小的函数来完成特定任务的大程序,或者其可能是分支到另一类似大小程序的程序,或者其可能是调用另一函数或应用的函数。
在某些实施例中,数据处理设备还包括用于存储堆栈选择标志的存储位置;以及标志设置电路;其中数据存储装置包括两个区域,即较安全的区域和较不安全的区域;标志设置电路被配置为响应于较不安全的程序代码调用较安全的函数而设置堆栈选择标志,并且响应于安全程序代码调用任何函数以及响应于较不安全的程序代码调用较不安全的函数而清空堆栈选择标志。
一种向处理电路指示哪个堆栈应当被使用的方式是使用堆栈选择标志,该堆栈选择标志在程序代码在安全域之间切换时被自动设置。这是允许电路在特定时刻确定哪个堆栈将被使用的一种直截了当的方式,该方式是由硬件控制的并且因而既安全又低延迟时间。如果存在两个域则简单的一比特位的标志可被使用,当调用函数时,取决于安全区域的任何改变,硬件可以设置或者清空该标志。在这点上,标志的设置可意味着将其设置为一,或者其可意味着将其设置为零,而标志的清空是将其设置为另一值。还应该注意到,对标志进行设置的硬件电路可能是处理电路的一部分或者其可能分布在数据处理设备中的某些地方或者其可以是某种数据访问控制电路的一部分。
在某些实施例中,数据处理设备还包括用于存储堆栈选择标志的存储位置;标志设置电路;标志设置电路被配置为响应于检测到数据处理电路在具有不同安全级别的区域之间转换而设置堆栈选择标志以指示更低安全区域,并且被配置为响应于检测到数据处理电路执行对相同安全级别的程序调用而设置堆栈选择标志来指示当前安全区域。
在某些实施例中,堆栈选择标志可指示处理电路在其间进行转换的两种安全区域中的更低者。在存在多于两种不同安全级别的情况下,则对标志的简单设置和清空将不足以在多个级别之间进行区分并且标志可能需要多个比特位的值,而硬件在区域被转换时指示较不安全的区域。
在某些实施例中,数据处理电路被配置为响应于程序代码中的设置堆栈选择标志指令而将堆栈选择标志设置为指示较不安全区域的值,其中调用较不安全函数的程序代码在调用函数之前将设置堆栈选择标志指令包括在程序代码中。
尽管电路将响应于域之间的转换而自动设置堆栈选择标志,也可以通过插入到代码中的软件指令来对其进行设置。这在转换不足以允许标志设定为正确的某些情况下可能是重要的。因此,例如,如果程序代码正在调用较不安全的函数,则到较不安全的代码的转换在仅有两种不同安全区域的情况下将清空标志或者如果不止两种则将其设置为指示更低区域。然而,在转换之前,安全程序将需要将函数变元存储到堆栈,因此除非选择堆栈标志被设置为指示较不安全堆栈,否则要被较不安全函数使用的变元将被存储在其无法访问的安全堆栈上。
在某些实施例中,数据处理设备响应于程序代码调用函数而根据堆栈选择标志来确定针对函数变元和返回值所要访问的堆栈,以使得由堆栈选择标志指示的堆栈针对函数变元和返回值而被访问。
如先前注意到,正被执行的程序代码的存储位置通常是对要使用哪个堆栈的良好指示。然而,如果函数正在不同的安全域中被调用,那么堆栈选择标志在这种情况下可被用来确定哪个堆栈应当被使用,这可能是因为在数据值将在两个域之间被传递的情况下那么需要使用可被函数和调用它的程序两者访问的堆栈。
在某些实施例中,数据处理电路被配置为,响应于程序代码中的指示至少一个寄存器将被加载以来自堆栈上的至少一个位置的值的寄存器堆栈加载指令,根据堆栈选择标志和当前处理域的安全级别来确定要访问哪个堆栈。
在某些实施例中,数据处理电路被配置为,响应于程序代码中的指示至少一个寄存器将被加载以来自堆栈上的至少一个位置的值的寄存器堆栈加载指令,根据堆栈选择标志来确定要访问哪个堆栈。
当寄存器将被加载以来自堆栈的值时具有指示堆栈选择标志应被考虑在内的特殊指令以使得正确的堆栈被选择可能是便利的。以这种方式,通过使用该新指令,一者可以在允许数据在多个域之间传递的同时维持系统的安全性。可能是堆栈选择标志足以指示域,或者可能是标志和当前工作域提供对要使用的堆栈的指示。
在某些实施例中,数据处理电路被配置为,响应于程序代码中的指示至少一个寄存器中存储的至少一个值将被存储在堆栈上的至少一个位置中的寄存器堆栈存储指令,根据堆栈选择标志来确定堆栈是包括安全堆栈还是包括较不安全堆栈。
在某些实施例中,数据处理电路被配置为,响应于程序代码中的指示至少一个寄存器中存储的至少一个值将被存储在堆栈上的至少一个位置中的寄存器堆栈存储指令,根据堆栈选择标志和当前处理域的安全级别来确定堆栈是包括安全堆栈还是包括较不安全堆栈。
与堆栈加载指令类似,还存在堆栈存储指令,其被与堆栈选择标志结合使用并且可被与当前安全域结合使用以确保在可在不同安全域中工作的函数被从函数调用时在不同的安全域之间传递数据值时正确的堆栈被使用。
在某些实施例中,数据处理电路被配置为,响应于在较不安全区域中的函数代码和在安全区域中的程序代码,将返回地址加载到安全堆栈上并且将链路寄存器加载以指示来自函数的返回地址被加载到安全堆栈上的值。
在从较安全区域转换到较不安全区域时,返回地址应当对不安全侧不可用。使用链接寄存器来指示安全堆栈应被访问以取回返回地址是一种利用最小的附加硬件开销或者性能影响来保护程序计数器安全性的简单方式。
在某些实施例中,数据处理电路被配置为,响应于程序代码中的指定存储可执行代码的目标地址的寄存器的堆栈选择标志设置指令,确定目标地址是在安全区域还是较不安全区域中并且如果目标地址在较不安全区域中则将堆栈选择标志设置为指示较不安全区域。
如先前注意到,堆栈设置标志可被自动设置或者其可响应于指令而被设置。除了简单的堆栈标志设置指令之外,还可能有堆栈标志设置指令可用,其指示可执行代码(例如将被执行的后续代码)的目标地址。这可以在不清楚所调用函数是否将在调用其的程序所执行于的同一域中执行的情况下被使用,其中该程序在安全域中执行。在实际执行期间,该指令的使用允许所调用代码的目标地址被检查并且在其处于与调用它的代码不同的安全区域中的情况下则堆栈选择标志可被设置为适当值以指示此。另外,当期望找到函数执行后的任何返回值时,已被执行的代码的地址将提供所需要的信息。
在某些实施例中,数据处理电路被配置为,响应于程序代码中的指定用于存储可执行代码的目标地址的寄存器的另一标志设置指令,确定目标地址是在安全区域还是较不安全区域中并且如果目标地址在较不安全区域中对堆栈选择标志和另一标志进行设置。
不仅设置堆栈选择标志而且响应于相同条件还设置另一标志的另一指令也可能是有帮助的。当处理器使用以某些事件为条件的指令时则标志可被设置以指示这些事件。可能一些指令应当根据堆栈选择标志被设置与否而被执行,并且如果是这种情况则一种实现此的便利方式可以是使用设置堆栈选择标志和另一标志两者的指令,然后以该另一标志为条件的指令可被使用。可被使用的该另一标志的一个示例是零标志(zero flag)。
在某些实施例中,数据处理电路被配置为响应于程序代码中的清空多个寄存器指令而清空在由清空多个寄存器指令指定的多个寄存器中存储的值。
具有可被处理电路执行的清空多个寄存器指令可能是有利的。当从安全域切换到不安全域时,由在安全域中执行的安全代码存储在寄存器中的值不应当对不安全域可用。因此,清空这些值的一种便利方式可以是简单地执行清空多个寄存器指令。
在某些实施例中,数据处理设备包括用于存储指示多个寄存器中的哪个可供当前执行代码用于存储安全状态的值的安全配置存储位置,数据处理电路被配置为当从较安全状态转换为较不安全状态时清空安全配置值所指示的多个寄存器。
当从安全状态转换为较不安全状态时,寄存器中存储的敏感数据不应当可被较不安全侧访问,因此寄存器在转换之前应当被清空。在某些情况下,不是所有的寄存器将被用来存储敏感数据并且这可能取决于域的安全级别以及正被执行的代码。如果是这种情况,则如果该信息在安全配置存储位置中存储可用以使得处理电路在切换到较不安全域时可以仅仅清空可能存储敏感数据的寄存器并且其他寄存器将不需要被清空从而节省时间和功率,则是有利的。在这点上,应当注意到在许多情况下在清空在安全域中执行时的寄存器之前,安全状态将需要被保存,在这种情况下安全配置寄存器被用来确定该状态被存储在哪些寄存器中并从而确定要保存哪些寄存器。存储来自寄存器的状态花费时间和功率,因此能够在任何给定时间确定有必要清空和保存的数目是有利的。
在某些实施例中,数据处理电路包括异常处理电路,异常处理电路被配置为响应于接收到异常而清空寄存器的集合,寄存器的集合内的寄存器取决于执行域的安全级别以及要采取(take in)该异常的域的安全级别。
当采取在安全域之间转换的异常时,处理电路可能需要清空寄存器并且其还可能需要将状态存储到堆栈。其状态需要被清空并且可能被存储的寄存器的数目将取决于处理器所工作于的域以及异常的域。例如,当转换到较不安全状态时,则可能被用来存储敏感数据的寄存器集合应当被清空以使得数据对较不安全侧不可用。在这点上,该寄存器集合是可被当前执行代码用来存储安全数据的寄存器。因此其可能是所有的寄存器或者其可能只是它们中的某些,这或许是由安全配置值指示的。
在某些实施例中,异常处理电路被配置为:响应于在中断已被完成之前接收到另一中断而除以下情况之外不执行另外的堆栈存储操作:中断被在安全域中执行并且另一中断具有更低或者同等的优先级并指示切换到较不安全域,于是数据处理电路被配置为在完成中断之后采取另一中断并且被配置为:在被中断的原始代码在安全域中的情况下保存在另外寄存器中存储的状态以使得寄存器的集合和另外寄存器被存储到安全堆栈并被清空;并且在被中断的原始代码在不安全域中的情况下清空寄存器集合;该中断被在安全域中执行并且该另一中断指示切换为在较不安全域中执行并且具有比该中断更高或者同等的优先级,该另一中断在中断完成之前被采用并且在集合和另外寄存器中存储的状态被保存到安全堆栈并且集合和另外寄存器被清空。
需要小心确保数据未在不同安全性的区域之间泄漏的另一情况是当中断被接收到时。本发明的实施例可被用来以与其控制响应于函数调用的转换的方式类似高效和安全的方式来控制中断处理。在这点上,一般地,维持处理器的当前状态的寄存器的集合需要在异常之后被恢复并且在遇到该异常时一般应当被存储到堆栈。然而,在从安全状态变到不安全状态的情况下则可能存储敏感数据的所有寄存器中的值不应当对不安全侧可用并且它们可能全部需要被存储到安全堆栈并被清空。在另一中断在第一中断完成之前到达的情况下会发生另外的问题。其可能是不需要执行另外的堆栈存储操作,但可能存在另外的数据存储是必要的的情况。
例如,如果第一中断是从安全域中获取的并且将在安全域中执行并且另一中断具有更低优先级并且在较不安全的域中,那么当第一中断已经完成,正从安全域改变为不安全域时,此时在存储敏感数据的寄存器集合中但是不在一般被存储到堆栈(并因而已经被存储)的子集中的寄存器需要被存储到安全堆栈。然后在另一中断被执行之前,这些寄存器能够被安全清空而不会丢失数据。
在替代情况下,第一中断被从较不安全的域中获取的但是将在安全域中执行。当这发生时不存在安全性问题,因而仅寄存器的子集(其是调用者保存的寄存器)被存储到堆栈。然而,如果指示切换为在较不安全域中执行的另一中断到达,则存在从安全域到较不安全域的切换,此时必须小心。在另一中断具有比第一中断更高优先级的情况下,则另一中断将在第一中断完成之前被获取并且在子集以及集合中的另外寄存器中存储的状态应当被存储到安全堆栈,然后寄存器被清空,这是假定第一中断的第一指令已被执行。如果第一中断的第一指令没有被执行,那么寄存器将不包含任何安全数据并且无需被保存或者清空。然而,在另一中断具有更低优先级的情况下,那么其仅在第一中断已完成之后被采取并且此时安全状态不再被需要并且无需被保存,然而可能存储敏感数据的寄存器集合应当被清空。
在某些实施例中,数据处理设备包括用于存储指示多个寄存器中的哪个可供当前执行代码部分用于存储安全状态的值的安全配置存储位置,异常处理电路根据安全配置存储位置中存储的值来确定子集以及寄存器中的另外寄存器。
可能是数据处理设备具有许多寄存器但是在任一时间处只有一些被用于存储安全数据。在这种情况下,具有存储在安全配置存储位置中的指示寄存器中的哪些将被用于存储安全状态的安全配置值是有利的。在这种情况下,寄存器的集合可被根据该值确定并且只有这些需要被存储到安全堆栈并且其他寄存器可以在其值原封不动的情况下被保留。类似地,只有这些寄存器将需要被清空。
在某些实施例中,数据处理设备包括用于存储异常返回值的存储位置,数据处理电路被配置为将异常返回值设置为指示在采取异常时数据处理设备所工作于的域,异常处理电路在从异常返回时根据在异常返回值中存储的值来确定利用来自堆栈的值来更新哪些寄存器。
以这种方式处理中断可能需要很少的额外硬件或软件并且可能是低延迟时间的,但是其可能需要对于从中采取异常的域的安全级别的知识。这在确定根据哪个堆栈更新寄存器以及多少寄存器将已被存储到该堆栈时可能是重要的。具体而言,在初始状态是安全状态以使得寄存器的集合已被保存到安全堆栈以避免它们被不安全状态看到的情况下,那么这需要被知晓以使得所有这些寄存器可被恢复。因为使其状态被保存到堆栈的寄存器的数目取决于初始状态的安全性和正被转换到的状态的安全性而变化,因此当恢复值时,关于初始状态的信息可能需要被知晓。
在某些实施例中,数据存储装置包括用于存储不同敏感度的数据的多个等级的安全区域,在更高级别安全区域中存储的数据不可被在更低级别安全域中工作的数据处理电路访问;
数据存储装置包括多个安全区域中的每一个中的至少一个堆栈;其中
用于存储堆栈选择标志的存储位置包括多个比特位;并且数据处理电路被配置为根据堆栈选择标志来确定针对函数变元和返回值所要访问的堆栈。
尽管在某些实施例中可能仅存在两个区域即安全区域和不安全或者较不安全区域,但是在其他实施例中可存在具有多个不同等级安全级别的多个不同区域。因此,在最安全域中执行的代码将可以访问在所有区域中存储的数据而在较不安全域中执行的代码将仅可以访问在其自己安全区域中以及在其他更低安全区域中存储的数据。如果存在这种等级安全区域则堆栈选择标志可能需要包括多个比特位来指示将被访问的堆栈所处于的实际安全区域。在这种情况下,所指示的区域是程序代码和函数代码所被存储于的两个区域中的更低安全级别的区域。以这种方式,标志指示针对函数变元和返回值所要访问的那个堆栈。
在某些实施例中,数据存储装置包括用于存储不同敏感度的数据的多个安全区域,区域中的至少两个是存储具有相同敏感度的数据的同级区域,同级区域中存储的数据可被更高级别安全域中存储的数据访问但是不可被在更低级别安全域中或者在另一同级安全域中工作的数据处理电路访问;数据存储装置包括安全区域中的每一个中的至少一个堆栈以及可被在同级域两者之一中存储的程序代码访问的另一同级堆栈;其中响应于在同级域之一中存储的程序代码调用函数代码存储在同级域中的另一个中的函数,数据处理电路被配置为在执行程序代码和函数代码时将函数将要使用的变元和将从函数返回的数据存储在该另一同级堆栈上。
除了等级安全级别之外,还可能存在具有相同安全级别但是不可以相互访问的某些区域,即所谓的同级安全级别。这在来自不同提供者的代码被存储并且两者皆不希望另一方可以访问其代码的情况下可能是有利的。在这种情况下,可能存在两个安全区域都可以访问的一个附加堆栈,并且其在同级安全级别之一的函数被从另一同级安全级别调用时可被用来存储函数变元和返回值。
应当注意到这些同级安全级别在具有许多安全级别的等级系统中也可以存在。
本发明的第二方面提供了一种在包括以下部分的数据处理设备上处理数据的方法:数据处理电路,用于响应于程序代码而执行数据处理操作;多个寄存器,用于存储由数据处理电路处理的数据项;以及用于存储数据的数据存储装置,数据存储装置包括用于存储可被在安全域中工作的数据处理电路访问并且不可被在较不安全域中工作的数据处理电路访问的敏感数据的至少一个安全区域以及用于存储较不安全数据的较不安全区域;数据存储装置包括至少两个堆栈,即安全区域中的安全堆栈和较不安全区域中的较不安全堆栈,数据处理电路被配置为在处理期间在堆栈和寄存器之间传送数据;数据处理电路在处理在安全区域中存储的程序代码时在安全域中工作并且在处理在较不安全区域中存储的程序代码时在较不安全域中工作;该方法包括以下步骤:执行在数据存储装置中存储的程序代码;响应于正被执行的程序代码的存储位置而确定要将数据存储到哪个堆栈或者要从哪个堆栈中加载数据;以及响应于在第一区域中存储的程序代码调用将被执行的函数,函数代码被存储在第二区域中,第二区域具有与第一区域不同的安全级别,确定第一区域和第二区域中的哪一个具有更低安全级别并且在执行程序代码和函数代码时针对函数变元和返回数据值访问第一区域或第二区域中带有更低安全级别的区域的堆栈。
本发明的第三方面提供了一种包括寄存器堆栈加载指令的计算机程序产品,该寄存器堆栈加载指令当被处理电路执行时控制数据处理电路执行以下操作:利用来自堆栈上的至少一个位置的值来加载由寄存器堆栈加载指令指定的至少一个寄存器;以及根据堆栈选择标志来确定堆栈是包括数据存储装置的较安全区域中的安全堆栈还是包括数据存储装置的较不安全区域中的较不安全堆栈。
本发明的第四方面提供了一种包括寄存器堆栈存储指令的计算机程序产品,该寄存器堆栈存储指令当被处理电路执行时控制数据处理电路执行以下操作:将由寄存器堆栈存储指令指示的至少一个寄存器中的至少一个值存储在堆栈上的至少一个位置中;以及根据堆栈选择标志来确定堆栈是包括数据存储装置的较安全区域中的安全堆栈还是包括数据存储装置的较不安全区域中的较不安全堆栈。
本发明的第五方面提供了一种包括堆栈选择标志设置指令的计算机程序产品,该堆栈选择标志设置指令当被处理电路执行时控制数据处理电路执行以下操作:确定在由该指令指定的寄存器中存储的可执行代码的目标地址是否在相比当前工作区域较不安全的区域中,并且如果是则将堆栈选择标志设置为指示较不安全区域。
本发明的第六方面提供了一种包括另一标志设置指令的计算机程序产品,该另一标志设置指令当被处理电路执行时控制数据处理电路执行以下操作:确定在由该指令指定的寄存器中存储的可执行代码的目标地址是否在相比当前工作区域较不安全的区域中,并且如果是则将堆栈选择标志设置为指示较不安全区域并且设置另一标志。
本发明的第七方面提供了一种包括清空多个寄存器指令的计算机程序产品,该清空多个寄存器指令当被处理电路执行时控制数据处理电路执行以下操作:清空在由清空多个寄存器指令指定的多个寄存器中存储的值。
本发明的第八方面提供了一种数据处理设备,数据处理设备包括:数据处理装置,用于响应于程序代码而执行数据处理操作;多个寄存器;以及用于存储数据的数据存储装置,数据存储装置包括具有不同安全级别的多个区域,并且包括用于存储可被在安全域中工作的数据处理装置访问并且不可被在较不安全域中工作的数据处理装置访问的敏感数据的至少一个安全区域以及用于存储较不安全数据的较不安全区域;数据存储装置包括至少两个堆栈,即安全区域中的安全堆栈和较不安全区域中的较不安全堆栈;数据处理装置在处理在安全区域中存储的程序代码时在安全域中工作并且在处理在较不安全区域中存储的程序代码时在较不安全域中工作;其中数据处理装置用于响应于正被执行的程序代码的存储位置而确定要将数据存储到哪个堆栈或者要从哪个堆栈中加载数据;并且响应于在第一区域中存储程序代码调用将被执行的函数,其中函数代码被存储在第二区域中,第二区域具有与第一区域不同的安全级别,数据处理电路用于确定第一和第二区域中的哪一个具有更低安全级别并且在执行程序代码和函数代码时针对函数变元和返回数据值访问具有更低安全级别的区域的堆栈。
本发明的第九方面提供了一种数据处理设备,包括:
数据处理电路,用于响应于程序代码而执行数据处理操作;
多个寄存器;以及
用于存储数据的数据存储装置,数据存储装置包括每个区域具有安全级别的多个区域,并且包括用于存储可被在安全域中工作的数据处理电路访问并且不可被在较不安全域中工作的数据处理电路访问的敏感数据的至少一个安全区域以及用于存储较不安全数据的较不安全区域;
数据存储装置包括至少两个堆栈,即安全区域中的安全堆栈和较不安全区域中的较不安全堆栈;其中
数据处理电路包括异常处理电路,异常处理电路被配置为当数据处理电路在安全域中执行并且中断指示切换为在较不安全的域中执行程序代码时响应于接收到异常而清空寄存器的集合,寄存器的集合内的寄存器取决于执行的域以及要采取该异常的域的安全级别。本发明认识到在具有多个安全状态的处理设备中,异常的采取可能使处理电路在不同安全级别之间转换。
异常可能是诸如由外部事件造成的中断之类的异步异常,或者由程序计划地或者响应于错误而造成的同步异常。在两者之中任一情况下,如果从安全状态转换到不安全状态,则至少某些寄存器将需要被清空并且在某些情况下如果数据的安全性将被维持则它们可能需要使其状态被存储到堆栈。其状态需要被清空的寄存器的数目将取决于处理器正工作于的域和异常的域。例如,当转换到较不安全的状态时,则可被用来存储敏感数据的寄存器的集合应当被清空以使得数据对较不安全侧不可用。当采取不需要转换到较不安全状态的异常时,则一般没有寄存器将需要被清空。本发明提供了异常处理电路,其可响应于这些转换而清空所需寄存器从而避免了对代理中断的需要。
在某些实施例中,数据处理电路还被配置为在清空寄存器的集合之前将寄存器的集合中存储的状态保存到数据处理电路正执行于的域的堆栈。
尽管当转换到较不安全的状态时存储安全状态的寄存器必须总是被清空,但是在许多实施例中该状态应当被保留并且因而其被保存到堆栈。这是相当消耗功率和时间的处理,因此能够指定所需寄存器使得数目能够被限制并且提高性能。在这点上,当在没有到较不安全级别的转换的情况下采取异常时,那么相比转换到较不安全级别的情况,更少的寄存器需要被保存到堆栈。在某些实施例中,除非该异常造成到较不安全状态的转换(在这种情况下任何存储敏感数据的寄存器将需要被清空以避免该数据对较不安全侧可见并且如果该数据不应当被丢失则其将需要被保存),否则只有调用者保存的寄存器将需要被保存。
根据将结合附图来阅读的对例示性实施例的以下详细描述,本发明的以上以及其他目标、特征和优点将会显而易见。
附图说明
图1示出了根据本发明实施例的具有具备安全区域和不安全区域的数据存储装置的数据处理设备;
图2示出了根据本发明实施例的具有具备两种不同的安全区域和不安全区域的数据存储装置的数据处理设备;
图3A示意性地示出从安全程序对不安全函数的调用;
图3B示出了根据本发明实施例的指令;
图4示意性地示出了从不安全程序对安全函数的调用;
图5示意性地示出了几个安全域的分等级结构;
图6示意性地示出了包括同级域在内的几个安全域的分等级结构;
图7示意性地示出了在代码执行期间对中断的采取;
图8A示出了当第一异常和随后的第二异常被接收到时被保存的状态;
图8B示出了在获取中断时其状态被保存到堆栈的寄存器;
图9示出了描述出根据本发明实施例的方法中的步骤的流程图;并且
图10示出了描述出某一方法中的步骤的流程图,其中根据本发明实施例的指令在该方法中被执行。
具体实施方式
图1示出了数据处理设备10,其例如可能是微处理器。其包括用于处理指令的处理电路20以及用于存储处理电路20所处理的数据并且还用于存储处理电路20所执行的程序代码的数据存储装置30。
数据存储装置30具有不同安全性的两个区域,安全区域32和不安全区域34。安全区域32中存储的数据在不安全区域34中存储的代码执行时对其不可访问。
数据处理设备10还具有控制对安全32和不安全34区域的访问的存储器保护单元MPU 40。尽管该控制可通过存储器保护单元完成,但是其在其他实施例中可通过处理设备内的电路以更加分布式的方式完成,该电路监控当前正被执行的代码所被存储于的区域,并且据此控制对存储器的不同区域的访问。
在该实施例中,处理电路20正执行于的安全域是根据当前正被执行的代码所被存储于的区域来确定的。因此,安全数据存储装置32中存储的安全程序代码在安全域中被执行并且使用安全堆栈36来将数据值存储于其中。类似地,不安全数据存储装置34中存储的不安全代码在执行期间使用不安全堆栈38来存储数据值。
处理电路20具有用于取回将被执行的指令的取回电路22。其具有用于解码这些指令的解码电路24和用于执行它们的执行电路26。还存在稍后将要描述的异常处理电路28。
将被执行的指令被取回电路22经由存储器保护单元MPU 40从数据存储装置30取回。指令和数据是经由MPU 40取回的,MPU 40控制对安全区域和不安全区域的访问并且使安全数据与不安全侧隔离。
在该实施例中,存在寄存器组60,其具有在数据处理期间被使用的通用寄存器。这些通用寄存器具有指示将被执行的下一个是哪个指令的程序计数器PC以及指示应当在堆栈中的哪个指针处进行下一数据访问的堆栈指针(pointer)SP。在该实施例中,因为存在安全侧中的堆栈和不安全侧中的堆栈,因此存在安全堆栈指针和不安全堆栈指针,但是只有这些中的一个在任何一个时刻对正被执行的程序直接可见。应当注意到在某些实施例中可能存在针对每个堆栈的多个堆栈指针,但还是只有一个将在任何一个时刻可见。
寄存器组60中还有用于存储正被处理的数据值的通用寄存器。在该实施例中这些寄存器被标记为R0至R12。在这种情况下,寄存器R0至R3可被用来在函数与调用该函数的程序之间传送值,这些寄存器中不被该目的需要的任何寄存器在转换到较不安全域之前必须被清空。在存在比寄存器R0至R3中所能存储的更多的变元(argument)或返回值的情况下,那么这些变元或返回值当在函数与调用其的程序之间转换时将需要被保存到堆栈。在这点上,通过指定某些寄存器用于持有这些值,可以减少需要被保存到堆栈的值的数目,从而节省当在这些函数与程序之间转换时的时间,然而,如果过多的数目被指定则系统在其他方面将不会高效。在该实施例中,四个寄存器被用于该目的,但是技术人员应当清楚不同数目可被使用。可替代地,在某些实施例中,寄存器不被用于存储数据值并且这些值被存储在堆栈上并且经由堆栈指针而被间接访问。这明显具有面积节省但是性能受打击。
当来自不安全侧的代码正被执行并且其调用一函数并且MPU 40确定该函数代码被存储在安全侧时,则任何不能装进寄存器R0至R3的变元将需要被存储在不安全侧的堆栈38上。在该实施例中,CPSR寄存器中的堆栈选择标志ASSel是由处理电路20内的堆栈选择标志设置电路在其确定安全函数将被从不安全程序代码调用时设置的。这向执行电路26表明该函数被存储在堆栈上的任何变元需要被从不安全堆栈38访问。
当该函数在执行时其将使用安全堆栈36,这是因为其是安全函数并且在完成时将返回到不安全侧的程序代码并且安全函数将从选择标志ASSel的值知道它应当将(不能装进R0-R3的)返回值存储到不安全堆栈38。可用于存储敏感数据的寄存器(这些可根据配置寄存器62中存储的安全配置SCR值来确定)然后被清空。
在这点上,该标志在从更低安全级别转换到更高安全级别时可基于来自MPU硬件40的安全域信息自动地设置以指示更低安全级别堆栈应当被用于变元和返回值,并且如果函数在相同安全级别被调用或者在从更高安全级别转换到更低安全级别时则该标志可被自动清空。然而,存在需要通过软件来设置该标志的时候,这是因为该自动硬件设置将不会总是导致具有正确值的标志。这针对稍后的实施例被描述。
这样,数据值以一般由硬件管理并且高效的直截了当且简单的方式利用不安全堆栈在两个域之间被传送。
应当注意到,尽管MPU被描述为提供在设置标志时使用的关于安全域转换的信息,但是确定该信息的电路可位于数据处理设备中的其他地方。在这点上,在某些实施例中,可能存在经由诸如DMA(直接存储器访问)控制器之类的外围设备对数据存储装置的访问,并且如果这些不是经由MPU来访问数据存储装置,则必须通过DMA也受其支配的电路来实现安全状态与不安全侧的隔离。
图1还示出了具有诸如浮点寄存器之类的附加专用寄存器的附加寄存器组64。寄存器组60还包括当异常被获取或者函数被调用时可被用来存储返回地址的链接寄存器65。该寄存器可替代地存储指示曾获取异常的域的安全级别的EXC_RETURN值,这使得处理器能够知道在恢复状态时要访问哪个堆栈以及多少寄存器需要被加载并且这将被稍后描述。
总之,通过使用程序状态寄存器(CPSR)中的ASSel(替代堆栈选择)标志来克服域间调用问题并维持与多个堆栈相关联的安全性是可能的。该标志在函数调用发生时可被硬件自动设置为1,如果存储器控制逻辑确定该调用造成到安全状态的转换的话。对不安全状态的函数调用以及相同状态内的函数调用将使该标志设置为0。因此该标志向被调用函数指示成组堆栈指针中的哪一个(即与当前安全状态相关联的那个,或者不安全指针)应当被用来访问函数变元和返回值。对这些值的访问可经由某些新编入索引的加载和存储指令来提供,和多数现有的加载/存储指令不同,这些新编入索引的加载和存储指令未明确地指定基地址寄存器而是基于ASSel标志将正确的堆栈指针自动选择为基地址。这些指令被稍后描述。属于安全状态的外部API函数必须保存并恢复任何子函数调用周围的ASSel标志,如果在子函数返回之后需要访问堆栈上的函数变元或返回值的话。这允许安全函数被从安全域或者不安全域调用,同时仍维持经由堆栈传递值的能力。
异常处理电路28将控制对异常的获取,并且在这些异常导致从较安全状态转换到较不安全状态的情况下,可能存储敏感数据的一组寄存器在获取异常之前将被清空以避免这些寄存器中存储的数据对不安全侧可用。这些寄存器中存储的状态将被存储在安全堆栈上,以使得当从异常返回时该状态可被恢复。
图2示出了图1的替代实施例的数据处理设备10,其中数据存储装置30内有两个安全区域S1和S2,S2比S1更安全。在该实施例中每个区域具有其自己的堆栈。因此,存在三个堆栈指针,尽管在任何一个时刻只有一个对正被执行的程序20直接可见。
如先前注意到的,CPSR内的堆栈选择标志ASSel可被用来确定哪个堆栈应当被用于存储以下函数的变元或者返回值:这些函数在与调用它们的程序不同的安全域中被执行。在存在几个不同安全级别的情况下,则多位标志值将被需要以指示适当的级别。该标志在从更低安全级别转换到更高安全级别时可被基于来自MPU硬件的信息自动设置为指示更低安全级别,并且其在同一安全级别的函数被调用的情况下或者当从更高安全级别转换到更低安全级别时可被设置为指示当前安全级别。存在将需要通过软件来设置该标志的时候,这是因为该自动硬件设置将不会总是导致其具有正确值。
通过软件来设置标志的一个示例被针对图3a描述。图3a示意性地示出了调用不安全函数的安全程序,该程序和函数是由图1中的处理设备执行的。在这种情况下,在程序代码内存在堆栈选择标志设置指令,其在调用函数之前设置ASSel标志。这向处理设备表明该函数所需的变元应当被存储在不安全堆栈上。一般而言,在安全状态下执行的程序代码将使用安全堆栈36,因此为了避免变元被存储在该堆栈上而需要该指令。因此,一旦该标志已被设置,如果存在存储到堆栈的指令,则ASSel标志将向处理电路表明将被存储以这些值的堆栈是不安全堆栈。
当函数被调用时,MPU 40将检测到到不安全域的转换,由于现在将被执行的代码被存储在不安全侧34并且标志将被清空。此时处理电路将在不安全域中执行并且因而不安全堆栈38将被使用。在返回到安全域时,如果任何返回值是经由堆栈传递的,则ASSel标志必须被指令再次设置,从而向处理电路表明当访问返回值时应当使用不安全堆栈38。一旦不再需要访问不安全函数的返回值,则应当使用另一指令来清除ASSel标志,从而使安全域留在一致状态以用于任何另外潜在的函数调用或返回。
应当注意到用来设置ASSel标志的指令可以是简单的选择堆栈标志指令,或者其可能是可能在根据代码不清楚函数将在哪个域中执行的情况下使用的、确定目标地址的安全级别然后相应设置标志的指令。
在这方面,本发明的实施例使用使能该行为的指令并且这些在图3b中示出的表中被列出。
因此,存在加载堆栈指令,其表明寄存器将被加载以来自哪一堆栈的值取决于ASSel标志的值。其指定将被从该堆栈加载的寄存器以及作为该堆栈的堆栈指针的偏移的其将被从中加载的地址。
存在再一次表明堆栈取决于ASSel标志的存储堆栈指令。其指定寄存器以及作为该堆栈的堆栈指针的偏移的其将被存储到的地址。
存在可被用来指示从不安全域进入安全域的合法进入点的NSBT指令。
存在多寄存器清空指令,其可被用来清空由指令指定的多个寄存器并且可被用来确保安全侧的数据对较不安全侧不可见。
还存在对目标地址的安全状态进行测试并且可被用来适当设置ASSel标志的指令。这些在需要通过软件来设置标志但是由于不清楚被调用函数的安全域将是什么而预先不清楚其应当具有什么值的情况下是有用的。在某些情况下,指令可设置另一标志,该另一标志可被用于条件指令执行,其中函数的域会影响所要执行的操作是什么。在某些指令集中存在其执行取决于标志的值的条件指令,因此根据函数的安全域来设置该标志将使得条件指令的执行能够取决于安全域。
简单的编译指示可被用来向编译器表明函数是安全域之间的接口的一部分并且图3b中列出的新指令在访问函数变元和结果时被需要。该编译指示还将向编译器表明安全状态的寄存器值需要被保护。当从调用返回安全域时以下步骤可被使用:
如果未被用来持有返回值则清空R0-R3
在对不安全域进行调用的情况下以下步骤应当被执行:
如果未被用来持有函数变元则清空R0-R3
R4-R12应当被看作调用者保存的寄存器并且在函数调用之前被清空。
图4示出了可能需要利用指令来设置选择堆栈标志的另一简化示例。在这种情况下存在两个域并且安全函数被从不安全域调用。当从不安全域转换到安全域时该标志被设置。该函数是浮点乘法函数并且在该实施例中其是通过一个接一个地被调用并且都是安全函数的多个加法函数实现的。从安全域调用安全函数将清空ASSel标志并且因此在返回到不安全域时ASSel标志将被清空。如果ASSel标志被清空,那么需要被发送到不安全域的返回值将被存储在安全堆栈中并且将会不可访问。因此存在在这些值被存储之前被执行的设置选择标志指令是重要的。如果返回到不安全域是不清楚的,则可以使用图3b的TTS指令,其中目标地址被检查并且ASSel标志据此被设置。
如先前注意到,尽管两个安全域经常被描述,但是可能存在多个安全域。图5示意性地示出了按等级排列的多个域。存在具有存储于其中的代码和数据并且具有其自己的堆栈的不安全域、第一安全域S1以及其中存储有操作系统代码的更安全域S2。这些不同安全域中的每一个具有其自己的堆栈并且在在各域之间进行转换的情况下需要数据值在它们之间被发送,然后两个域中的较不安全者的堆栈可被用来存储这些值,这是因为它们随后可被两个域访问,并且函数变元和返回值的这种存储和加载可被本发明的实施例控制。
在其他实施例中,可存在具有相同安全级别但是它们之间的访问不被允许的两个同级安全域。图6示出了这种布置。这种布置在两个供应商或许正在提供用于在同一系统上使用的软件并且它们不希望彼此可以看见其软件的情况下可能是有利的。因此,尽管它们可能可以使用软件,但是它们不被允许看见其是如何实现的。在这种情况下,将会存在具有相同安全性的附加区域,其中存在堆栈52,堆栈52在同级S1域之一中的函数被另一同级S1域中存储的代码调用的情况下可被用来存储变元和返回值。
其中各域之间的数据的控制所需的另一方式是在对中断的获取中。在某些架构中,寄存器状态的一部分在中断发生和完成时被硬件自动地保存和恢复。通过将这种架构扩展为保存并清空全部寄存器状态或者至少保存并清空安全域使用的所有寄存器状态,在中断造成安全到不安全转换的情况下硬件可以维持中断周围的安全性。
如在上面注意到,可以通过扩展本发明实施例的自动寄存器堆栈系统来免除通过安全状态来代理中断的需要并且可以允许处理电路将所有寄存器推送到堆栈(而不只是调用者保存的寄存器),然后在切换到不安全状态和跳到中断向量之前清空它们的值。为了将中断延迟时间保持得尽可能低,仅当从安全状态转换到不安全状态时附加寄存器状态被推送到堆栈上。这当在异常进入期间发生更高优先级异常时或者在尾链异常时会引入一些复杂情况。图7示出了某些示例。
在第一示例中,程序代码是在安全状态下执行的并且第一安全中断被接收到。寄存器的子集被保存到堆栈,然后在不安全域中工作的第二更高优先级的中断被接收到。因为其在不安全区域中工作,因此安全寄存器中的信息都不应当对新应用可见,因而所有安全寄存器在获取该中断之前应当被保存到安全堆栈并随后被清空。当第二中断已经完成时,一者返回到未完成的初始安全中断并且曾响应于第二中断而被推送到安全堆栈的寄存器可被恢复。该第一安全中断可以完成,于是曾被推送到堆栈的原始子集可随后被恢复。
在第二示例中,第二中断具有比第一中断更低的优先级并且因而将在不安全的第二中断被获取之前完成。一旦第一中断已经完成,则剩余寄存器被推送到安全堆栈并且所有寄存器在不安全中断被获取之前被清空。在不安全中断结束时,已被推送到安全堆栈的所有寄存器被恢复。
第三示例示出了接收安全中断的不安全代码于是存在寄存器的部分保存。如果第二不安全中断随后以更高优先级被接收到,则在其可被获取之前所有安全寄存器将需要被推送到安全堆栈并被清空。当不安全中断完成时,所有安全寄存器需要被从堆栈取出,然后当安全中断完成时不安全寄存器的子集被取出。
第四示例示出了接收安全中断的安全代码,该安全中断使调用者保存的寄存器被推送到安全堆栈,在该处理完成之前,第二更高优先级的不安全中断发生。该第二中断使剩余寄存器在子集完成之后被推送,从而导致执行对所有寄存器的推送。所有寄存器随后在不安全中断被获取之前被清空。在该中断完成时,被调用者保存的寄存器在安全中断被获取之前被从安全堆栈取出。当安全堆栈完成时,寄存器的原始子集被从安全堆栈取出。
图8A示出了一个表,其指示潜在的中断以及需要被执行的状态保存。在这点上,推送子集是将寄存器的调用者保存子集推送到堆栈上,而推送所有是将除堆栈指针之外的整个寄存器状态推送到堆栈上。在这点上,在某些寄存器不可用于存储敏感数据并且这是已知的情况下,则这些寄存器可能不需要被推送到堆栈上。推送剩余是将寄存器状态的被调用者保存子集推送到堆栈上,当与推送子集相结合时这等同于推送所有状态。
在表中,异常进入列指示第二中断,其具有比第一中断更高的优先级并且在分支到第一中断异常向量之前发生并且因而在第一中断完成之前被获取。异常返回列指示直到第一中断完成才被获取的更低或者同等优先级的中断。
在这点上,存在调用者函数所负责的寄存器以及被调用者所负责的寄存器,因此调用者函数所负责的寄存器在获取该函数之前被存储到堆栈。然而,当从安全状态转换到不安全状态时,可保存安全状态的所有寄存器中的值需要被从寄存器中除去,所以它们对不安全侧不可用,因而附加的保存和清空被执行,如从表8A清楚的。
图8B示出了本发明实施例的寄存器堆栈以及当从相同或较不安全状态获取较不中断时被保存的部分堆栈帧以及当转换到较不安全状态时被保存的完整堆栈帧。在这点上,在后者情况下更多的寄存器需要被保存并清空,这是因为不能留下存储任何状态的寄存器,因为这是必须对较不安全状态不可用的安全状态。
当程序代码在安全状态之间转换时,或许当调用函数时,将被存储到堆栈的寄存器的数目将取决于状态并且可由安全配置寄存器中的值指示以使得状态的保存和寄存器的清空可通过使用该值来限制。该值可能是由编译器针对特定设备设置的并且这允许特定设备被以不同方式使用并且在产品中提供某种灵活性,在其他实施例中其或许在系统启动时可能是由软件设置的。
如注意到,处理电路在异常发生时自动将寄存器状态的调用者保存部分推送到堆栈以及从堆栈取出,并且在必要的情况下改变所使用的堆栈指针并因而改变所使用的堆栈。这允许以下优点即使在具有安全和较不安全域的系统中也存在:降低的中断延迟时间;降低的中断抖动;异常处理器可被以C而非汇编程序编写;使能像异常进入时的异常以及尾链之类的最优化。
为了使核心能够知道在异常返回时要从哪个堆栈恢复寄存器状态以及核心应当返回到哪个模式,链接寄存器可能持有特殊的EXC_RETURN值而非返回地址。这向处理设备指示当异常被获取时处理电路曾处于的域的安全级别。要返回到的实际程序计数器位置与其他寄存器状态一起被存储在该域的堆栈上。在这种情况下,链路寄存器中的EXC_RETURN值表明返回地址在堆栈上以及是哪个堆栈。
图9示出了根据本发明实施例的方法中的步骤,其中存在安全域和不安全域。最初任一域中的程序代码被执行并且安全函数被调用。然后确定该函数调用是否来自安全域。如果不是,则堆栈选择标志被设置。如果是,则标志被清空。这通常当处理电路在状态之间转换并且从数据存储装置的相同或者不同区域取回代码时完成,该代码取回致使硬件设置或者清空标志。然后确定堆栈选择标志是否被设置。如果是,则变元和返回值在不安全堆栈上被访问。如果其未被设置,则变元和返回值在安全堆栈上被访问。这样安全函数和不安全程序都可以访问这些值,而安全函数和安全程序都可以访问安全堆栈。
图10示出了根据本发明实施例的方法中的步骤,其中程序代码在安全域中被执行并且函数被调用。堆栈选择标志设置指令在调用函数之前被执行,并且如果目标地址在不安全域中,则存在域转换并且堆栈标志被设置,如果不在则堆栈标志被清空。寄存器堆栈存储指令然后被执行,并且根据堆栈标志中的值向适当的堆栈填充函数执行所需的变元。寄存器堆栈存储指令指示相对于堆栈指针的偏移,并且堆栈标志(设置不安全,清空安全)所指示的堆栈的堆栈指针被使用。在函数不在安全域中的情况下,则寄存器需要被存储到安全堆栈以保存状态并且随后被清空,这可以通过硬件或者通过清空寄存器指令或者通过两者来完成。在这点上,硬件可能自动清空不持有函数变元的安全寄存器,但是持有函数变元的那些不被清空。在可以存储函数变元的寄存器没有正被用于函数变元的情况下,则需要对其进行清空的指令。
函数然后被调用并执行,在返回时堆栈选择标志被设置为其先前具有的置位/清空以指示应当被用来访问任何返回值的堆栈指针。在这点上,将其设置为其先前具有的值可通过存储先前值然后恢复它来完成,或者由确定目标地址在哪里的测试指令可被用于确定发生了什么状态转换。寄存器堆栈加载指令然后可被执行并且函数的返回值被从适当堆栈加载。
在某些实施例中,在已知函数是不安全函数的情况下,不需要测试目标地址的简单设置堆栈标志指令可被执行。
可替代地,在某些情况下,设置堆栈和另一标志指令可被使用。在这点上,应当注意到,除了如果目标地址不是安全的则我们推送某些寄存器并且使用清空多个指令的事实之外,取决于目标地址是否在安全域中的通过流程图的两条路径是相同的。因此,在替代实施例中,“设置ASSel标志,以及另一标志”指令可被使用,并且在这种情况下寄存器的推送和清空多个指令可根据由该指令设置的另一标志的值来执行。
尽管已经参考附图在此详细描述了例示性实施例,但是将会明白,权利要求不限于那些精确实施例,并且本领域技术人员在不脱离所附权利要求的范围和精神的情况下可在其中实现各种改变和修改。例如,利用独立权利要求的特征可做出后续从属权利要求的特征的各种组合。
Claims (27)
1.一种数据处理设备,所述数据处理设备包括:
数据处理电路,用于响应于程序代码而执行数据处理操作;
多个寄存器;以及
用于存储数据的数据存储装置,所述数据存储装置包括多个区域,每个区域具有安全级别,所述数据存储装置还包括用于存储敏感数据的安全区域以及用于存储较不安全数据的较不安全区域,所述敏感数据可被在安全域中工作的所述数据处理电路访问并且不可被在较不安全域中工作的所述数据处理电路访问;
所述数据存储装置包括至少两个堆栈,即所述安全区域中的安全堆栈和所述较不安全区域中的较不安全堆栈;所述数据处理电路在处理存储于所述安全区域中的程序代码时在所述安全域中工作并且在处理存储于所述较不安全区域中的程序代码时在所述较不安全域中工作;其中
所述数据处理电路被配置为:响应于正被执行的所述程序代码的存储位置,确定要将数据存储到哪个堆栈或者要从哪个堆栈中加载数据;以及
响应于存储于第一区域中的程序代码调用将被执行的函数,所述函数的函数代码被存储在第二区域中,所述第二区域具有与所述第一区域不同的安全级别,所述数据处理电路被配置为确定所述第一区域和第二区域中的哪一个具有更低安全级别并且被配置为在执行所述程序代码和所述函数代码时针对函数变元和返回数据值而访问具有所述更低安全级别的所述区域的所述堆栈,
所述数据处理设备还包括:
存储位置,用于存储堆栈选择标志;以及
标志设置电路,该标志设置电路被配置为:响应于检测到所述数据处理电路在所述较不安全区域中存储的程序代码和所述安全区域中存储的程序代码之间转换而设置所述堆栈选择标志来指示所述较不安全区域;并且响应于检测到所述数据处理电路执行在所述安全区域和所述较不安全区域中的一者中存储的代码而且该代码调用所述安全区域和所述较不安全区域中的所述一者中的函数,设置所述堆栈选择标志来指示所述安全区域和所述较不安全区域中的所述一者;并且
响应于程序代码调用所述安全区域中存储的函数,所述数据处理电路被配置为在所述堆栈选择标志指示所述安全区域时针对函数变元和返回数据值访问所述安全堆栈,以及在所述堆栈选择标志指示所述较不安全区域时针对函数变元和返回数据值访问所述较不安全堆栈。
2.根据权利要求1所述的数据处理设备,其中,所述数据处理电路被配置为响应于所述程序代码中的设置堆栈选择标志指令而将所述堆栈选择标志设置为指示较不安全区域的值,其中,调用较不安全函数的所述程序代码在存储所述函数的变元之前将所述设置堆栈选择标志指令包括在所述程序代码中。
3.根据权利要求1或2所述的数据处理设备,所述数据处理电路响应于调用函数的所述程序代码而根据所述堆栈选择标志确定针对所述函数变元和所述返回数据值所要访问的所述堆栈,使得由所述堆栈选择标志指示的所述堆栈针对所述函数变元和所述返回数据值而被访问。
4.根据权利要求1或2所述的数据处理设备,其中,所述数据处理电路被配置为:响应于所述程序代码中的寄存器堆栈加载指令,其中所述寄存器堆栈加载指令指示了来自堆栈上的至少一个位置的值将被加载到至少一个寄存器,根据所述堆栈选择标志来确定要访问哪个堆栈。
5.根据权利要求1或2所述的数据处理设备,其中,所述数据处理电路被配置为:响应于所述程序代码中的寄存器堆栈存储指令,其中所述寄存器堆栈存储指令指示了至少一个寄存器中存储的至少一个值将被存储在堆栈上的至少一个位置中,根据所述堆栈选择标志来确定所述堆栈是包括所述安全堆栈还是包括所述较不安全堆栈。
6.根据权利要求1或2所述的数据处理设备,其中,所述数据处理电路被配置为:响应于所述函数代码在所述较不安全区域中并且所述程序代码在所述安全区域中,将返回地址加载到所述安全堆栈上并且将下述值加载到链路寄存器:该值指示了来自所述函数的所述返回地址被加载到所述安全堆栈上。
7.根据权利要求1或2所述的数据处理设备,其中,所述数据处理电路被配置为:响应于所述程序代码中的堆栈选择标志设置指令,所述堆栈选择标志设置指令指定了用于存储可执行代码的目标地址的寄存器,确定所述目标地址是否在相比当前工作区域较不安全的区域中,并且如果是,则将所述堆栈选择标志设置为指示所述较不安全区域。
8.根据权利要求1或2所述的数据处理设备,其中,所述数据处理电路被配置为:响应于所述程序代码中的另一标志设置指令,所述另一标志设置指令指定了存储可执行代码的目标地址的寄存器,确定所述目标地址是在所述安全区域还是所述较不安全区域中,并且如果所述目标地址在所述较不安全区域中,则将所述堆栈选择标志设置为指示所述较不安全区域并且设置另一标志。
9.根据权利要求1或2所述的数据处理设备,其中,所述数据处理电路被配置为:响应于所述程序代码中的清空多个寄存器指令,清空由所述清空多个寄存器指令所指定的多个寄存器中存储的值。
10.根据权利要求1或2所述的数据处理设备,其中,所述数据处理设备包括安全配置存储位置,所述安全配置存储位置用于存储下述安全配置值:该安全配置值指示了所述多个寄存器中的哪些寄存器可供当前执行代码用于存储安全状态,所述数据处理电路被配置为当从较安全状态转换为较不安全状态时清空由所述安全配置值指示的所述多个寄存器。
11.根据权利要求1或2所述的数据处理设备,所述数据处理电路包括异常处理电路,所述异常处理电路被配置为响应于接收到异常而清空在所述寄存器的集合中存储的状态,所述寄存器的所述集合内的所述寄存器取决于执行的域以及所述异常要被采取的域的安全级别。
12.根据权利要求11所述的数据处理设备,其中,所述异常处理电路被配置为:
响应于在中断被完成之前接收到另一中断,除以下情况之外,不执行另外的堆栈存储操作:
所述中断是在所述安全域中被执行的,并且所述另一中断具有更低或者同等的优先级并指示切换到所述较不安全域,于是所述数据处理电路被配置为在完成所述中断之后获取所述另一中断并且被配置为:
在被中断的原始代码在所述安全域中的情况下,保存另外寄存器中存储的所述状态,使得所述集合和所述另外寄存器被存储到所述安全堆栈并被清空;并且
在被中断的所述原始代码在所述不安全域中的情况下,清空所述寄存器集合;
所述中断是在所述安全域中被执行的,并且所述另一中断指示切换为在所述较不安全域中执行并且具有比所述中断更高或者同等的优先级,所述另一中断在所述中断完成之前被获取,并且在所述集合和所述另外寄存器中存储的状态被保存到所述安全堆栈并且所述集合和另外寄存器被清空。
13.根据权利要求11所述的数据处理设备,其中,所述数据处理设备包括安全配置存储位置,所述安全配置存储位置用于存储下述的值:该值指示了所述多个寄存器中的哪些寄存器可供当前执行的代码部分用来存储安全状态,所述异常处理电路根据所述安全配置存储位置中存储的所述值、所述执行的域以及所述异常要被采取的域的安全级别来确定所述寄存器的所述集合内的所述寄存器。
14.根据权利要求11所述的数据处理设备,其中,所述数据处理设备包括用于存储异常返回值的存储位置,所述数据处理电路被配置为将所述异常返回值设置为指示当获取所述异常时所述数据处理设备所工作于的域,所述异常处理电路在从异常返回时根据所述异常返回值中存储的所述值确定利用来自所述堆栈中的值来更新哪些寄存器。
15.根据权利要求1或2所述的数据处理设备,其中,所述数据存储装置包括用于存储不同敏感度的数据的多个安全区域,在更高级别安全区域中存储的数据不可被在更低级别安全域中工作的所述数据处理电路访问;
所述数据存储装置在所述多个安全区域中的每一个中包括至少一个堆栈;其中
用于存储所述堆栈选择标志的所述存储位置包括多个比特位;并且
所述数据处理电路被配置为根据所述堆栈选择标志来确定针对函数变元和返回数据值所要访问的堆栈。
16.根据权利要求1或2所述的数据处理设备,其中,所述数据存储装置包括用于存储不同敏感度的数据的多个安全区域,所述区域中的至少两个是存储具有相同敏感度的数据的同级区域,所述同级区域中存储的所述数据可被更高级别安全域中存储的数据访问但是不可被在更低级别安全域中或者在另一同级安全域中工作的所述数据处理电路访问;
所述数据存储装置包括所述安全区域中的每一个中的至少一个堆栈以及另一同级堆栈,所述另一同级堆栈可被在所述同级区域中的任一区域中存储的程序代码访问;其中
响应于在所述同级区域之一中存储的程序代码调用函数,且所述函数代码被存储在所述同级区域中的另一个中,所述数据处理电路被配置为在执行所述程序代码和所述函数代码时将所述函数将要使用的变元和将从所述函数返回的数据存储在所述另一同级堆栈上。
17.根据权利要求1或2所述的数据处理设备,其中,所述数据存储装置包括用于存储不同敏感度的数据的多个安全区域,在更高级别安全区域中存储的数据不可被在更低级别安全域中工作的所述数据处理电路访问,其中,所述区域中的至少两个是存储具有相同敏感度的数据的同级区域,所述同级区域中存储的所述数据可被更高级别安全域中存储的数据访问但是不可被在更低级别安全域中或者在另一同级安全域中工作的所述数据处理电路访问;
所述数据存储装置包括所述多个安全区域中的每一个中的至少一个堆栈以及另一同级堆栈,所述另一同级堆栈可被在所述同级区域中的任一区域中存储的程序代码访问;其中
用于存储所述堆栈选择标志的所述存储位置包括多个比特位,所述堆栈选择标志电路被配置为:当所述数据处理电路分支到函数时,将所述堆栈选择标志设置为指示所述程序代码所存储于的区域和所述函数代码所存储于的区域中的较低安全级别的值,并且在这两个区域的安全级别是同级安全级别的情况下指示所述另一同级堆栈,其中当两个区域具有相同的安全级别但是不能相互访问时,它们的安全级别是所述同级安全级别;并且
所述数据处理电路被配置为根据所述堆栈选择值来确定针对所述函数变元和返回数据值所要访问的堆栈。
18.一种在数据处理设备上处理数据的方法,所述数据处理设备包括:
数据处理电路,用于响应于程序代码而执行数据处理操作;
多个寄存器,用于存储由所述数据处理电路处理的数据项;以及
用于存储数据的数据存储装置,所述数据存储装置包括用于存储敏感数据的安全区域以及用于存储较不安全数据的较不安全区域,所述敏感数据可被在安全域中工作的所述数据处理电路访问并且不可被在较不安全域中工作的所述数据处理电路访问;
所述数据存储装置包括至少两个堆栈,即所述安全区域中的安全堆栈和所述较不安全区域中的较不安全堆栈,所述数据处理电路被配置为在处理期间在所述堆栈和所述寄存器之间传送数据;
所述数据处理电路在处理存储于所述安全区域中的程序代码时在所述安全域中工作,并且在处理存储于所述较不安全区域中的程序代码时在所述较不安全域中工作;所述方法包括以下步骤:
执行在所述数据存储装置中存储的程序代码;
响应于正被执行的所述程序代码的存储位置而确定要将数据存储到哪个堆栈或者要从哪个堆栈中加载数据;以及
响应于在第一区域中存储的程序代码调用将被执行的函数,所述函数的函数代码被存储在第二区域中,所述第二区域具有与所述第一区域不同的安全级别,确定所述第一和第二区域中的哪一个具有更低安全级别,并且在执行所述程序代码和所述函数代码时针对函数变元和返回数据值而访问所述第一区域或第二区域中具有所述更低安全级别的区域的堆栈,
所述方法还包括:
响应于检测到所述数据处理电路在所述较不安全区域中存储的程序代码和所述安全区域中存储的程序代码之间转换而设置堆栈选择标志来指示所述较不安全区域,并且响应于检测到所述数据处理电路执行在所述安全区域和所述较不安全区域中的一者中存储的代码而且该代码调用所述安全区域和所述较不安全区域中的所述一者中的函数,设置所述堆栈选择标志来指示所述安全区域和所述较不安全区域中的所述一者;以及
响应于程序代码调用所述安全区域中存储的函数,在所述堆栈选择标志指示所述安全区域时针对函数变元和返回数据值访问所述安全堆栈,并且在所述堆栈选择标志指示所述较不安全区域时针对函数变元和返回数据值访问所述较不安全堆栈。
19.根据权利要求18所述的方法,包括以下步骤:
响应于所述程序代码中的寄存器堆栈加载指令,其中所述寄存器堆栈加载指令指示了来自堆栈上的至少一个位置的值将被加载到至少一个寄存器,根据所述堆栈选择标志来确定所述堆栈是包括所述安全堆栈还是包括所述较不安全堆栈,并且将所述值加载到所述至少一个寄存器。
20.根据权利要求18或19所述的方法,包括以下步骤:
响应于所述程序代码中的寄存器堆栈存储指令,其中所述寄存器堆栈存储指令指示了至少一个寄存器中存储的至少一个值将被存储在堆栈上的至少一个位置中,根据所述堆栈选择标志来确定所述堆栈是包括所述安全堆栈还是包括所述较不安全堆栈,并且将所述值存储在所述堆栈中。
21.根据权利要求18或19所述的方法,包括以下步骤:
响应于所述程序代码中的堆栈选择标志设置指令,该堆栈标志设置指令指定了用于存储可执行代码的目标地址的寄存器,确定所述目标地址是否在相比当前工作区域较不安全的区域中,并且如果是,则将所述堆栈选择标志设置为指示所述较不安全区域。
22.根据权利要求18或19所述的方法,包括以下步骤:
响应于所述程序代码中的另一标志设置指令,所述另一标志设置指令指定了用于存储可执行代码的目标地址的寄存器,确定所述目标地址是否在相比当前工作区域较不安全的区域中,并且如果是,则将所述堆栈选择标志设置为指示所述较不安全区域并且设置所述另一标志。
23.根据权利要求18或19所述的方法,包括以下步骤:
响应于所述程序代码中的清空多个寄存器指令,清空在由所述清空多个寄存器指令指定的多个寄存器中存储的值。
24.根据权利要求1所述的数据处理设备,其中
所述数据处理电路包括异常处理电路,所述异常处理电路被配置为当所述数据处理电路正在所述安全域中执行并且中断指示切换为在较不安全的域中执行程序代码时响应于接收到异常而清空所述寄存器的集合,所述寄存器的所述集合内的所述寄存器取决于执行的域和要采取所述异常的域的安全级别。
25.根据权利要求24所述的数据处理设备,其中,所述数据处理电路还被配置为:在清空所述寄存器的所述集合之前将所述寄存器的所述集合中存储的状态保存到所述数据处理电路正执行于的所述域的所述堆栈。
26.根据权利要求24或25所述的数据处理设备,其中,所述数据处理设备包括安全配置存储位置,所述安全配置存储位置用于存储下述安全配置值:该安全配置值指示了所述多个寄存器中的哪些可供当前执行代码用于存储安全状态,所述数据处理电路被配置为根据由所述安全配置值指示的所述多个寄存器以及执行的域和采取所述异常的域的安全级别来确定哪些寄存器在所述寄存器的集合内。
27.一种数据处理设备,所述数据处理设备包括:
数据处理装置,用于响应于程序代码而执行数据处理操作;
多个寄存器;以及
用于存储数据的数据存储装置,所述数据存储装置包括具有不同安全级别的多个区域,并且包括用于存储敏感数据的安全区域以及用于存储较不安全数据的较不安全区域,所述敏感数据可被在安全域中工作的所述数据处理装置访问并且不可被在较不安全域中工作的所述数据处理装置访问;
所述数据存储装置包括至少两个堆栈,即所述安全区域中的安全堆栈和所述较不安全区域中的较不安全堆栈;所述数据处理装置在处理存储于所述安全区域中的程序代码时在所述安全域中工作并且在处理存储于所述较不安全区域中的程序代码时在所述较不安全域中工作;其中
所述数据处理装置用于响应于正被执行的所述程序代码的存储位置而确定要将数据存储到哪个堆栈或者要从哪个堆栈中加载数据;以及
响应于在第一区域中存储程序代码调用将被执行的函数,所述函数的函数代码被存储在第二区域中,所述第二区域具有与所述第一区域不同的安全级别,所述数据处理装置用于确定所述第一和第二区域中的哪一个具有更低安全级别并且在执行所述程序代码和所述函数代码时针对函数变元和返回数据值而访问具有所述更低安全级别的所述区域的所述堆栈,
所述数据处理设备还包括:
用于存储堆栈选择标志的装置;以及
用于进行以下操作的装置:响应于检测到所述数据处理电路在所述较不安全区域中存储的程序代码和所述安全区域中存储的程序代码之间转换而设置所述堆栈选择标志来指示所述较不安全区域;以及响应于检测到所述数据处理电路执行在所述安全区域和所述较不安全区域中的一者中存储的代码而且该代码调用所述安全区域和所述较不安全区域中的所述一者中的函数,设置所述堆栈选择标志来指示所述安全区域和所述较不安全区域中的所述一者;
其中,响应于程序代码调用所述安全区域中存储的函数,所述数据处理装置被配置为在所述堆栈选择标志指示所述安全区域时针对函数变元和返回数据值访问所述安全堆栈,以及在所述堆栈选择标志指示所述较不安全区域时针对函数变元和返回数据值访问所述较不安全堆栈。
Applications Claiming Priority (3)
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 |
PCT/GB2013/050029 WO2013117896A1 (en) | 2012-02-08 | 2013-01-09 | Maintaining secure data isolated from non-secure access when switching between domains |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104115154A CN104115154A (zh) | 2014-10-22 |
CN104115154B true CN104115154B (zh) | 2017-09-29 |
Family
ID=47561659
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380008433.5A Active CN104115154B (zh) | 2012-02-08 | 2013-01-09 | 当在域之间切换时维持安全数据与不安全访问相隔离 |
Country Status (8)
Country | Link |
---|---|
US (2) | US9477834B2 (zh) |
EP (1) | EP2812835B1 (zh) |
JP (1) | JP6185487B2 (zh) |
KR (1) | KR102069522B1 (zh) |
CN (1) | CN104115154B (zh) |
IL (1) | IL233726A (zh) |
MY (1) | MY170836A (zh) |
WO (1) | WO2013117896A1 (zh) |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9213828B2 (en) | 2012-02-08 | 2015-12-15 | Arm Limited | Data processing apparatus and method for protecting secure data and program code from non-secure access when switching between secure and less secure domains |
US9116711B2 (en) | 2012-02-08 | 2015-08-25 | Arm Limited | Exception handling in a data processing apparatus having a secure domain and a less secure domain |
US9477834B2 (en) | 2012-02-08 | 2016-10-25 | Arm Limited | Maintaining secure data isolated from non-secure access when switching between domains |
KR101434860B1 (ko) * | 2013-08-16 | 2014-09-02 | (주)잉카엔트웍스 | 해시를 이용한 동적코드의 무결성 검증 방법 |
CN104881611B (zh) | 2014-02-28 | 2017-11-24 | 国际商业机器公司 | 保护软件产品中的敏感数据的方法和装置 |
KR102218202B1 (ko) * | 2014-08-01 | 2021-02-23 | 삼성전자주식회사 | 반도체 장치 |
EP2993605A1 (en) * | 2014-09-02 | 2016-03-09 | Gemalto Sa | System and method for protecting a device against attacks on processing flow using a code pointer complement |
GB2539199B (en) * | 2015-06-08 | 2018-05-23 | Arm Ip Ltd | Apparatus and methods for transitioning between a secure area and a less-secure area |
GB2540388B (en) * | 2015-07-15 | 2019-01-23 | Advanced Risc Mach Ltd | Secure mode state data access tracking |
US10721622B2 (en) * | 2015-12-31 | 2020-07-21 | Koninklijke Philips N.V. | Wireless communication system with multiple security levels |
FR3047587B1 (fr) * | 2016-02-10 | 2023-01-13 | Dolphin Integration Sa | Dispositif de traitement muni d'un mode d'acces a des donnees sensibles. |
GB2550903B (en) * | 2016-05-27 | 2019-06-12 | Arm Ip Ltd | Context data control |
US10671744B2 (en) * | 2016-06-23 | 2020-06-02 | Intel Corporation | Lightweight trusted execution for internet-of-things devices |
US10540287B2 (en) * | 2017-05-12 | 2020-01-21 | Samsung Electronics Co., Ltd | Spatial memory streaming confidence mechanism |
US10884747B2 (en) | 2017-08-18 | 2021-01-05 | International Business Machines Corporation | Prediction of an affiliated register |
US10534609B2 (en) * | 2017-08-18 | 2020-01-14 | International Business Machines Corporation | Code-specific affiliated register prediction |
US10719328B2 (en) | 2017-08-18 | 2020-07-21 | International Business Machines Corporation | Determining and predicting derived values used in register-indirect branching |
US11150904B2 (en) | 2017-08-18 | 2021-10-19 | International Business Machines Corporation | Concurrent prediction of branch addresses and update of register contents |
US10884745B2 (en) | 2017-08-18 | 2021-01-05 | International Business Machines Corporation | Providing a predicted target address to multiple locations based on detecting an affiliated relationship |
US11150908B2 (en) | 2017-08-18 | 2021-10-19 | International Business Machines Corporation | Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence |
US10884746B2 (en) | 2017-08-18 | 2021-01-05 | International Business Machines Corporation | Determining and predicting affiliated registers based on dynamic runtime control flow analysis |
US10908911B2 (en) | 2017-08-18 | 2021-02-02 | International Business Machines Corporation | Predicting and storing a predicted target address in a plurality of selected locations |
CN107563224B (zh) * | 2017-09-04 | 2020-07-28 | 浪潮集团有限公司 | 一种多用户物理隔离方法及装置 |
KR102416501B1 (ko) * | 2017-09-20 | 2022-07-05 | 삼성전자주식회사 | 전자 장치 및 그의 제어 방법 |
KR102495643B1 (ko) * | 2018-03-26 | 2023-02-06 | 삼성전자주식회사 | 입력 수단에 따른 어플리케이션으로 사용자 입력을 전달하는 모바일 전자 장치 및 방법 |
US11171983B2 (en) * | 2018-06-29 | 2021-11-09 | Intel Corporation | Techniques to provide function-level isolation with capability-based security |
US11188639B2 (en) * | 2018-07-19 | 2021-11-30 | Intel Corporation | System, method and apparatus for automatic program compartmentalization |
CN109086162B (zh) * | 2018-08-15 | 2021-12-24 | 中国农业银行股份有限公司 | 一种内存诊断方法和装置 |
GB2577878B (en) * | 2018-10-08 | 2020-11-11 | Advanced Risc Mach Ltd | Transition disable indicator |
JP2019096338A (ja) * | 2019-02-04 | 2019-06-20 | ルネサスエレクトロニクス株式会社 | 半導体装置および半導体装置販売モデル |
US11216280B2 (en) * | 2019-11-26 | 2022-01-04 | Arm Limited | Exception interception |
GB2589895B (en) * | 2019-12-11 | 2022-03-16 | Advanced Risc Mach Ltd | Intermodal calling branch instruction |
CN112507399B (zh) * | 2020-12-08 | 2021-09-14 | 福州富昌维控电子科技有限公司 | 一种固件和用户程序隔离保护方法及终端 |
US20220188463A1 (en) * | 2020-12-16 | 2022-06-16 | International Business Machines Corporation | Method and system for on demand control of hardware support for software pointer authentification in a computing system |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4519032A (en) * | 1982-06-09 | 1985-05-21 | At&T Bell Laboratories | Memory management arrangement for microprocessor systems |
CN101661440A (zh) * | 2008-08-26 | 2010-03-03 | 爱特梅尔公司 | 安全信息处理 |
Family Cites Families (46)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4177514A (en) * | 1976-11-12 | 1979-12-04 | General Electric Company | Graph architecture information processing system |
US4488227A (en) | 1982-12-03 | 1984-12-11 | Honeywell Information Systems Inc. | Program counter stacking method and apparatus for nested subroutines and interrupts |
US5590332A (en) | 1995-01-13 | 1996-12-31 | Baker; Henry G. | Garbage collection, tail recursion and first-class continuations in stack-oriented languages |
JPH0991154A (ja) * | 1995-09-25 | 1997-04-04 | Hitachi Constr Mach Co Ltd | スタック割り当て方法、制御装置 |
US5812850A (en) | 1995-11-13 | 1998-09-22 | Object Technology Licensing Corp. | Object-oriented symbolic debugger using a compiler driven database and state modeling to control program execution |
JPH10228421A (ja) | 1997-02-14 | 1998-08-25 | Nec Ic Microcomput Syst Ltd | メモリアクセス制御回路 |
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 |
US7213247B1 (en) * | 2000-01-10 | 2007-05-01 | Wind River Systems, Inc. | Protection domains for a computer operating system |
US6993663B1 (en) | 2000-08-31 | 2006-01-31 | Microsoft Corporation | Input buffer overrun checking and prevention |
JP3786575B2 (ja) * | 2000-11-20 | 2006-06-14 | 株式会社ルネサステクノロジ | データ処理装置 |
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 |
US20040003377A1 (en) | 2002-06-28 | 2004-01-01 | Di Loreto Michael A. | Converting byte code instructions to a new instruction set |
US7383587B2 (en) * | 2002-11-18 | 2008-06-03 | Arm Limited | Exception handling control in a secure processing system |
GB2396930B (en) | 2002-11-18 | 2005-09-07 | Advanced Risc Mach Ltd | Apparatus and method for managing access to a memory |
GB0226874D0 (en) | 2002-11-18 | 2002-12-24 | Advanced Risc Mach Ltd | Switching between secure and non-secure processing modes |
GB0226906D0 (en) | 2002-11-18 | 2002-12-24 | Advanced Risc Mach Ltd | Virtual to physical memory address mapping within a system having a secure domain and a non-secure domain |
JP2004280801A (ja) | 2003-02-24 | 2004-10-07 | Matsushita Electric Ind Co Ltd | プロセッサおよびこのプロセッサ用のプログラムを生成するコンパイラ装置 |
US20040168047A1 (en) | 2003-02-24 | 2004-08-26 | Matsushita Electric Industrial Co., Ltd. | Processor and compiler for creating program for the processor |
EP1480046A1 (en) | 2003-05-23 | 2004-11-24 | Interuniversitair Microelektronica Centrum ( Imec) | A method for determining the current-voltage characteristic of a snap-back device |
US20050044292A1 (en) | 2003-08-19 | 2005-02-24 | Mckeen Francis X. | Method and apparatus to retain system control when a buffer overflow attack occurs |
US7120794B2 (en) * | 2003-10-29 | 2006-10-10 | Qualcomm Inc. | System for invoking a privileged function in a device |
US7607133B2 (en) | 2004-02-11 | 2009-10-20 | Arm Limited | Interrupt processing control |
US7401210B2 (en) | 2005-03-30 | 2008-07-15 | Arm Limited | Selecting subroutine return mechanisms |
US7665143B2 (en) | 2005-05-16 | 2010-02-16 | Microsoft Corporation | Creating secure process objects |
US7917753B2 (en) | 2005-05-16 | 2011-03-29 | Texas Instruments Incorporated | Transferring control between programs of different security levels |
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 |
US7681000B2 (en) * | 2006-07-10 | 2010-03-16 | Silverbrook Research Pty Ltd | System for protecting sensitive data from user code in register window architecture |
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 |
WO2010004240A1 (en) | 2008-07-10 | 2010-01-14 | Cambridge Consultants Limited | Data processing apparatus, for example using modes |
US8578483B2 (en) | 2008-07-31 | 2013-11-05 | Carnegie Mellon University | Systems and methods for preventing unauthorized modification of an operating system |
KR101537018B1 (ko) * | 2008-10-01 | 2015-07-17 | 삼성전자주식회사 | 보안 메모리 인터페이스, 이를 포함하는 시스템 및 스마트카드 |
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 |
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 |
US9202071B2 (en) | 2012-02-08 | 2015-12-01 | Arm Limited | Exception handling in a data processing apparatus having a secure domain and a less secure domain |
US9213828B2 (en) | 2012-02-08 | 2015-12-15 | Arm Limited | Data processing apparatus and method for protecting secure data and program code from non-secure access when switching between secure and less secure domains |
US9116711B2 (en) | 2012-02-08 | 2015-08-25 | Arm Limited | Exception handling in a data processing apparatus having a secure domain and a less secure domain |
US9477834B2 (en) | 2012-02-08 | 2016-10-25 | Arm Limited | Maintaining secure data isolated from non-secure access when switching between domains |
-
2012
- 2012-02-08 US US13/368,419 patent/US9477834B2/en active Active
-
2013
- 2013-01-09 EP EP13700421.4A patent/EP2812835B1/en active Active
- 2013-01-09 WO PCT/GB2013/050029 patent/WO2013117896A1/en active Application Filing
- 2013-01-09 MY MYPI2014702000A patent/MY170836A/en unknown
- 2013-01-09 JP JP2014556133A patent/JP6185487B2/ja active Active
- 2013-01-09 CN CN201380008433.5A patent/CN104115154B/zh active Active
- 2013-01-09 KR KR1020147023456A patent/KR102069522B1/ko active IP Right Grant
-
2014
- 2014-07-21 IL IL233726A patent/IL233726A/en active IP Right Grant
-
2016
- 2016-10-04 US US15/284,830 patent/US10169573B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4519032A (en) * | 1982-06-09 | 1985-05-21 | At&T Bell Laboratories | Memory management arrangement for microprocessor systems |
CN101661440A (zh) * | 2008-08-26 | 2010-03-03 | 爱特梅尔公司 | 安全信息处理 |
Also Published As
Publication number | Publication date |
---|---|
EP2812835B1 (en) | 2019-03-20 |
EP2812835A1 (en) | 2014-12-17 |
US20130205403A1 (en) | 2013-08-08 |
IL233726A (en) | 2017-09-28 |
CN104115154A (zh) | 2014-10-22 |
JP2015510189A (ja) | 2015-04-02 |
IL233726A0 (en) | 2014-09-30 |
JP6185487B2 (ja) | 2017-08-23 |
KR102069522B1 (ko) | 2020-01-23 |
MY170836A (en) | 2019-09-06 |
US10169573B2 (en) | 2019-01-01 |
US9477834B2 (en) | 2016-10-25 |
KR20140123546A (ko) | 2014-10-22 |
WO2013117896A1 (en) | 2013-08-15 |
US20170024557A1 (en) | 2017-01-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104115154B (zh) | 当在域之间切换时维持安全数据与不安全访问相隔离 | |
CN104412232B (zh) | 事务处理方法、系统、介质 | |
CN104335177B (zh) | 有选择地控制事务处理中的指令执行 | |
CN104335186B (zh) | 处理器辅助设施 | |
CN104704503B (zh) | 在安全域与次安全域之间进行转换时保护安全数据和程序代码免受非安全访问的数据处理装置和方法 | |
CN104350468B (zh) | 非事务储存指令 | |
CN104685508B (zh) | 数据处理装置和数据处理方法 | |
CN103310163B (zh) | 使用安全域与次安全域的数据处理装置和方法 | |
TWI352927B (en) | System and method for handling exceptional instruc | |
CN104335181B (zh) | 事务诊断区块 | |
CN104380246B (zh) | 用于管理计算环境中的中断的方法、系统及介质 | |
CN107851036A (zh) | 具有高级操作系统支持的处理器 | |
CN108463826A (zh) | 用于在环转变期间保护栈的处理器扩展 | |
CN104364768B (zh) | 用于确定运行时间检测控制的状态的方法和系统 | |
CN104364771B (zh) | 修改来自较小特权状态的运行时间仪表控制 | |
CN104169889A (zh) | 在事务执行模式中的运行时间检测采样 | |
CN104364770A (zh) | 来自较小特权状态的运行时间仪表设施的控制操作 | |
CN1070496A (zh) | 自动暂停状态重启动的透明系统中断 | |
CN104169888A (zh) | 运行时间仪表定向采样 | |
CN104461886A (zh) | 一种控制流错误检测方法 | |
CN104281805B (zh) | 安全保护方法和处理器 | |
CN104169887A (zh) | 通过指令操作码的运行时间检测间接采样 | |
CN104781790B (zh) | 用信号通知软件可恢复错误 | |
CN105094750B (zh) | 一种多线程处理器的返回地址预测方法和装置 | |
JPH1040103A (ja) | レジスタ・リマップ構造を有する情報処理システム及び方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |