CN104685508A - 具有安全域和次安全域的数据处理装置中的异常处理 - Google Patents

具有安全域和次安全域的数据处理装置中的异常处理 Download PDF

Info

Publication number
CN104685508A
CN104685508A CN201380049898.5A CN201380049898A CN104685508A CN 104685508 A CN104685508 A CN 104685508A CN 201380049898 A CN201380049898 A CN 201380049898A CN 104685508 A CN104685508 A CN 104685508A
Authority
CN
China
Prior art keywords
exception
register
security domain
data
state
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
Application number
CN201380049898.5A
Other languages
English (en)
Other versions
CN104685508B (zh
Inventor
托马斯·克里斯托弗·乔洛卡特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
Advanced Risc Machines Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Priority claimed from GB201217531A external-priority patent/GB201217531D0/en
Application filed by Advanced Risc Machines Ltd filed Critical Advanced Risc Machines Ltd
Publication of CN104685508A publication Critical patent/CN104685508A/zh
Application granted granted Critical
Publication of CN104685508B publication Critical patent/CN104685508B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1491Protection against unauthorised use of memory or access to memory by checking the subject access rights in a hierarchical protection system, e.g. privilege levels, memory rings
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting 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/74Protecting 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/481Exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/034Test or assess a computer or a system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Storage Device Security (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Complex Calculations (AREA)

Abstract

处理电路可在安全域和次安全域中操作。响应于来自处理电路执行的后台处理的最初异常,异常控制电路在触发异常处理程序之前,执行来自寄存器第一子集的数据的状态保存,而异常处理程序负责执行来自寄存器第二子集的数据的状态保存。响应于导致从安全域转换到次安全域的第一异常,异常控制电路在触发异常处理程序之前,执行来自寄存器第二子集的数据的附加状态保存,其中后台处理在次安全域中。响应于导致从安全域转换到次安全域的末尾连锁异常,在不执行附加状态保存的情况下,触发异常处理程序。

Description

具有安全域和次安全域的数据处理装置中的异常处理
技术领域
本发明涉及数据处理领域,并且特别涉及具有安全域和次安全域的数据处理。
背景技术
很多数据处理系统及架构提供了隔离并保护敏感数据和代码部分不被无权的人或进程访问的方法。虽然能够提供安全是重要的,但是在与该保护相关联的性能和电路面积中存在开销。
在诸如微控制器之类的小型系统中,将这些开销保持较低是非常重要的,从而可能需要在安全等级与性能之间做出折衷。
英国剑桥的用其Trustzone结构提供了保持数据和代码安全的一个方法,其中存在安全状态和非安全状态,并且软件处理器被用于在状态之间进行转换,该软件处理器保护安全侧的安全。虽然该方法提供了很高的安全度,但是需要以软件处理器形式的相当大的软件干预来改变安全状态,这既降低了系统的性能,又增加了为安全软件开发外部应用程序接口API所需的工作量,因为所有通话必须通过软件处理器来代理。类似地,虽然在安全域中发生但需要在非安全域中处理的异常也需要通过安全异常处理器来代理,这允许安全状态在控制转到非安全异常处理器之前得到保护。
发明内容
从第一方面来看,本发明提供了一种数据处理装置,包括:
处理电路,用于响应于程序代码而执行数据处理操作,处理电路包括用于控制异常处理的异常控制电路;
多个寄存器,用于存储数据,寄存器包括寄存器的第一子集和寄存器的第二子集;以及
数据存储设备,用于存储数据,数据存储设备包括多个区域,区域包括安全区域和次安全区域,其中安全区域用于存储当在安全域中操作时可被处理电路访问而当在次安全域中操作时不可被处理电路访问的数据;其中:
响应于来自由处理电路执行的后台处理的最初异常,异常控制电路被配置为在触发处理电路执行对应于异常的异常处理程序之前,执行来自寄存器的第一子集的数据的状态保存,其中异常处理程序负责执行来自寄存器的第二子集的数据的状态保存;
响应于导致从安全域转换到次安全域的第一异常,异常控制电路被配置为在触发处理电路执行次安全域中的异常处理程序之前,执行来自寄存器的第二子集的数据的附加状态保存,其中后台处理由处理电路在安全域中执行;并且
响应于导致从安全域转换到次安全域的末尾连锁异常,异常控制电路被配置为触发处理电路在不执行附加状态保存的情况下,执行异常处理程序,末尾连锁异常在第一异常被处理之后并在返回后台处理之前被处理。
当在后台处理期间发生异常时,后台处理可将数据值放置于寄存器中,从而允许这些数据值在异常结束时被保留及恢复,该系统可执行对数据的从寄存器到数据存储设备的状态保存。如上所述,对于一些系统,在所获得的安全性等级和处理性能之间获得折衷是重要的。当响应于异常而执行状态保存时也是如此。
由于性能原因,在第一子集和第二子集中执行对寄存器中的数据的状态保存可能是有用的。对来自第一子集的数据的状态保存可由硬件中的异常控制电路在触发异常处理程序之前执行。相反,异常处理程序(即,软件)可负责执行对来自寄存器的第二子集的数据的状态保存。
但是,从安全性角度来看,寄存器的第二子集的状态保存在异常处理程序的控制之下有时可能是有问题的。如果在安全域中执行的后台处理之后,异常导致从安全域转换到次安全域,则次安全异常处理程序可通过安全后台代码获取对位于寄存器的第二子集中的安全数据的访问。
为了防止该安全性破坏,如果在后台处理在安全域的情况下,发生导致从安全域转换到次安全域的第一异常,则异常控制电路在触发次安全域中的异常处理程序之前,执行对来自寄存器的第二子集的数据的附加状态保存。通过提供用于将寄存器的第二子集的状态保存在硬件中的机制,次安全异常处理软件不必执行可能包含安全数据的寄存器第二子集的状态保存。
但是,在硬件中执行附加状态保存导致在开始异常处理程序之前的更长延迟。在先前异常结束的时刻,可能有另一异常等待处理。在这种情况下,处理电路在返回后台处理之前服务另一异常,该后台处理在先前异常之前正在被执行。这种情况被称为“末尾连锁”,并且另一异常被称为“末尾连锁”异常。在后台处理在安全域的情况下,为了降低附加状态保存的性能影响,对于导致从安全域转换到次安全域的第一异常执行附加状态保存。对于导致从安全域转换到次安全域的后续末尾连锁异常,不需要重复附加状态保存,因为后台处理所需的数据值已响应于第一异常而被保存。因此,在很多情况下,可在不执行附加状态保存的情况下,触发末尾连锁异常的异常处理程序。
因此,当响应于异常而执行状态保存时,本技术可获得在安全性和性能之间改善的平衡。本发明的硬件机制使得次安全异常能够有效处理,而不需要通过安全异常处理器来代理。
响应于导致从安全域转换到次安全域的第一异常,异常控制电路可在触发处理电路执行异常处理程序之前清除寄存器第一子集和寄存器第二子集。这意味着次安全域中的异常处理程序不能访问在安全域中时被放置于寄存器中的任意数据。
此外,在一个实施例中,响应于所述第一异常,数据处理装置可被配置为在异常控制电路触发处理电路执行异常处理程序之前,保证寄存器第一子集不包含安全数据。存在很多方法实现这一目的。例如,硬件或软件均可保证寄存器第一子集被清除,使得这些寄存器不包含任意安全数据。或者,可以是寄存器第一子集可被设计为在处理电路被触发执行异常处理程序之前只包含非安全数据的情况,在这种情况下,可不必清除寄存器第一子集。
在本申请中,术语“调用者寄存器”和“被调用者寄存器”可被用于分别指示寄存器的第一子集和第二子集。
虽然异常处理程序负责执行对来自寄存器第二子集(被调用者寄存器)的数据的状态保存,但是异常处理程序可不必实际执行来自第二子集的数据的状态保存。例如,如果异常控制电路已经执行了第二子集寄存器的附加状态保存,则异常处理程序可省去这些寄存器的状态保存。
或者,更简单的是,异常处理程序一直执行来自被调用者寄存器的数据的状态保存,即使附加状态保存已被硬件执行。因为寄存器可能已被硬件清除,所以异常处理程序可能无论如何也不能访问被调用者寄存器中的数据值,与软件将被清除的数据值保存到数据存储设备并稍后恢复被清除的数据相关联的开销可小于用于使异常处理程序能够检测硬件是否已经执行了附加状态保存的机制所导致的开销。
对于寄存器第一子集(调用者寄存器)和寄存器第二子集(被调用者寄存器),寄存器第一子集可包括0个寄存器,使得所有寄存器都在第二子集中。在这种情况下,对于多数异常没有状态保存将被异常控制电路执行,而异常处理程序负责第二子集中的所有寄存器的保存。但是,响应于导致从第二安全域转换到次安全域的第一异常,附加状态保存可使用异常控制电路将第二子集(所有寄存器)保存在硬件中,以防止被次安全域中的异常处理程序访问该数据。
触发附加状态保存的第一异常可以是在处理正在执行后台处理时发生的最初异常。或者,第一异常自身可以是在最初异常之后而在返回后台处理之前被处理的末尾连锁异常。
在本申请中,术语“后台处理”被用于指示被具有更高优先级的异常打断的处理。如果异常处理程序自身被更高优先级异常打断,则被打断的异常处理程序对于抢占异常可变为“后台处理”,并且随后抢占异常将在被打断之前触发对异常处理程序正在使用的数据的状态保存。
响应于导致从次安全域转换到安全域的末尾连锁异常,异常控制电路可在不将附加状态保存中所保存的数据恢复到寄存器第二子集的情况下,控制处理电路触发异常处理程序。在不存在本技术时,预期寄存器第二子集的数据应在该时刻被恢复,因为这些寄存器中的数据预期对安全域中的异常是可见的。但是,本技术认识到该恢复操作是不必要的。通过省去该恢复,当从安全域转换到次安全域的进一步的末尾连锁异常发生时,寄存器第二子集将仍被保存,从而对于该进一步的末尾连锁异常可省去附加状态保存。这在多数情况下提高了性能,因为末尾连锁异常可被更快处理,而没有由将数据保存或恢复到寄存器所导致的延迟。
当进入导致从安全域转换到次安全域的新的异常时,异常控制电路可使用状态保存状态值来确定是否在触发异常处理程序之前执行附加状态保存。状态保存状态值可指示在处理次安全域中的末尾连锁异常之前是否需要执行附加状态保存。附加状态保存是否必需取决于异常处理的过去历史,因此状态保存状态值使该历史的方面能够被恢复,以允许该系统确定附加状态保存是否需要再次被执行。
在一个示例中,状态保存状态值可指示在停止后台处理和进入新异常之间,是否有至少一个异常已在次安全域中被处理,其给出了附加状态保存在从安全异常到次安全异常的下一个末尾连锁转换时是否将被需要的指示。
当进入新异常时,附加状态保存可被执行,如果:
(a)后台处理在安全域中被执行;并且
(b)状态保存状态值指示在停止后台处理与进入新异常之间在次安全域中没有异常已经被处理。
在其他情况下,附加状态保存将不是必需的。如果后台处理不再安全域中,则后台处理将不在寄存器中放置任何安全数据,因此不需要附加状态保存来保护数据不被次安全域访问。此外,即使后台处理在安全域中,如果在停止安全域中的后台处理与进入新异常之间,异常已在次安全域中被处理,则该异常将已触发附加状态保存,因此其不需要再次被触发。
安全性域值可被维护以指示后台处理是在安全域还是次安全域中被执行。因此,基于安全性域值和状态保存状态值,异常控制电路可确定在进入新异常时是否需要执行附加数据保存。
如上所述,状态保存状态值可提供关于异常处理的过去历史(例如,异常在哪个域中进行处理)的一些信息。但是,这可允许关于过去异常的一些信息可在次安全域中被推测,这会导致安全性破坏。例如,这可允许次安全代码推测某些安全数据最近已被处理。因此,需要在次安全域中处理的过程中使状态保存状态不可被访问。
实现这一目的的一个方法是当进入次安全域时将状态保存状态值设置为固定值,而当进入安全域时将状态保存状态值设置为可变值。可变值只在安全域中时是必需的,因为当在次安全域中时,该值有用的安全到次安全状态转换将不会发生。因此,通过在进入次安全域时将该值设置为固定值,在次安全域中执行的处理不能从状态保存状态值中获取关于安全域的任意信息。
状态保存状态值引发的另一可能的安全性问题是次安全域中的代码可能修改状态保存状态值的值,从而影响在从安全域转换到次安全域时是否执行状态保存。如果黑客能够获取状态保存是否被执行的控制,则这会导致安全数据的泄漏。存在防止该问题的若干方法。
在一个示例中,当从次安全域中的异常返回时,异常控制电路可检查状态保存状态值是否仍具有其在进入次安全域时被设置的固定值,并且如果状态保存状态值不具有该固定值,则触发错误。由于状态保存状态值在次安全域中时应具有固定值,于是任意其他值可指示发生了篡改,从而可触发故障。
或者,状态保存状态值在次安全域中的处理过程中可具有可变值。如果从安全性的角度来看,允许次安全域中的异常访问具有可变值的状态保存状态值不是问题,则这可能是适合的。但是,为了防止次安全域中的代码对状态保存状态值的改变影响后续状态保存操作,当从次安全域中的异常返回时,异常控制电路可与状态保存状态值无关来控制异常处理。当退出次安全域时,通过忽略状态保存状态值,并且不管状态保存状态值是具有一个值还是另一值均执行相同处理,次安全域中的代码对状态保存状态值的任何篡改将不影响该系统的安全性。
例如,在离开次安全异常处理器之后,状态保存状态值可被重置为其在次安全域中应具有的值,以覆盖在次安全域中操作时对状态值的任意修改。这意味着当从次安全异常返回时,后续处理与状态保存状态值具有的值无关。
在另一示例中,状态保存状态值可指示当在末尾连锁异常之间进行切换时,在域之间的最近转换是否是从次安全域到安全域。这可与指示后台处理是否在安全域中执行的安全性域值相结合以确定是否需要附加状态保存。该方案的优势是状态保存状态值将在次安全域中具有固定值而在安全域中具有可变值(取决于是否存在从安全域到次安全域的先前转换)。
例如,当处理接着后台处理的最初异常时,状态保存状态值可被初始化为第一值。如果后台处理在安全域中,则在进入末尾连锁异常时,如果末尾连锁异常在安全域中并且接着次安全域中的先前异常,则状态保存状态值可被设置为第二值。当进入次安全域中的异常时,状态保存状态值可被设置为第一值。当进入导致从安全域转换到次安全域的末尾连锁异常时,如果状态保存状态值具有第一值,则可执行附加状态保存。以这种方式,附加状态保存可在需要时被执行,并且当其已经被执行或不需要时被省去,并且当在次安全域中处理时,状态保存状态值可被控制为具有固定值(第一值)。
出现的一个问题是当在不同异常之间进行转换时,如何允许状态保存状态值被维护。状态保存状态值可被置于存储器中,但当需要时访问该值相对较慢。状态保存状态值还可被置于寄存器中,但是当从一个异常切换到另一个时,其将可能被保存并且可能被清除。
表示状态保存状态值的一个有用方法是在存储在连接寄存器(linkregister)中的异常返回值的一部分中。存储在连接寄存器中的异常返回值被用于控制从异常处理程序的返回。
在进入异常时,异常控制电路可将连接寄存器设置为不对应于有效指令地址的虚拟(dummy)异常返回地址。异常处理程序可包括分支到存储在连接寄存器中的地址。响应于分支到虚拟异常返回地址,异常控制电路可检测到该分支是异常返回而不是另一类型的返回(例如,函数返回),并且可检测其必须在返回后台处理之前,执行用于恢复先前在状态保存中保存的数据的状态恢复处理。虚拟异常返回地址而不是有效指令地址的使用使得对于异常返回可使用与其他类型返回(例如,函数返回)相同的分支和连接机制。
一个有用的性质是连接寄存器在进入每个异常时被重新设置为异常返回值(对于末尾连锁异常,异常返回地址先前已被设为与先前异常相同的值)。本技术使用对异常返回值的刷新来将关于异常处理的过去历史的信息在异常之间进行传递。通过指示状态保存状态值作为异常返回值的一部分,并且当新的异常返回值被存储到连接寄存器时改变状态保存状态值,信息可在异常之间进行传递,并设置为不同的值,以允许确定是否需要附加状态保存。这与针对每个末尾连锁异常使用相同异常返回值的传统技术完全不同。
状态保存状态值还可用于异常抢占的情况。如果具有高于当前异常优先级的异常发生,则当前处理可被停止,而处理较高优先级异常。这被称为抢占。
但是,如果当执行状态保存时发生抢占,则状态保存是否完成可影响抢占异常的性能。如果寄存器第一子集的状态保存还没有完成,并且不需要在抢占异常之前执行附加状态保存,则省去附加状态保存是最快的,即使其对原来触发该状态保存的异常是需要的。
另一方面,如果在执行寄存器的第二子集的附加状态保存时发生抢占异常,则完成附加状态保存是最有效的,即使其对于抢占异常不是必需的,因为停止并且倒转已经被执行的附加状态保存可能花费更长的时间。因此,如果附加状态保存未被执行,则即使不存在将导致安全性破坏的进一步的次安全异常,从性能的角度,完成附加状态保存仍然是更有效的。
为了向后续异常指示附加状态保存已被执行,在抢占的情况下,可设置状态保存状态值。响应于在抢占异常之后被执行的从安全域切换到次安全域的进一步的末尾连锁异常,如果状态保存状态值指示其已被执行,则附加状态保存可被省去。
状态保存可将数据存储到各种位置。可以将寄存器内容存储到数据存储设备的一般区域。但是,在这种情况下,需要保留寄存器内容被保存在数据存储设备中的哪里的指示。因此,执行状态保存的更简单的方法是使用数据存储设备中的栈。当使用栈时,被存储到栈的数据的位置以一个寄存器中的栈指针的形式保留,从而当数据需要被恢复时,允许对数据的快速和便捷的访问。
在具有安全域和次安全域的安全系统的环境中,可能存在安全栈和次安全栈。在寄存器第一子集的状态保存和寄存器第二子集的附加状态保存中,当后台处理被停止以执行最初异常时,异常控制电路可将数据保存到对应于处理电路正在操作的当前域的安全栈和次安全栈中的一个。最初异常可以是触发附加状态保存的所述第一异常或可以是更早的异常。
虽然本申请一般涉及次安全域和安全域,但可以存在具有不同安全性程度或相同安全性程度的多个安全域,或具有相同或不同安全性条件的多个次安全域。
从进一步的方面来看,本发明提供了一种数据处理装置,包括:
处理装置,用于响应于程序代码而执行数据处理操作,处理装置包括用于控制异常处理的异常控制电路;
多个寄存器装置,用于存储数据,寄存器装置包括寄存器装置的第一子集和寄存器装置的第二子集;以及
数据存储装置,用于存储数据,数据存储装置包括多个区域,区域包括安全区域和次安全区域,其中安全区域用于存储当在安全域中操作时可被处理装置访问而当在次安全域中操作时不可被处理装置访问的数据;其中:
响应于来自由处理装置执行的后台处理的最初异常,异常控制装置被配置为在触发处理装置执行对应于异常的异常处理程序之前,执行来自寄存器装置的第一子集的数据的状态保存,其中异常处理程序负责执行来自寄存器装置的第二子集的数据的状态保存;
响应于导致从安全域转换到次安全域的第一异常,异常控制装置被配置为在触发处理装置执行次安全域中的异常处理程序之前,执行来自寄存器装置的第二子集的数据的附加状态保存,其中后台处理由处理装置在安全域中执行;并且
响应于导致从安全域转换到次安全域的末尾连锁异常,异常控制装置被配置为触发处理装置在不执行附加状态保存的情况下,执行异常处理程序,末尾连锁异常在第一异常被处理之后并在返回后台处理之前被处理。
从另一方面来看,本发明提供了一种用于数据处理装置的数据处理方法,数据处理装置包括:处理电路,用于响应于程序代码而执行数据处理操作,处理电路包括用于控制异常处理的异常控制电路;多个寄存器,用于存储数据,寄存器包括寄存器的第一子集和寄存器的第二子集;以及数据存储设备,用于存储数据,数据存储设备包括多个区域,区域包括安全区域和次安全区域,其中安全区域用于存储当在安全域中操作时可被处理电路访问而当在次安全域中操作时不可被处理电路访问的数据;
所述方法包括以下步骤:
响应于来自由处理电路执行的后台处理的最初异常,异常控制电路在触发处理电路执行对应于异常的异常处理程序之前,执行来自寄存器的第一子集的数据的状态保存,其中异常处理程序负责执行来自寄存器的第二子集的数据的状态保存;
响应于导致从安全域转换到次安全域的第一异常,异常控制电路在触发处理电路执行次安全域中的异常处理程序之前,执行来自寄存器的第二子集的数据的附加状态保存,其中后台处理由处理电路在安全域中执行;并且
响应于导致从安全域转换到次安全域的末尾连锁异常,异常控制电路触发处理电路在不执行附加状态保存的情况下,执行异常处理程序,末尾连锁异常在第一异常被处理之后并在返回后台处理之前被处理。
本发明进一步的特定和优选方面在所附从属和独立权利要求中给出。适当情况下,独立权利要求的特征可与从属权利要求的特征相结合,并且与除了权利要求中明确给出的那些特征组合。
附图说明
本发明将参考如附图所示的本发明的实施例,仅通过示例的方式来进一步地说明,其中:
图1根据一个实施例,示出了具有带有安全区域和非安全区域的数据存储设备的数据处理装置;
图2根据一个实施例,示意性地示出了存储器地址空间;
图3A和3B示出了所述实施例的技术意欲提供防护的两个不同攻击情境;
图4A根据一个实施例,示意性地示出了在接收到函数调用或异常时,预定处理状态在安全栈上的存储,而图4B示出了对于各种情境,该预定处理状态的形式;
图5是示出了在一个实施例中,当接收到函数调用时处理电路的操作的流程图;
图6是示出了在一个实施例中,当接收到异常时处理电路的操作的流程图;
图7是示出了在一个实施例中,当处理分支操作时处理电路的操作的流程图,包括分支操作是函数调用返回或异常返回的情况;
图8A和8B根据一个实施例,示意性地示出了当安全栈被初始化时,存储在安全栈上的预定签名可如何被用于防止从次安全域分支到安全代码中的无权尝试;
图9示出了当处理末尾连锁异常的链时执行状态保存和恢复操作的示例;
图10示出了使用异常返回值的一部分来指示用于控制状态保存操作的状态信息的示例;
图11是更详细地示出了执行被调用者寄存器的状态保存的第一示例的流程图;
图12A是示出了在进入最初异常时设置异常返回地址的示例的流程图;
图12B是示出了在进入末尾连锁异常时设置异常返回地址的示例的流程图;
图13是示出了在从异常返回时所执行的状态恢复的示例的流程图;
图14是更详细地示出了异常返回处理的流程图;
图15和16示出了使用图10所示的状态信息可避免不必要的状态保存和恢复操作的示例;
图17示出了较高优先级异常抢占较低优先级异常的示例;并且
图18A和18B示出了当在执行状态保存的过程中发生抢占时,可如何执行状态保存的示例。
具体实施方式
图1示出了可以是例如微控制器的数据处理装置10。其包括用于处理指令的处理电路20,以及用于存储由处理电路20进行处理的数据并且用于存储处理电路20执行的程序代码的数据存储设备30。
数据存储设备30具有不同安全性的两个区域:安全区域32和非安全区域34(这里也称为次安全区域)。存储在安全区域32中的数据在存储在非安全区域34中的代码执行时不能被其访问。
数据处理装置10还具有存储器保护单元MPU 40,其控制对安全区域32和非安全区域34的访问。虽然该控制可通过存储器保护单元来执行,但在其他实施例中,其可由处理装置内的电路以更分布式的形式完成,该电路监测当前正在被执行的代码所存储的区域,并基于此来控制对存储器的不同区域的访问。
在该实施例中,处理电路20正在执行的域的安全性可根据当前正在被执行的代码所存储的区域来确定。因此,存储在安全数据存储设备32中的安全程序代码在安全域中被执行,并且使用安全栈36来存储数据值。类似地,存储在非安全数据存储设备34中的非安全代码在非安全域中被执行,并且使用非安全栈38来在执行期间存储数据值。用于确定当前操作域的其他技术也是可以的,例如,基于随着控制流改变指令来标识处理器应该在哪个域操作的目标域值。
处理电路20具有用于获取要被执行的指令的获取电路22。其还具有用于对这些指令进行译码的译码电路24,以及用于执行这些指令的执行电路26。要被执行的指令由获取电路22通过存储器保护单元MPU 40从数据存储设备30来获取。指令和数据通过MPU 40取回,MPU 40控制对安全区域和非安全区域的访问并将安全数据与非安全侧隔离。
在该实施例中,存在寄存器组60,其具有在数据处理过程中使用的通用寄存器。这些通用寄存器具有程序计数器PC,其指示哪个指令是下一个将被执行的指令;以及栈指针SP,其指示下一个数据访问应在栈中的哪个点做出。在该实施例中,因为在安全侧存在栈,并且在非安全侧存在栈,因此存在安全栈指针SSP和非安全栈指针NSP,但是在任意一个时刻,这些指针中只有一个是正在被执行的程序直接可见的。应该注意的是,在一些实施例中,对于每个栈可存在多个栈指针,但是仍然在任意一个时刻只有一个将是可见的。在寄存器组60中还有用于存储正被处理电路20处理的数据值的通用寄存器。在该实施例中,这些寄存器被标记为R0到R12
寄存器组60还包括连接寄存器65,当异常被获取或函数被调用时,其可被用于存储返回值。返回值允许系统确定返回是异常返回还是函数返回,并且确定当从异常或函数返回时需要什么处理。不同种类的返回值可被使用,包括:函数返回地址,其指示随着函数的完成而要被处理的程序指令的地址;指示函数返回的虚拟函数返回值,对于该函数返回,实际函数地址已被存储到安全栈以向次安全域隐藏实际函数地址;以及异常返回(EXC_RETURN)值,其指示异常返回,并且可包括信息(例如,后台处理被处理的域的安全等级的指示),该信息可使处理器确定如何处理该异常返回,例如,当恢复状态时访问哪个栈以及需要加载多少个寄存器。返回值的不同形式稍后将进行说明。
图1还示出了附加寄存器组64,其具有附加专用寄存器,例如,浮点寄存器。在一个实施例中,可在安全配置寄存器(SCR)62中设置值来标识附加寄存器组64中是否有寄存器能够存储安全数据,并且如果是,则这些寄存器将被认为形成一组寄存器(与寄存器组60的寄存器一起)的一部分,当控制从安全域到次安全域进行转换(反之亦然)时,该组寄存器需要被管理。
存在很多可引起从安全域到次安全域转换(反之亦然)的机制。根据所述实施例,用于在安全性域之间进行转换的一个允许的机制是函数调用机制,其中函数调用可被发布以使得当前软件程序的执行暂停,以便使能向该函数调用所标识的另一软件程序转换,该另一软件程序将在安全域还是次安全域中被执行,取决于该另一软件程序在数据存储设备30中被存储在哪里。一旦该另一软件程序已被执行,则执行函数调用返回以返回到被暂停的原软件程序的执行。虽然一些函数调用将标识在与当前软件程序相同的域中将被执行的目标软件程序,但在其他实例中,目标软件程序可需要在与当前软件程序正在执行的域不同的域中执行。
根据所述实施例,可被用于在安全性域之间进行转换的另一机制是异常机制。根据该机制,当异常发生时,当前软件程序的异常将被暂停,并且替代的是,执行将分支到用于处理异常的异常处理程序,所使用的异常处理程序取决于发生的异常的类型。一旦异常处理程序已被执行,则异常返回将被用于返回到由于发生异常而被暂停的原软件程序。
异常控制电路28被提供以控制异常的获取,并且其中这些异常导致从更安全到次安全域的转换,可存储敏感数据的一组寄存器将在获取异常之前被清除,以避免存储在这些寄存器中的数据可被次安全侧获得。存储在这些寄存器中的一些或全部中的状态将在栈访问电路70的控制下被存储在安全栈上,使得在从异常返回时,该状态能够被恢复。为了异常处理,用于控制将寄存器内容存储到适当的栈的栈访问电路70可被认为形成异常控制电路28的一部分。但是,更一般地,还存在与在需要从安全域到次安全域转换的函数调用发生时将预定处理状态存储到安全栈相关联的一些栈访问电路70,因此在图1中,栈访问电路70被标识为与异常控制电路28分离。
此外,如图1所示,故障检查电路75被提供用于检测在次安全域中的软件试图通过返回机制返回到安全域的情况,该返回机制具有与被用于从安全域转换到次安全域中的原机制不同的类型(例如,通过使用函数调用返回来从异常中返回,或使用异常返回来从函数调用中返回)。虽然故障检查电路75的一部分可被认为被包含在异常控制电路28中(即,负责检查异常返回的部分),但是故障检查电路75的其他部分可被分布在处理电路的硬件中的其他地方。例如,在一个实施例中,负责检查函数调用返回的部分可与获取电路22相关联。故障检查电路75的操作稍后将进行更详细地探讨。
虽然在图1中数据存储设备30包括单个安全区域和单个次安全区域,但是这里所述的技术同样适用于包括两个以上不同安全性区域的不同实现。
此外,虽然图1将异常控制电路28和栈访问电路70展示为与处理电路20的其他部分(例如,执行级26)分离,但是实际上,异常控制电路28和栈访问电路70可至少部分重新使用处理电路20的一些元件来控制异常处理和栈操作。
图2示意性地示出了可被用于一个实施例的存储器地址空间。存储器地址空间100将被分区以形成一个或多个安全区域和一个或多个次安全区域。为了简洁起见,在图2中假设存在单个安全区域和单个次安全区域。安全地址空间的一部分102将被留出用于存储将在安全域中被执行的程序代码,而安全地址空间的另一部分104将被分配给安全栈36。安全地址空间的剩余部分106将被用于各种目的,例如,作为存储器堆,作为在执行过程中分配的自由空间等。次安全地址空间也将以类似的方式进行分区,从而提供用于存储将在次安全域中被执行的程序代码的部分110,被分配给次安全栈38的部分112,以及剩余部分114。
根据所述实施例,存储器地址空间还包括预留区域120,在该区域中的任意地址都不是程序代码的有效地址。如以下将进行的更详细的探讨那样,这些预留地址中的一些被用于向所述实施例提供想要的功能。
为了提高速度和效率,上述实施例提供了用于在安全与次安全域之间进行转换的两种机制,即,函数调用机制和异常机制。但是,多域转换机制的使用增加了对恶意攻击的脆弱性,例如,允许次安全域中的软件试图通过返回机制返回到安全域,该返回机制具有与被用于从安全域转换到次安全域中的原机制不同的类型。两个特定攻击情境被示于图3A和图3B中。如图3A所示,在点145处,假设一些安全代码正在执行,并且在点150处,对存在于次安全域中的函数进行函数调用。然后该函数在点155处被执行,但是在点160处,次安全软件试图通过使用异常返回机制来任意分支到安全代码中。
类似地,在图3B中,在点175处,假设一些安全代码正在执行,并且在点180处,发生异常(例如,中断),导致分支到次安全域中的异常处理程序。该异常处理程序在点185处被执行,但随后在点190处,次安全域中的软件试图做出向安全域的函数返回。
如果系统的安全性要被维护,则以上两个攻击情境均需要被防止,因为如果这样的情境被允许发生,则这将允许次安全软件试图做出进入到安全代码中的任意分支,这可提供用于获得对安全数据的访问的机制。
为了免受这样的攻击,当函数调用或异常发生,导致从安全域到次安全域的转换时,栈访问电路70被安排为将预定处理状态存储到安全栈的栈帧上,如将参考图4A和4B进行更详细地探讨那样。在图4A中,假设安全程序FOO当前正在安全域中执行,然后在FOO完成之前发生函数调用或异常。在函数调用或异常发生之前,通常FOO会使用安全栈200上分配的栈帧205,以便存储FOO所使用的临时数据。当函数调用或异常发生时,则分离栈帧210将被分配给栈访问电路70,然后栈访问电路将在分支到由函数调用所标识的所需软件程序,或分支到处理异常所需的异常处理程序之前在栈帧210中存储预定处理状态。
首先考虑异常发生的情况,然后如果异常处理程序要在安全域内执行,则由栈访问电路存储在栈帧210中的预定处理状态包括图4B中标识的寄存器内容215。这些寄存器在这里被称为“调用者”寄存器,并且这些寄存器是栈访问电路70(或异常控制电路28)将一直负责把其状态保存到栈上,而不管异常处理程序将要在哪个域执行的寄存器。默认情况下,然后异常处理程序将负责寄存器的剩余部分(这里称为“被调用者”寄存器)的状态。特别地,然后异常处理程序将在异常处理程序的主体中重新使用被调用者寄存器之前,将被调用者寄存器的状态保存到与异常处理程序正在其中执行的域相关联的栈上。此外,一旦异常处理程序完成,则异常处理程序将在发布异常返回之前,负责恢复这些被调用者寄存器的状态(通常通过将其从栈中复制回相关的寄存器中)。
但是,根据所述实施例,在异常将需要从安全域转换到次安全域,并且先前的后台处理在安全域中的情况下,栈访问电路70额外负责在使处理电路转换到执行异常处理程序之前,将被调用者寄存器的状态保存在栈帧210中。因此,如图4B所示,在该情况下,存储在栈帧210中的预定处理状态采用形式220。应该认识到,图4B中特定标识的调用者和被调用者寄存器只是调用者和被调用者寄存器可被如何分区的示例,而到底哪些寄存器被认为是调用者寄存器或被调用者寄存器将基于实现方式而不同。
同样如图4B所示,在异常处理程序在次安全域,从而需要从安全到次安全域的转换的情况下,栈访问电路也被安排为在栈帧210中的预定相对位置处存储预定签名222,在该实施例中,示出该预定相对位置是栈帧中的底部位置。该预定签名可采用各种形式,但在一个实施例中被选择为具有不对应于程序代码的有效地址的值。在一个实施例中,预定签名被选择为具有存储器地址空间的预留部分中的地址值120中的一个。在一个特定实施例中,预定签名具有值0xF0A5125A。
通常,当函数调用发生时,正常情况下栈访问电路70将不在栈帧210中保存任何预定处理状态。因此,如果函数调用标识仍在安全域中的目标代码,则没有预定处理状态被存储。但是,如果函数调用标识在次安全域中的目标代码,则栈访问电路70被安排为在栈帧210中存储返回地址225,一旦函数调用已完成,该返回地址225将被需要以便继续执行FOO。在需要转换到次安全域的异常发生的情况下,该返回地址225被存储在与预定签名222被存储的预定相对位置相同的预定相对位置,即,栈帧内的底部位置。
取代安全栈内存储的实际返回地址225,次安全域内的目标代码被提供有实际上不是程序代码的有效地址的虚拟函数调用返回地址。在一个实施例中,该虚拟函数调用返回地址从预留地址120中的一个中选择,并且进一步被选择为具有与上述预定签名222不同的值。
当函数调用发生时,软件仍然可执行寄存器状态的状态保存,即使根据图4B所示的栈帧,状态保存不是硬件所需要的。将寄存器分为调用者和被调用者寄存器对这样的函数调用是有用的,因为其既允许在函数调用前被执行的软件(调用者软件),又允许在函数调用后被执行的软件(被调用者软件)影响哪些寄存器经受状态保存。例如,如果调用者软件知道其没用过某些调用者寄存器,或已经结束使用一些调用者寄存器中的数据,则这些寄存器中的值在函数调用后将不必被维护,因此这些寄存器不必经受状态保存。类似地,如果被调用者软件将不会使用某些被调用者寄存器,则针对这些寄存器被调用者软件不必执行状态保存。因此,允许调用者和被调用者软件影响用于状态保存的寄存器的选择通过降低适当时候的状态保存的数量使得性能提升。相比之下,如果只有调用者软件或只有被调用者软件负责状态保存,则一些寄存器可能被不必要地保存,以防其他软件需要该寄存器被保存。图5是根据一个实施例,示出了当函数调用发生时由处理电路执行的步骤的流程图。在步骤300,确定当前执行的代码是否正在安全域中执行。如果不是,则过程直接进行到步骤310,其中连接寄存器(LR)被设置为等于返回地址。此后,过程进行到步骤325,其中执行分支到新函数(即,被标识为函数调用的目标的程序代码)。由于返回地址已在连接寄存器内被设置,当新函数完成时,正确的返回地址可被指定在函数调用返回中。
如果在步骤300确定当前执行的代码正在安全域中执行,则在步骤305,确定作为函数调用的目的地的新函数是否要在次安全域中执行。确定这一点存在很多方法,但在一个实施例中,这仅仅通过确定函数调用的目标地址是与安全存储器区域还是次安全存储器区域相关联的地址来获得。如果其与次安全存储器区域相关联,则表明函数调用地址的目的地在次安全域中。如果函数调用的目的地不在次安全域中,则过程再次进行到步骤310。
但是,如果函数调用的目的地在次安全域中,则表明需要从安全域转换到次安全域,并在此处过程进行到步骤315,其中连接寄存器被设置为如上所述的虚拟函数调用返回地址。此外,在步骤320,实际返回地址被栈访问电路70推到安全栈上。其后,过程进行到步骤325,其中执行分支到作为函数调用的目标的新函数。
不仅是图5所示的硬件操作,而且在函数调用之前执行的软件也可执行来自寄存器的数据的状态保存,并且在函数调用之后执行的软件也可执行来自被调用者寄存器的数据的状态保存。
图6是示出了当异常(异常的一个示例是中断)发生时处理电路的操作的流程图。在步骤400,连接寄存器被设置为选定的虚拟异常返回地址,在一个实施例中,存在多个不同的虚拟异常返回地址可被选择。在一个实施例中,每个可能的虚拟异常返回地址将会是不是程序代码的有效地址的地址。步骤400的更多细节稍后将进行说明。其后,在步骤405,调用者保存寄存器被推到后台处理域(即,后台代码正在其中执行的域)的栈上。
其后,在步骤408,确定后台处理是否在安全域中,并且如果不是,则过程直接进行到步骤432。如将在下面说明的那样,后台处理是否在安全域中可基于位于连接寄存器65中的异常返回值来确定。如果后台处理在安全域中,则在步骤410,确定当前执行的代码是否正在安全域中执行,并且如果不是,则过程再次直接进行到步骤432。但是如果在步骤410确定当前执行的代码(可以是后台处理或者可以是先前的末尾连锁异常)正在安全域中执行,则在步骤412确定目的地是否在次安全域中,即,处理异常所需的异常处理代码是否将在次安全域中被执行。如果不是,则过程再次直接进行到步骤432。但是,如果目的地在次安全域中,则表明在后台处理在安全域的情况下,将发生从安全域到次安全域的转换。因此,过程进行到步骤420,其中被调用者保存寄存器被推到后台域的栈上,并且上述预定签名被写到栈帧的底部。与后台处理相关联的栈可根据位于连接寄存器65中的异常返回值来确定。稍后将提供这一步骤的更多细节。
在步骤430,异常控制电路28保证所有寄存器被清除。在一个示例中,所有寄存器可在步骤430被清除。在替换实施例中,寄存器也可以在其被推到栈上时被清除,因此调用者寄存器可在步骤405期间被清除,而被调用者寄存器可在步骤420或430期间被清除。
接着步骤430,或者如果在步骤408、410和412检查的条件中的任一项不发生,则过程随后进行到步骤432。如果异常入口是到末尾连锁异常,则连接寄存器65用新的异常返回值进行更新。这一步骤将在下面针对图12B进行更详细地探讨。
在步骤435,处理分支到异常处理程序。
然后,异常处理程序可执行被调用者寄存器的状态保存。在一个实施例中,异常处理程序可一直执行被调用者寄存器的状态保存,即使在被调用者寄存器中的数据在步骤420已经被推入栈并被清除的情况下(在这种情况下,硬件会将来自被调用者寄存器的数据存储到安全栈,而软件会将来自被调用者寄存器的被清除的值存储到次安全栈)。或者,异常处理程序能够检测被调用者寄存器的状态保存是否已被执行,并且如果是,则可省去被调用者寄存器的状态保存。
图7是示出了分支操作如何进行处理的流程图。该分支操作可包括正常分支处理操作、函数调用返回和异常返回。虽然图7示出了分支操作,但在替换实施例中,类似的机制可与可导致指令流中的改变的任意指令(例如,具有作为目的地寄存器的程序计数器的加载指令)结合使用。
在步骤500,确定分支操作所指定的目标地址是否在预留地址范围120内,在该特定示例中是目标地址是否大于或等于0xF0000000的情况。如果不是,则表明是正常分支活动,并且过程进行到步骤505,其中正常分支处理被执行。因为分支操作的处理将被本领域的技术人员很好地理解,因此这里不提供正常分支处理的进一步的细节。
如果在步骤500确定目标地址在预留地址范围120内,则在步骤510,确定目标地址是否与虚拟函数调用返回地址一致。在一个特定实施例中,虚拟函数调用返回地址是0xF7FFFFFF。如果目标地址确实对应于虚拟函数调用返回地址,则在步骤515,安全栈内的栈帧210的上述预定相对位置被访问,以便从安全栈中读取返回地址。其后,过程返回到步骤500,其中,假设函数调用返回已被正确用于从先前的函数调用返回,在步骤515读取的返回地址将是程序代码的真实地址,并且相应地在步骤505,过程将分支到正常分支处理。但是,相反如果函数调用返回已被错误地用作从异常返回的机制,则当栈帧220在步骤515被访问时,预定签名222将作为实际返回地址被取回。当该地址随后在步骤500被分析时,将确定其在预留范围内,但在步骤510,将确定该地址不是虚拟函数调用返回地址。然后过程将进行到步骤520,其中还将确定该地址不是有效异常返回地址中的一个,并且相应地,过程将分支到步骤525,其中故障将被创建以标识函数调用返回已被错误使用。
现在考虑异常返回被指定的情况,则如果该异常返回与导致从安全域到次安全域的转换的先前异常相关联,则这会将若干不同有效异常返回地址中的一个标识为目标地址,这些可能的异常返回地址中的每一个都在预留范围120内,并且与预定签名和虚拟函数调用返回地址都不同。相应地,过程将从步骤500进行到步骤510,并从步骤510到步骤520,其中跟随“是”的路径将随后到达步骤530。异常返回处理步骤530的细节稍后将进行说明。在具有低于或等于当前异常的优先级而高于后台处理的优先级的新的异常在该当前异常返回的时刻正等待执行的情况下,则该新的较低优先级的异常将被作为末尾连锁异常(即,该新的异常将紧接在当前异常完成后而在返回到先于正被获取的当前异常发生的后台处理之前被立即处理),并且如图7所示,过程将分支回图6中的步骤408。
一旦步骤530的异常返回处理已被执行,并且没有进一步的末尾连锁异常等待处理,则过程进行到步骤535,其中确定异常返回处理步骤530是否已经指示预定签名被预期在存储于栈帧210内的处理状态中。如先前所探讨的那样,这将是如果异常导致从安全域到次安全域的转换,则后台代码在安全域中被执行的情况。如果没有预定签名是预期的,则过程仅进行到步骤540,其中相关寄存器值从栈帧中出栈。这一过程稍后将针对图13进行更详细地说明。
但是,如果在步骤535,确定预定签名是预期的,则过程进行到步骤545,其中栈帧210的底部被读取,并且取回的值与预定签名对比。在步骤550,确定是否存在匹配,并且如果是,则过程进行到步骤540。但是,如果不存在匹配,则过程进行到步骤555,其中故障被创建,表明异常返回已被错误地用于试图从函数调用返回。特别地,如果异常返回正被错误地用于试图从函数调用返回,则在步骤545读取安全栈将导致返回地址225被取回,该返回地址225将不匹配预定签名,并将相应地导致故障在步骤555被创建。
存在很多方法来处理在步骤525或步骤555被创建的故障。在一个实施例中,处理电路响应于任一故障情况而在安全域内执行适当的故障处理程序代码。通过保证故障处理程序代码在安全域内被执行,这防止了次安全域中的攻击者重新获得控制,并相应地防止了重试攻击。
作为用于阻碍任意攻击重试的替换机制,如果任一故障情况被识别,则数据处理装置可被安排使得栈指针值不被调整,使得返回的重演也将导致同样的故障情况被识别。因此,通过不调整栈指针,攻击者不能仅消费安全栈的最后位置,然后重试攻击以便在安全栈内的不同位置处进入。在一个实施例中,以上两种机制可被用于提供对抗来自次安全域的攻击的重试的鲁棒性。
在一个实施例中,可引起来自次安全域的潜在攻击的另一情境随着安全栈的初始化而出现。在该时刻,安全栈将是空的。如果在该时刻,正在被执行的程序代码在次安全域中,则程序代码可能试图返回到安全域中。该返回应被阻止,因为不存在从安全域到次安全域的原转换来合理地从其返回。图8A和8B示出了可被用于阻止这样的返回成功的机制。如图8A所示,当安全栈600被初始化时,预定签名值602被存储在安全栈上(在一个实施例中,当栈被初始化时,该值由软件来存储)。该预定签名值通常将不同于先前参考图4B所述的预定签名222,但是仍将是不对应于程序代码的有效地址的值。在一个特定实施例中,预定签名602具有值0xF05AEDA5。
如图8B所示,如果在点605处,软件正在次安全域中执行,然后在点610处试图返回到安全域中,则故障检查电路将在点615处从安全栈中读取预定签名值602,并将确定其不对应于程序代码的有效地址,并将相应地创建故障。因此,从次安全域中返回将被阻止。
特别地,如果在点610处的返回是函数调用返回,则在点615生成的故障与在图7中的步骤525创建的故障相同,并且相同的故障处理代码可被用于响应该故障。因此,在该实施例中,故障检查电路不需要在预定签名602与上述预定签名222之间进行区分。相反,如果在点620处的返回是异常返回,则预定签名值602与预定签名值222不同的事实将意味着图7的步骤550将检测不到匹配,并且相应地在步骤555,故障将被引发。
如针对图7的步骤530所述的那样,当从一个异常返回时,第二异常可能正等待处理,并且可能在返回到在第一异常之前被执行的后台处理之前被处理。这被称为末尾连锁。图9示出了接着第一异常,第二和第三异常在转回后台处理之前被末尾连锁的示例。
如图4B的栈帧220所示,如果后台处理在安全域中,并且存在从安全处理到次安全状态中的异常的转换,则调用者保存寄存器和被调用者保存寄存器均被异常控制电路28推入安全栈。但是,通常在安全域中被处理的异常将预期只有调用者保存寄存器会被保存到栈(如图4B的栈帧215所示),而被调用者保存寄存器的保存留给异常处理程序。因此,如图9所示,当进入第一异常而在点700处执行被调用者寄存器的附加状态保存时,然后当在点705处转到安全域中的第二异常时,被调用者保存寄存器可从栈中弹出以恢复栈帧215,其被预期末尾连锁第二异常在安全域中进行处理。
但是,如果要在次安全域中被处理的末尾连锁第三异常发生,则在点710处,被调用者寄存器需要再次被推入栈,因为从安全域到次安全域的转换意味着被调用者寄存器中的数据需要对次安全处理隐藏。最后,当第三异常完成,并且没有进一步的末尾连锁异常时,则在图9的点715处,调用者和被调用者保存寄存器均从栈中被弹出。
图9示出了当在末尾连锁异常之间进行切换时所执行的若干状态保存操作和状态恢复操作。这些操作花费时间,因此延迟了到来异常的处理,从而降低了处理性能。因此,避免这些操作中的一些是有用的。本技术认识到当从次安全异常切换到末尾连锁的安全异常时,被调用者寄存器不必要从安全栈中弹出。将被调用者寄存器留在栈上是可接受的,因为这不影响异常的处理,并且所有被调用者保存值被允许从异常将在其中被处理的安全域中访问。因此,被调用者寄存器可响应于导致从安全域转换到次安全域的第一异常而被保存到栈。当处理从次安全异常切换到安全末尾连锁异常时,被调用者寄存器的恢复可被省去。对于导致从安全域转换到次安全域的进一步异常,通过硬件的被调用者保存寄存器的附加状态保存可被省去。
图10示出了在进入异常时可被存储在连接寄存器中的异常返回值的示例。在一个实施例中,连接寄存器65不需要将异常返回值保留异常处理程序被执行的整个时间,相反其可在开始时被设置为该值,然后立即移动到栈中。当异常完成时,软件分支到异常返回值所标识的地址,CPU发现该地址是特定事件,因为其不是有效指令地址。在一个实施例中,上述虚拟函数调用返回地址在函数调用发生时也被存储在连接寄存器中,并以类似的方式进行处理。
异常返回值包括用于确定在进入导致从安全域转换到次安全域的异常时是否需要由硬件保存被调用者保存寄存器。异常返回值具有若干不同的可能值,每个可能值对应于地址空间的预留区域120,并且与虚拟函数返回地址以及上述预定签名222和602不同。异常返回地址包括状态保存状态值字段720和安全性字段725。
状态保存状态值字段720存储状态保存状态值SCRS,其指示对于接下来导致从安全域转换到次安全域的异常,是否需要被调用者保存寄存器的附加状态保存。在图10的示例中,值0指示附加状态保存可被跳过,而值1指示需要附加状态保存,但是也可使用其他状态值的映射。
安全性字段725存储安全性域值S,其指示在末尾连锁异常的当前链中的初始异常之前正被执行的后台处理是在次安全域还是安全域中。当进入末尾连锁异常的链中的每个异常时,异常返回值将在图6的步骤432中被设置为新的值。当设置异常返回值时,状态保存状态值字段720的值可被改变以影响后面要被执行的状态保存处理。以这种方式,信息可从一个异常传递到另一个异常以指示对于异常之间的下一转换是否需要附加状态保存。这将参考图11-16进行解释。
图11更详细地示出了用于将被调用者保存寄存器推入安全栈36并将预定签名写入安全栈36的图6的步骤420。该附加状态保存基于异常返回值的状态保存状态值字段720的值。在步骤750,处理器确定异常返回值的状态保存状态值字段720是否具有值0。如果是,则跳过将被调用者保存寄存器推入栈,并且该方法继续图6的步骤430。在这种情况下,被调用者保存寄存器的状态保存不是必要的,因为来自这些寄存器的数据将已经响应于先前的异常而被保存到栈。
另一方面,如果在步骤750,状态保存状态值不具有值0,则该方法进行到步骤755,并且来自被调用者保存寄存器的数据被推入安全栈。被调用者保存寄存器也被清除,使得其值对于次安全域中的后续处理是不可访问的。此外,在步骤760,预定签名222被写到栈的底部。然后该方法也进行到图6的步骤430。因此,根据图11,附加状态保存是否被执行取决于状态保存状态字段的值。
图12A示出了针对当执行后台处理时接收到的最初异常(如果存在末尾连锁异常的链,则其是第一个异常),在图6的步骤400设置异常返回寄存器的示例。在步骤770,确定处理器正在操作后台处理的当前域。如果当前域是安全域,则在步骤775,安全性域字段725被设置为具有值1以指示安全域。如果当前域是次安全域,则在步骤780,安全性域字段725被设置为值0。不管哪个域是当前域,在步骤790,状态保存状态值字段720被初始化为值1,其指示在下一个从次安全域到安全域的转换处可能需要附加状态保存。然后,在步骤795,异常返回值被写入连接寄存器65,其中状态保存状态值字段720和安全性字段725被设置为在先前步骤中确定的值。然后该方法进行回到图6的步骤405以继续异常进入处理。
图12B更详细地示出了用于设置末尾连锁异常的异常返回值的步骤432的示例。在步骤800,该方法确定正被进入的异常是否是末尾连锁异常。如果不是,则该方法进行到图6的步骤435以分支到异常处理程序,而不执行图12B的剩余步骤。但是,如果该异常是末尾连锁异常,则在步骤802,确定安全域值S(来自图10中被用于终止链中的先前异常的EXC_RETURN值)是否是1。如果不是,则S=0,并且过程进行到步骤804以将状态保存状态值设为1。如果后台处理是次安全的(如由S=0所指示的),则没有附加状态保存将被执行(图6的步骤408将导致附加状态保存步骤被省去)。虽然在这种情况下,状态保存状态值字段720将不会影响状态保存,但为了防止次安全域中的处理从状态保存状态值字段720获得信息,最安全的是在步骤804将该字段设置为默认值1。
另一方面,如果在步骤802,安全性域值S等于1,则过程进行到步骤805,其中确定新的末尾连锁异常是否要在安全域中被处理。如果不是,则再次在步骤804将状态保存状态值字段720设为1。
如果新的异常要在安全域中被处理,则在步骤806,确定当前处理是否在安全域中。如果不是,则在步骤808,状态保存状态值字段720被设为0,而如果当前处理是安全的,则在步骤810,状态保存状态值字段720被设置为与先前异常相同的值。在步骤812,新的异常返回值被写到连接寄存器65,其中状态保存状态值字段720根据步骤804、808或810来设置。然后该方法进行到图6的步骤435以分支到异常处理程序。
图13更详细地示出了用于使寄存器出栈的图7的步骤540。基于异常处理的过去历史,该栈可包括只有调用者寄存器需要被恢复的栈帧215或调用者和被调用者保存寄存器都需要被恢复的栈帧220。图13示出了处理器可以如何确定哪个栈帧将出现在栈上。在步骤820,确定当前的异常返回是否正从次安全异常切换到安全后台处理。例如,安全域字段725可被用于确定后台处理是安全还是次安全的。如果处理不是正从次安全异常切换到安全后台处理,则在步骤822,该过程确定当前异常返回是否正从次安全异常切换到安全后台处理,并且状态保存状态值字段720的值是否为0。如果步骤820和822中确定的条件均不满足,则在步骤824,只有调用者寄存器将其值从栈中恢复。但是,如果在步骤820和822中测试的条件中有一个满足,则在步骤824将数据恢复到调用者寄存器之前,在步骤826,被调用者保存值被恢复到被调用者寄存器。因此,该系统可确定哪些寄存器需要将其寄存器状态恢复。
图14更详细地示出了图7的异常返回处理步骤530。在步骤830,确定是否存在应为末尾连锁的待处理异常。如果该异常的优先级低于或等于刚结束的异常的优先级,而高于后台处理的优先级,则该异常应为末尾连锁的。如果存在末尾连锁异常要被处理,则该方法返回到图6的步骤408以处理进入末尾连锁异常。
如果不存在末尾连锁异常,则该方法进行到步骤840和850,其中确定:(a)异常返回正从次安全异常切换到安全后台处理;还是(b)异常返回正从安全异常切换到安全后台处理;并且状态保存状态值字段是否具有值0。如果这些条件中有一个满足,则在步骤860,确定预定签名222是预期的。如果这些条件都不满足,则在步骤870确定预定签名不是预期的。然后该方法进行到图7的步骤535,其中基于预定签名222是否是预期的来执行处理以检测异常返回是否已被不适当地使用。注意,步骤840和850检查与图13的步骤820和822相同的两个条件,因为如图4B的栈帧220所示,当被调用保存寄存器值出现在栈上时,则预定签名也将是预期的。
图15和16示出了图9所示的不必要的栈保存和恢复操作示例可如何使用状态保存状态值来避免。在图15中,当在点900处发生次安全异常时,后台处理在安全域中。如图12A所示,安全性域值S被设置为1以指示后台处理在安全域中,并且状态保存状态值SCRS也被设为1。当第一异常在点910完成时,存在优先级等于或低于第一异常而高于后台处理的待处理的第二异常。该异常是末尾连锁的,使得其在回到后台处理之前被处理。在该点处,被调用者保存寄存器的出栈被跳过。当切换到第二异常时,状态保存状态值SCRS被设为0,如图12B的步骤808所示,因为后台处理在安全域中(S=1),因此目的地是安全的而当前过程是次安全的。一旦第二异常在点920处完成处理,则末尾连锁的第三异常等待处理,并且要在次安全域中进行处理。由于状态保存状态值SCRS等于0,则根据图11的步骤750,附加状态保存可被省去,因为被调用者保存寄存器状态已被保存到栈。因此,第三异常可被更快处理,因为不存在与附加栈操作相关联的延迟。最后,在点930,处理返回到后台,并且根据图13的方法确定步骤820的条件是满足的,因此被调用保存寄存器状态和调用保存寄存器状态均从栈中弹出并恢复到相应的寄存器。
图16示出了附加栈保存操作可被避免的另一示例。在这种情况下,当执行安全后台处理时,在点1000处发生要在安全域中进行处理的最初异常。因为目的地不是次安全域,因此根据图6的步骤412,被调用者保存寄存器的保存将被省去。在点1000,只有调用者保存寄存器状态被硬件推入栈。状态保存状态值被设为1,如图12A所示。在点1005,次安全第二异常是接着第一异常的末尾连锁异常。因为状态保存状态值SCRS等于1,则在点1005,附加状态保存根据图11的步骤750和755来执行,因此被调用者保存寄存器状态被推入栈。因为S=1并且目的地是次安全的,则在图12B的步骤804,对于接下来的异常,状态保存状态值被设为1。在点1010发生从次安全第二异常到安全第三异常的末尾连锁转换,并且被调用者保存寄存器的出栈被跳过。在该点处,状态保存状态值SCRS根据图12B的步骤808而被设为0,因为S=1,所以目的地是安全的而当前过程是次安全的。这意味着在点1015接着的末尾连锁异常处,被调用者保存寄存器的入栈可被跳过,因为状态保存状态值的值为0。如图16所示,即使最初异常不是导致从安全域切换到次安全域的转换,在接下来从安全域到次安全域的切换时执行的附加状态保存也可被执行一次,并在后面的转换时将不再重复。
从图15和16可以看出,用于如图14所示设置异常返回值的机制意味着当异常正在次安全域中处理时,状态保存状态值SCRS将一直具有值1,同时,当处理安全异常时,状态保存状态值具有可变值0或1来指示在下一个安全到次安全的转换处是否需要附加状态保存。这是有用的,因为在次安全域中时将该值设置为固定值1防止了次安全域中的代码能够从状态保存状态值中获得任意信息,状态保存状态值可允许信息被推测异常处理的过去历史。这提高了安全性。
此外,如果次安全代码可篡改状态保存状态值,则这可影响在安全域中时的后续状态保存操作,这可导致安全性破坏。为了避免这一情况,处理电路在从次安全异常切换到安全异常时(例如,在图16的点1010处)可检测状态保存状态值仍具有在进入次安全域中的异常时被设置的固定值,并且如果该值已被改变,则触发错误。或者,没有错误可被触发,但是当返回安全域时,状态保存状态值可被重置为其在安全域中应具有的值,覆盖由次安全代码对状态保存状态值字段的任意修改。
图17示出了异常的抢占的示例。每个异常可与优先级值相关联。如果当具有较低优先级的异常正被执行时发生具有较高优先级的异常,则高优先级异常可抢占较低优先级异常,并且在较低优先级异常未完成的情况下进行处理。虽然图17示出了优先级值的较大数值指示较高优先级的示例,但是也可用较低优先级值表示较高优先级,例如,用优先级值0指示高于优先级值1的优先级异常。
如图17所示,当抢占发生时,被抢占的异常可被视为接下来的异常的后台处理。例如,在图17的点1100,后台处理被打断以处理具有优先级值1的第一异常。在点1105,发生了具有优先级值4的第二异常。由于其是比当前优先级等级更高的优先级,因此第二异常抢占第一异常,并且现在第一异常是后台处理。当在点1110从第二异常返回时,将执行状态恢复以恢复在第二异常发生的时刻由后台处理(即,第一异常)所使用的状态。当在点1115第一异常完成时,执行进一步的状态恢复以恢复由原后台用于处理的值。因此,在先前的实施例中,“后台处理”自身可以是根据被更高优先级异常抢占的异常的异常处理程序来执行的处理。
图18A和18B示出了状态保存状态值在抢占期间有用处的示例。如果后台处理是安全的,并且发生次安全异常,则如上所述,被调用和调用保存寄存器均将被推入栈,以防止由次安全异常处理器对被调用寄存器状态的访问。但是,当该状态保存操作正被执行时,也可发生具有更高优先级的另一异常。在这种情况下,较高优先级异常将抢占原来的次安全异常,因此次安全异常将不被处理。如果抢占异常要在安全域中处理,则将不必将被调用者保存寄存器推入栈。
图18A示出了当调用者保存寄存器正被推入栈时发生抢占异常的示例。在这种情况下,因为抢占异常是安全的,所以不必执行被调用者寄存器的附加状态保存,因此一旦调用者寄存器的入栈完成,则安全异常的处理就可开始。这避免了由将被调用者寄存器状态推入栈所导致的延迟。如果随后发生末尾连锁的次安全异常,则图如18A所示,被调用者寄存器状态可在此刻被推入栈。
另一方面,图18B示出了当被调用者寄存器正被推入栈准备处理原来的次安全异常时,在安全域中发生抢占异常的示例。在这种情况下,当被调用者寄存器的状态保存完成时,继续推入被调用者寄存器并切换到安全异常可能更有效。这是因为停止被调用者寄存器的状态保存以及倒转已经完成的被调用者寄存器的入栈操作可比仅完成状态保存花费更长的时间。因此,如果状态保存被完成,则将存在较少延迟。如果被调用者寄存器的保存完成,则状态保存状态值SCRS可被设为0以指示附加状态保存已经发生,使得当发生进一步的次安全末尾连锁异常时,其可被跳过。因此状态保存状态值还使在处理抢占时的性能提升。
本申请的主题与一般指定共同待决的申请号为13/368419的美国申请和申请号为1217531.1的英国专利申请中所探讨的主题相关,这两个文档的全部内容被通过引用结合于此。
虽然这里描述了特定实施例,但是应该认识到,本发明不限于此,并且在本发明的范围内可对其作出很多修改和添加。例如,在不脱离本发明的范围的情况下,可作出以下独立权利要求的特征与从属权利要求的特征的各种结合。

Claims (26)

1.一种数据处理装置,包括:
处理电路,所述处理电路用于响应于程序代码而执行数据处理操作,所述处理电路包括用于控制异常处理的异常控制电路;
多个寄存器,所述寄存器用于存储数据,所述寄存器包括寄存器的第一子集和寄存器的第二子集;以及
数据存储设备,所述数据存储设备用于存储数据,所述数据存储设备包括多个区域,所述区域包括安全区域和次安全区域,其中所述安全区域用于存储当在安全域中操作时可被处理电路访问而当在次安全域中操作时不可被处理电路访问的数据;其中:
响应于来自由所述处理电路执行的后台处理的最初异常,所述异常控制电路被配置为在触发所述处理电路执行对应于所述异常的异常处理程序之前,执行来自所述寄存器的第一子集的数据的状态保存,其中所述异常处理程序负责执行来自所述寄存器的第二子集的数据的状态保存;
响应于导致从所述安全域转换到所述次安全域的第一异常,所述异常控制电路被配置为在触发所述处理电路执行所述次安全域中的异常处理程序之前,执行来自所述寄存器的第二子集的数据的附加状态保存,其中所述后台处理由所述处理电路在所述安全域中执行;并且
响应于导致从所述安全域转换到所述次安全域的末尾连锁异常,所述异常控制电路被配置为触发所述处理电路在不执行所述附加状态保存的情况下,执行所述异常处理程序,所述末尾连锁异常在所述第一异常被处理之后并在返回后台处理之前被处理。
2.如权利要求1所述的数据处理装置,其中响应于所述第一异常,所述异常控制电路被配置为在触发所述处理电路执行所述异常处理程序之前,清除所述寄存器的第一子集和所述寄存器的第二子集。
3.如权利要求1和2中的任一项所述的数据处理装置,其中如果所述异常控制电路在触发所述处理电路执行所述异常处理程序之前已执行所述附加状态保存,则所述异常处理程序不执行所述寄存器的第二子集的状态保存。
4.如权利要求1和2中的任一项所述的数据处理装置,其中如果所述异常控制电路在触发所述处理电路执行所述异常处理程序之前已执行所述附加状态保存,则所述异常处理程序也执行所述寄存器的第二子集的状态保存。
5.如上述权利要求中的任一项所述的数据处理装置,其中所述第一异常包括所述最初异常。
6.如上述权利要求中的任一项所述的数据处理装置,其中所述第一异常包括在所述最初异常被处理之后而返回所述后台处理之前被处理的末尾连锁异常。
7.如上述权利要求中的任一项所述的数据处理装置,其中响应于导致从所述次安全域转换到所述安全域的末尾连锁异常,所述异常控制电路被配置为在不恢复在附加状态保存中被保存到所述寄存器的第二子集的数据的情况下,控制所述处理电路触发异常处理程序。
8.如上述权利要求中的任一项所述的数据处理装置,其中当进入导致从所述安全域转换到所述次安全域的新的异常时,所述异常控制电路被配置为基于状态保存状态值来确定是否在触发所述异常处理程序之前执行所述附加状态保存。
9.如权利要求8所述的数据处理装置,其中所述状态保存状态值指示所述附加状态保存是否需要在处理所述次安全域中的末尾连锁异常之前被处理。
10.如权利要求8和9中的任一项所述的数据处理装置,其中所述状态保存状态值指示在停止所述后台处理与进入所述新异常之间是否在所述次安全域中至少有一个异常已被处理。
11.如权利要求10所述的数据处理装置,其中当进入所述新异常时,所述异常控制电路被配置为执行所述附加状态保存,如果:
(a)所述后台处理在所述安全域中被执行;
并且
(b)所述状态保存状态值指示在停止所述后台处理与进入所述新异常之间在所述次安全域中没有异常已经被处理。
12.如权利要求11所述的数据处理装置,其中所述异常控制电路被配置为设置指示所述后台处理是在所述安全域中还是在所述次安全域中被执行的安全性域值。
13.如权利要求8到12中的任一项所述的数据处理装置,其中所述异常控制电路被配置为在进入所述次安全域时将所述状态保存状态值设置为固定值,并在进入所述安全域时将所述状态保存状态值设置为可变值。
14.如权利要求13所述的数据处理装置,其中当从所述次安全域中的异常返回时,所述异常控制电路被配置为检查所述状态保存状态值是否仍具有所述固定值,并且如果所述状态保存状态值不具有所述固定值,则触发错误。
15.如权利要求8到14中的任一项所述的数据处理装置,其中所述状态保存状态值具有可变值;并且
当从所述次安全域中的异常返回时,所述异常控制电路被配置为与所述状态保存状态值无关来控制异常处理。
16.如权利要求8到15中的任一项所述的数据处理装置,其中所述状态保存状态值指示当在末尾连锁异常之间进行切换时,在域之间的最近转换是否是从所述次安全域到所述安全域。
17.如权利要求8到16中的任一项所述的数据处理装置,其中所述寄存器包括用于存储异常返回值的连接寄存器,所述异常返回值用于控制从所述异常处理程序中返回。
18.如权利要求17所述的数据处理装置,其中:
在进入异常时,所述异常控制电路被配置为将所述连接寄存器设置为不对应于有效指令地址的虚拟异常返回地址;
所述异常处理程序包括分支到在所述连接寄存器中设置的地址;并且
响应于分支到所述连接寄存器中所指示的虚拟异常返回地址,所述异常控制电路被配置为在导致所述处理电路返回后台处理之前,执行用于恢复保存在所述状态保存中的数据的状态恢复处理。
19.如权利要求17和18中的任一项所述的数据处理装置,其中所述状态保存状态值被指示在所述虚拟异常返回地址的一部分中。
20.如上述权利要求中的任一项所述的数据处理装置,其中如果在执行所述寄存器的第二子集的附加状态保存时发生具有高于所述第一异常的优先级的抢占异常,则所述异常控制电路被配置为在触发所述处理电路执行所述抢占异常的异常处理程序之前,完成附加状态保存。
21.如权利要求20所述的数据处理装置,其中在完成所述附加状态保存时,所述异常控制电路被配置为设置状态保存状态值以指示所述附加状态保存已被执行。
22.如权利要求21所述的数据处理装置,其中响应于在所述抢占异常之后被执行的导致从所述安全域转换到所述次安全域的末尾连锁异常,如果所述状态保存状态值指示所述附加状态保存先前已被执行,则所述异常控制电路被配置为触发所述处理电路在未执行所述附加状态保存的情况下执行异常处理程序。
23.如上述权利要求中的任一项所述的数据处理装置,其中所述数据存储设备包括多个栈,所述栈包括安全栈和次安全栈。
24.如权利要求23所述的数据处理装置,其中在所述寄存器的第一子集的状态保存和所述寄存器的第二子集的附加状态保存中,所述异常控制电路被配置为当执行所述后台处理时发生所述最初异常时,将数据保存到所述安全栈和所述次安全栈中对应于所述处理电路正在执行的当前域的那个栈。
25.一种数据处理装置,包括:
处理装置,所述处理装置用于响应于程序代码而执行数据处理操作,所述处理装置包括用于控制异常处理的异常控制电路;
多个寄存器装置,所述寄存器装置用于存储数据,所述寄存器装置包括寄存器装置的第一子集和寄存器装置的第二子集;以及
数据存储装置,所述数据存储装置用于存储数据,所述数据存储装置包括多个区域,所述区域包括安全区域和次安全区域,其中所述安全区域用于存储当在安全域中操作时可被处理装置访问而当在次安全域中操作时不可被处理装置访问的数据;其中:
响应于来自由所述处理装置执行的后台处理的最初异常,所述异常控制装置被配置为在触发所述处理装置执行对应于所述异常的异常处理程序之前,执行来自所述寄存器装置的第一子集的数据的状态保存,其中所述异常处理程序负责执行来自所述寄存器装置的第二子集的数据的状态保存;
响应于导致从所述安全域转换到所述次安全域的第一异常,所述异常控制装置被配置为在触发所述处理装置执行所述次安全域中的异常处理程序之前,执行来自所述寄存器装置的第二子集的数据的附加状态保存,其中所述后台处理由所述处理装置在所述安全域中执行;并且
响应于导致从所述安全域转换到所述次安全域的末尾连锁异常,所述异常控制装置被配置为触发所述处理装置在不执行所述附加状态保存的情况下,执行所述异常处理程序,所述末尾连锁异常在所述第一异常被处理之后并在返回后台处理之前被处理。
26.一种用于数据处理装置的数据处理方法,所述数据处理装置包括:处理电路,所述处理电路用于响应于程序代码而执行数据处理操作,所述处理电路包括用于控制异常处理的异常控制电路;多个寄存器,所述寄存器用于存储数据,所述寄存器包括寄存器的第一子集和寄存器的第二子集;以及数据存储设备,所述数据存储设备用于存储数据,所述数据存储设备包括多个区域,所述区域包括安全区域和次安全区域,其中所述安全区域用于存储当在安全域中操作时可被处理电路访问而当在次安全域中操作时不可被处理电路访问的数据;
所述方法包括以下步骤:
响应于来自由所述处理电路执行的后台处理的最初异常,所述异常控制电路在触发所述处理电路执行对应于所述异常的异常处理程序之前,执行来自所述寄存器的第一子集的数据的状态保存,其中所述异常处理程序负责执行来自所述寄存器的第二子集的数据的状态保存;
响应于导致从所述安全域转换到所述次安全域的第一异常,所述异常控制电路在触发所述处理电路执行所述次安全域中的异常处理程序之前,执行来自所述寄存器的第二子集的数据的附加状态保存,其中所述后台处理由所述处理电路在所述安全域中执行;并且
响应于导致从所述安全域转换到所述次安全域的末尾连锁异常,所述异常控制电路触发所述处理电路在不执行所述附加状态保存的情况下,执行所述异常处理程序,所述末尾连锁异常在所述第一异常被处理之后并在返回后台处理之前被处理。
CN201380049898.5A 2012-10-01 2013-08-07 数据处理装置和数据处理方法 Active CN104685508B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB201217531A GB201217531D0 (en) 2012-10-01 2012-10-01 ARMv7-M Asset Protection Proposal
GB1217531.1 2012-10-01
US13/680,298 US9116711B2 (en) 2012-02-08 2012-11-19 Exception handling in a data processing apparatus having a secure domain and a less secure domain
US13/680,298 2012-11-19
PCT/GB2013/052108 WO2014053804A1 (en) 2012-10-01 2013-08-07 Exception handling in a data processing apparatus having a secure domain and a less secure domain

Publications (2)

Publication Number Publication Date
CN104685508A true CN104685508A (zh) 2015-06-03
CN104685508B CN104685508B (zh) 2017-09-29

Family

ID=48903966

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201380049898.5A Active CN104685508B (zh) 2012-10-01 2013-08-07 数据处理装置和数据处理方法

Country Status (8)

Country Link
US (2) US9116711B2 (zh)
EP (1) EP2888692B1 (zh)
JP (1) JP6209611B2 (zh)
KR (1) KR102075372B1 (zh)
CN (1) CN104685508B (zh)
IL (1) IL237282B (zh)
MY (1) MY172572A (zh)
WO (1) WO2014053804A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106778365A (zh) * 2016-12-01 2017-05-31 杭州中天微系统有限公司 实现延时压栈的装置及处理器
CN107273744A (zh) * 2016-03-31 2017-10-20 恩智浦有限公司 电子装置和保护方法
CN108614663A (zh) * 2016-12-09 2018-10-02 北京京存技术有限公司 基于NAND flash的数据处理方法和装置

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
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
KR102218202B1 (ko) * 2014-08-01 2021-02-23 삼성전자주식회사 반도체 장치
KR102327334B1 (ko) * 2014-12-31 2021-11-17 삼성전자주식회사 디스플레이 컨트롤러 및 이를 포함하는 반도체 집적회로 장치
US20160381050A1 (en) 2015-06-26 2016-12-29 Intel Corporation Processors, methods, systems, and instructions to protect shadow stacks
GB2541400B (en) * 2015-08-17 2017-11-15 Advanced Risc Mach Ltd Tracing of exception handling events
US10394556B2 (en) 2015-12-20 2019-08-27 Intel Corporation Hardware apparatuses and methods to switch shadow stack pointers
US10430580B2 (en) 2016-02-04 2019-10-01 Intel Corporation Processor extensions to protect stacks during ring transitions
GB2562102B (en) * 2017-05-05 2019-09-04 Advanced Risc Mach Ltd An apparatus and method for managing use of capabilities
GB2563010B (en) 2017-05-25 2019-12-25 Advanced Risc Mach Ltd An apparatus and method for managing a capability domain
GB2577878B (en) * 2018-10-08 2020-11-11 Advanced Risc Mach Ltd Transition disable indicator
GB2579617B (en) * 2018-12-06 2021-01-27 Advanced Risc Mach Ltd An apparatus and method for handling exception causing events
US11216280B2 (en) * 2019-11-26 2022-01-04 Arm Limited Exception interception
GB2589897B (en) * 2019-12-11 2022-03-23 Advanced Risc Mach Ltd Domain transition disable configuration parameter
GB2589895B (en) 2019-12-11 2022-03-16 Advanced Risc Mach Ltd Intermodal calling branch instruction
GB2589896B (en) * 2019-12-11 2022-07-27 Advanced Risc Mach Ltd An apparatus and method for handling exceptions
GB2592069B (en) * 2020-02-17 2022-04-27 Advanced Risc Mach Ltd Address calculating instruction
US11175926B2 (en) * 2020-04-08 2021-11-16 Microsoft Technology Licensing, Llc Providing exception stack management using stack panic fault exceptions in processor-based devices
US11960730B2 (en) * 2021-06-28 2024-04-16 Western Digital Technologies, Inc. Distributed exception handling in solid state drives

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040139346A1 (en) * 2002-11-18 2004-07-15 Arm Limited Exception handling control in a secure processing system
CN101661440A (zh) * 2008-08-26 2010-03-03 爱特梅尔公司 安全信息处理
US20110225402A1 (en) * 2010-03-15 2011-09-15 Arm Limited Apparatus and method for handling exception events

Family Cites Families (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4177514A (en) 1976-11-12 1979-12-04 General Electric Company Graph architecture information processing system
US4519032A (en) 1982-06-09 1985-05-21 At&T Bell Laboratories Memory management arrangement for microprocessor systems
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
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
AU2003274383A1 (en) 2002-11-18 2004-06-15 Arm Limited Processor switching between secure and non-secure modes
EP1563376B1 (en) * 2002-11-18 2006-04-12 ARM Limited Exception types within 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
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
US20070294675A1 (en) * 2006-06-20 2007-12-20 Transitive Limited Method and apparatus for handling exceptions during binding to native code
US7681000B2 (en) 2006-07-10 2010-03-16 Silverbrook Research Pty Ltd System for protecting sensitive data from user code in register window architecture
KR101419668B1 (ko) 2006-09-06 2014-07-15 실리콘 하이브 비.브이. 데이터 처리회로 및 데이터 처리방법
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
WO2010004242A2 (en) 2008-07-10 2010-01-14 Cambridge Consultants Limited Data processing apparatus, for example using vector pointers
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
GB2482701C (en) 2010-08-11 2018-12-26 Advanced Risc Mach Ltd Illegal mode change handling
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
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
US9477834B2 (en) 2012-02-08 2016-10-25 Arm Limited Maintaining secure data isolated from non-secure access when switching between domains

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040139346A1 (en) * 2002-11-18 2004-07-15 Arm Limited Exception handling control in a secure processing system
CN101661440A (zh) * 2008-08-26 2010-03-03 爱特梅尔公司 安全信息处理
US20110225402A1 (en) * 2010-03-15 2011-09-15 Arm Limited Apparatus and method for handling exception events

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
ARM LIMITED: "《Cortex-M3 Technical Reference Manual r1p1》", 30 December 2006, ARM LIMITED *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107273744A (zh) * 2016-03-31 2017-10-20 恩智浦有限公司 电子装置和保护方法
CN107273744B (zh) * 2016-03-31 2023-07-14 恩智浦有限公司 电子装置和保护方法
CN106778365A (zh) * 2016-12-01 2017-05-31 杭州中天微系统有限公司 实现延时压栈的装置及处理器
CN106778365B (zh) * 2016-12-01 2019-10-18 杭州中天微系统有限公司 实现延时压栈的装置及处理器
CN108614663A (zh) * 2016-12-09 2018-10-02 北京京存技术有限公司 基于NAND flash的数据处理方法和装置
CN108614663B (zh) * 2016-12-09 2021-05-04 北京兆易创新科技股份有限公司 基于NAND flash的数据处理方法和装置

Also Published As

Publication number Publication date
US10083040B2 (en) 2018-09-25
KR102075372B1 (ko) 2020-02-11
MY172572A (en) 2019-12-03
US20150317474A1 (en) 2015-11-05
JP2015530672A (ja) 2015-10-15
IL237282B (en) 2018-04-30
IL237282A0 (en) 2015-04-30
EP2888692A1 (en) 2015-07-01
KR20150065715A (ko) 2015-06-15
JP6209611B2 (ja) 2017-10-04
US20130205125A1 (en) 2013-08-08
US9116711B2 (en) 2015-08-25
CN104685508B (zh) 2017-09-29
EP2888692B1 (en) 2018-12-05
WO2014053804A1 (en) 2014-04-10

Similar Documents

Publication Publication Date Title
CN104685508A (zh) 具有安全域和次安全域的数据处理装置中的异常处理
CN104704503A (zh) 在安全域与次安全域之间进行转换时保护安全数据和程序代码免受非安全访问的数据处理装置和方法
EP2812836B1 (en) Exception handling in a data processing apparatus having a secure domain and a less secure domain
KR102069522B1 (ko) 도메인간 전환시의 불안전한 액세스로부터 분리된 안전한 데이터의 유지
US9202071B2 (en) Exception handling in a data processing apparatus having a secure domain and a less secure domain
EP3308314B1 (en) Secure mode state data access tracking

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