安全模式状态的数据访问追踪的制作方法

文档序号:13809669阅读:364来源:国知局
安全模式状态的数据访问追踪的制作方法

本公开涉及数据处理系统领域。更具体地,本公开涉及可在第一安全模式及在第二安全模式下操作的数据处理系统。



背景技术:

已知提供具有安全模式及非安全模式的数据处理系统,如由arm有限公司设计的支持trustzone架构特征的处理器。在该一种系统内,依赖于在安全模式中执行的处理的状态数据不应在非安全模式下为可访问的(除非明确要求如此)。



技术实现要素:

本公开中至少些实施例提供用于处理数据的设备,设备包括:处理电路,用于在第一安全模式下及在第二安全模式下操作;以及标记电路,用于提供访问追踪标记,当处理电路进入与函数调用关联的第一安全模式时,该访问追踪标记具有第一值,其中该处理电路经配置以在处理电路在与该函数调用关联的该第一安全模式下操作时由该处理电路检测到对预定状态数据进行至少一个类型的第一访问之后,将该访问追踪标记切换至第二值。

本公开中至少些其它实施例提供用于处理数据的方法,该方法包括:在第一安全模式及第二安全模式中的项下执行处理;当处理电路进入与函数调用关联的该第一安全模式时,提供具有第一值的访问追踪标记;以及在处理电路在与该函数调用关联的该第一安全模式下操作时由该处理电路检测到对预定状态数据进行至少一个类型的第一访问之后,将访问追踪标记切换至第二值。

本公开的至少些其它实施例提供储存在有形计算机程序储存介质上的计算机程序,在该储存介质中,计算机程序包括延迟保护程序指令及/或延迟加载程序指令中的至少一个。

本公开的上述及其它目标、特征和优势将在参考附图的说明性实施例的以下详细说明中显而易见。

附图说明

图1示意地图示非安全处理与安全处理之间的函数调用序列,及用于取决于安全模式处理来保护浮点状态数据的关联操作;

图2是流程图,该图示意地示出电路,该标记电路在有从安全模式到非安全模式的函数调用时保存安全浮点访问标记;

图3是流程图,该图示意地示出电路,该标记电路在有从非安全模式到安全模式的函数返回时恢复安全浮点访问标记;

图4a及图4b是流程图,该图示示意地图示可重置安全浮点访问标记的两个示例性替代方法;

图5是流程图,该图示意地图标对标记电路及状态保护电路的浮点访问的硬件响应;

图6是流程图,该图示意地图标延迟保护程序指令,该延迟保护程序指令触发状态保护电路的准备;

图7是流程图,该图示意地图标延迟加载程序指令,该延迟加载程序指令触发浮点状态数据恢复操作及保护标记的清除;

图8示意地图示处理设备,该设备包括标记电路及状态保护电路,以用于支持提供访问追踪标记及保护标记以作为取决于安全模式处理来保护浮点状态数据的部分;以及

图9示意地图示示例性替代实施例,安全浮点访问标记可通过这些实施例响应于不同触发而被重置及设定。

具体实施方式

图1示意地图标响应于函数调用与函数返回连同对访问追踪标记及保护标记关联控制而在非安全模式与安全模式之间进行的处理切换,及浮点寄存器状态数据来往于栈存储器的保存及恢复操作。如图所示,处理以非安全函数fn0开始,此函数对安全函数fn1进行函数调用。在进行此函数调用的时,存在切换离开非安全模式及切换进入安全模式。此举触发将访问追踪标记(安全浮点访问标记(securefloatingpointaccessflag;sfpa))设定至第一值,例如“0”。随后,在安全模式中通过使用函数fn1的处理前进直至此函数fn1对浮点寄存器进行访问。此举由标记电路(标记控制器)检测到,该标记电路将访问追踪标记sfpa从第一值变更至第二值,例如“1”。当访问追踪标记已具有第二值时,对浮点寄存器的随后访问将保持访问追踪标记具有该第二值。

当安全模式函数fn1意欲对非安全函数进行函数调用时,该函数fn1负责执行延迟保护程序指令vlstm以作为其为退出安全模式所作准备中的部分。由处理器的处理电路执行延迟保护指令vlstm具有数个操作。如果访问追踪标记sfpa具有第二值(即被设定在“1”值,该值指示在安全函数fn1处理期间已发生浮点寄存器访问),则准备保护响应并将保护标记lspact设定至值,此值可指示此保护响应已经准备好。保护响应准备包括分配栈存储器内的储存空间,该栈存储器受保护以免于非安全访问,如储存浮点寄存器状态数据需要,则将使用栈存储器。此时并不将浮点寄存器状态数据保存至该栈,而是在栈中保留该数据将占据的空间,且保存针对栈内该分配空间的指针。

如果在执行延迟保护程序指令时,访问追踪标记sfpa具有第一值(即被设定在“0”值,该值指示安全函数fn1没有进行任何浮点访问),则没有与需要保护的安全函数fn1关联的安全浮点状态数据,且相应地不准备保护响应并不设定保护标记lspact(无需在安全栈存储器中分配空间,且不设定指针)。除延迟保护程序指令vlstm的执行的外,硬件通过以下方式响应于从安全模式切换至非安全模式的函数调用:经由推送操作,将访问追踪标记sfpa在当时对于安全函数fn1的值保存至安全函数fn1的安全栈(例如储存在非安全模式下不可访问的存储器区域中)。

在图1的示例中进行从安全函数fn1向非安全函数fn2的函数调用。安全函数fn1的任何安全浮点状态数据最初仍存在于浮点寄存器内。保存此浮点状态数据且清除浮点状态数据默认并未消耗时间及能量。如果非安全函数fn2不进行任何浮点访问,则当继续安全函数fn1时,浮点状态数据将仍在原位,且将由于避免对恢复浮点状态数据的需求而节省更多能量及时间。

然而,如果在lspact标记设定至“1”的同时尝试访问浮点寄存器(例如通过在非安全函数fn2中执行的浮点指令),则安全状态保护电路用于将安全函数fn1的浮点状态数据保存至安全状态存储器内已分配的储存区域,该区域由先前执行的延迟保护指令vlstm所设置(准备),随后在允许非安全函数fn2访问浮点寄存器之前清除浮点寄存器。安全状态保护电路在检测到已经设定保护标记lspact(例如具有“1”值)时执行先前由延迟保护vlstm所准备的保护响应,此设定指示浮点寄存器确实包含取决于由安全函数fn1所作处理的状态数据,且已通过在安全栈内分配空间并保存对所分配空间的指针来为该浮点状态数据准备保护响应,该指针用于保存安全函数fn1的浮点状态数据的推送操作。

当已执行保护响应时,保护标记lspact重置(例如重置为“0”值),因为已经保存并清除安全浮点状态数据,且相应地,在非安全函数fn2处理期间出现的随后浮点访问无须触发针对该安全浮点状态数据的进一步的保护响应。

如图1所图标,非安全函数fn2由执行函数返回而结束,该函数返回使处理返回至安全函数fn1。硬件通过恢复访问追踪标记sfpa值来响应此函数返回,在退出安全函数fn1之后,该值被置于安全栈上。此访问追踪标记sfpa恢复至所继续的安全函数fn1指示安全函数fn1内的先前处理是否已向浮点寄存器执行任何访问,及相应地,当从安全函数fn1进行函数调用时是否存在某些安全浮点状态数据。安全函数fn1在继续时负责执行延迟加载指令vlldm。此举具有图1中以假码图示的操作。更具体地,如果访问追踪标记sfpa具有第二值(例如被设定至“1”),则针对是否仍设定保护标记(例如lspact为“1”)进行决定。如果保护标记仍被设定,则此举指示自安全函数fn1执行vlstm指令以来还未触发保护响应。如果是此情况,则无需对安全浮点状态数据进行恢复,因为安全浮点状态数据将仍存在于浮点寄存器内,因为在介入处理期间还未对该浮动寄存器进行尝试访问。保护标记将重置(lspact=0)且无需执行进一步的处理。

反之,如果在执行延迟加载程序指令vlldm时访问追踪标记具有第二值(例如sfpa=“1”)且保护标记未被设定(例如lspact=“0”),则此举指示当退出安全函数fn1时有安全浮点状态数据就位,且在执行vlstm之后及在执行vlldm指令之前都触发了保护响应。相应地,此环境中的vlldm程序指令触发恢复响应,该恢复响应从安全栈(弹出)内恢复安全浮点状态数据,该安全栈被保存的指针值指示为浮点寄存器弹出操作。

以此方式,将可见,当处理电路进入与函数调用关联的安全模式(从非安全函数fn0向安全函数fn1进行的切换)时,标记电路提供具有第一值的访问追踪标记sfpa(例如sfpa=“0”)。随后,标记电路用于监测在安全函数fn1处理期间发生的对浮点寄存器的访问,且如果发生浮点寄存器访问则监测访问追踪标记向第二值(sfpa=“0”)的切换。被追踪的浮点寄存器访问可采用对彼等浮点寄存器进行任何读取或写入访问的形式。某类型的访问无需切换访问追踪标记值即可执行,因为该等访问不产生某一种浮点状态数据,该浮点状态数据包含任何取决于具有可能有损潜在安全的方式的安全模式处理的信息。因此,被追踪的访问具有至少一个类型。以此方式提供的访问追踪标记允许诸如延迟保护及延迟加载的机制,该等机制先前描述为经实施以便向状态数据提供保护,而不会在不需要此保护时导致无谓的时间及能量额外消耗。将理解,图1示例已经结合状态数据进行描述,该状态数据即为浮点寄存器数据。可能相同机制可用于保护与安全模式处理关联的其它形式的状态数据,如simd寄存器数据。

本领域技术人员将理解,尽管图1表示简单的函数调用树,但本发明可用于在复杂函数调用树中有效保护安全状态。具体而言,安全函数fn1中的处理可分为多个函数(可能在不同时间被编译),使得处理对非安全函数fn2的函数调用的编译程序可能无法察觉自fn1开始时进入安全状态以来发生的全部处理。因此,编译程序往往难以或不可能知道fp寄存器是否已被安全码访问。

图2是流程图,该图示意地示出电路在保存访问追踪标记sfpa时的操作。在步骤100中,处理等待直至检测到将系统从安全模式切换至非安全模式的函数调用。当检测到该一种函数调用时,处理前进至步骤102,在该步骤中,将访问追踪标记sfpa当前值保持至安全栈存储器,随后,处理返回步骤100以等待下安全向非安全函数的调用。

图3是流程图,该图示意地示出电路在恢复访问追踪标记时的操作。在步骤104中,处理等待直至检测到从非安全模式向安全模式的函数返回。当检测到该一种返回时,步骤106用于经由弹出操作从安全栈恢复访问追踪标记sfpa。

其它示例性实施例也是可能的,如其中由在vlldm指令之后执行的单独指令执行栈空间解除分配,且vlldm采用寄存器参数,该参数规定可能已保存浮点状态位置。

图4a示出电路可如何重置访问追踪标记的第一示例。在步骤108中,标记电路等待直至检测到从非安全模式到安全模式的函数调用。当检测到该一种函数调用时,步骤110用于将访问追踪标记sfpa重置为第一值(例如sfpa=“0”)。随后,处理返回步骤108。此类访问追踪标记重置可例如与以下机制关联使用:该机制在发生对安全浮点数据的第一随后访问时(无论处理电路在当时是处于安全模式还是非安全模式)或当处理电路在安全模式中操作时对安全浮点状态数据发生第一访问时,将访问追踪标记(例如sfpa=“1”)设定为第二值。访问追踪标记可有多一种不同的方式被控制以经设定及重置。这种控制的目的是访问追踪标记在对安全模式处理的调用之后具有第一值,直至在安全处理期间发生对浮点状态数据的第一访问,在此之后,访问追踪标记设定为第二值。

图4b是流程图,该图示出电路可如何控制访问追踪标记重置的第二示例。在步骤112中,处理等待直至从安全模式向非安全模式进行函数调用,或从安全模式向非安全模式进行函数返回。当检测到该一种函数调用或函数返回时,步骤114用于将访问追踪标记设定至第一值(例如sfpa=“0”)。该一种重置机制可关联机制使用,该机制在检测到对浮点状态数据的第一访问之后设定访问追踪标记,该第一访问在系统随后在安全模式下操作时发生。

图5是流程图,该图示意地图示对尝试访问浮点状态数据的硬件响应(由标记电路及安全状态保护电路实施)。在步骤116中,处理等待直至尝试对一个或多个浮点寄存器进行访问,也即检测到处理电路对预定状态数据进行至少一个类型的访问的示例。当检测到该一种尝试访问时,步骤118决定当前是否设定保护标记lspact(例如lspact=“1”)。如果设定保护标记,则步骤120用于将当前浮点寄存器内容储存至安全栈内已分配的储存区域,如该已分配的储存区域的指针地址所指示。储存区域的分配及对该已分配储存区域的适当指针的产生先前已通过执行延迟保护程序指令而设置(准备),如先前所述。

在步骤120之后,步骤122用于清除现已保存的浮点寄存器。随后,步骤124用于重置保护标记(例如设定lspact=“0”)。此指示所准备的任何保护操作现已被实施,且因此,如果对安全浮点状态数据进行最后的访问尝试,则无需重复该操作。

在步骤124之后,或如果步骤118中的决定是未设定保护标记,则处理前进至步骤126,在步骤126中针对处理器当前是否在安全模式中操作做出决定。如果处理器在安全模式下操作,则步骤128决定访问追踪标记sfpa当前是否具有第一值(例如sfpa=“0”)。如果访问追踪标记具有第一值,则此指示在步骤116中检测的访问是在安全模式处理期间发生的第一浮点访问,且因此,步骤130用于将浮点配置(例如舍入模式、浮点异常处理等等)设定至默认配置,且将访问追踪标记切换至第二值(例如sfpa=“1”)。在步骤130之后,或在步骤126及128之后,如果该等步骤决定为否定,则处理前进至步骤132,在步骤132中,允许步骤116中尝试的浮点访问。随后,处理返回步骤116,将等待对浮点寄存器访问的下一次尝试。

图6是流程图,该图示意地图标延迟储存程序指令(延迟保护程序指令)的执行如何触发状态保护电路的准备以执行保护响应(如需要)。在步骤134中,检测到延迟储存程序指令vlstm的译码。随后,步骤136决定访问追踪标记是否具有第二值(例如sfpa=“1”)。如果访问追踪标记不具有第二值,则没有安全浮点状态数据需要被保护,且因此,无需进行准备,而处理返回步骤134。然而,如果访问追踪标记具有第二值,则处理前进至步骤138,在步骤138中,设定保护标记(保护被指示为待命,而尚未被触发)。随后,如果此浮点寄存器状态数据随后被检测到是必需的,步骤140用于分配安全栈中的空间以用于待保存的浮点寄存器状态数据(或vlstm指令的参数中所规定的其它数据)。此外,设置对安全栈内该分配空间的指针,随后处理返回步骤134以等待下一延迟储存程序指令。

其它示例性实施例也是可能的,如其中vlstm指令用于触发状态保护电路以立刻推送安全浮点状态数据的实施例。另选项是在vlstm指令之前执行的单独指令用于分配栈空间,且vlstm采用规定分配空间的位置的寄存器参数。

图7示意地图标对延迟加载程序指令执行的响应。在步骤142中,延迟加载程序指令(lazy-loadprograminstruction;vlldm)被解碼。随后,步骤144决定访问追踪标记sfpa是否具有第二值(例如sfpa=“1”)。如果访问标记不具有第二值,则没有需要为其准备保护的安全浮点寄存器状态数据,且因此,安全浮点寄存器状态数据可或可能未经受推送操作至安全栈。由此,如果访问追踪标记具有第一值,则处理从步骤144返回步骤142以等待下延迟加载指令。如果访问追踪标记具有步骤144所决定的第二值,则步骤146决定是否仍设定保护标记(例如lspact=“1”)。如果仍设定保护标记,则此指示在先前处理期间为安全浮点状态数据触发保护响应,且因此,步骤148用于对安全浮点状态数据执行从栈到浮点寄存器的恢复操作(弹出)并解除分配对应栈空间。已分配储存区域也解除分配以释放其空间。如果步骤146的决定是仍设定保护标记(例如lspact=“1”),则设置并准备保护但不触发保护,且因此无需恢复操作,而处理前进至步骤150,在该步骤中,重置保护标记(例如lspact=“0”)。

在某些示例性实施例中,可提供延迟无保护程序指令,使得在执行该指令时,当处理电路在安全模式下操作且仍设定保护标记(例如lspact=“1”)时,使保护响应禁用。

图8示意地图标数据处理系统152,该数据处理系统包括连接至主存储器156的处理器154。处理器154自主存储器156检索程序指令及数据。程序指令由指令撷取单元157撷取,且随后被指令译码程序158译码,该指令译码程序产生控制信号以控制将执行的彼等程序指令所规定的处理操作。执行的处理操作可包括例如整数处理操作,该整数处理操作通过使用通用寄存器组160内储存的数据值来执行,且由诸如乘法器162、移位器164及加法器166的处理电路操作。程序指令也可包括浮动点程序指令,该等指令在浮点数据值储存在浮点寄存器168内并由浮点执行电路170执行时执行。浮点执行电路170由储存在浮点配置寄存器172内的浮点配置来配置。当在处理的安全模式中进行第一浮点访问时,此浮点配置(例如舍入模式、异常特性等等)被设定至默认值。默认配置可为固线式或先经程序化。浮点配置寄存器172内储存的浮点配置可同时被保护并恢复,因为浮点状态数据如先前论述而被保护并恢复。除了浮点寄存器自身内容的外,浮点配置还可属于安全浮点状态数据。

与浮点电路关联的是标记控制器174(标记电路)及安全状态保护电路176。该等电路具有先前描述的函数。电路保持及响应于访问追踪标记sfpa及保护标记lspact,如先前所述。此外,为栈存储器178内区域的指针提供储存,该储存器在运行时间经分配(在主存储器156内)以储存安全浮点状态数据(如果必需的话)。

图9示意地图示不同实施例的操作及该等实施例可如何用于将访问追踪标记设定为第一值并将访问追踪标记设定为第二值。在示例(a)中,当由于函数调用而从非安全模式向安全模式进行切换时,访问追踪标记被设定至第一值。随后,当在安全模式中进行(至少一个类别的)第一浮点访问时,访问追踪标记被设定为第二值。在示例(b)中,当作为函数调用而从非安全模式向安全模式进行切换时,访问追踪标记再次被设定至第一值。无论处理器是处于安全模式还是非安全模式,当发生第一随后浮点访问时,访问追踪标记从第一值切换到第二值。在示例(c)中,当作为函数调用或函数返回而从安全模式向非安全模式进行切换时,访问追踪标记被设定至第一值。随后,当处理器在安全模式中操作时,当检测到第一浮点访问时,访问追踪标记切换至第二值。将可见,全部示例(a)、(b)、(c)皆具有效果,也即访问追踪标记具有第一值直到检测到安全状态中的第一浮点访问为止。

尽管说明性实施例已在本案中通过参考附图进行详细描述,但将理解,本发明并非限定于彼等精确实施例,且本领域技术人员在不背离所附申请专利范围的范畴及精神的情况下可在这些实施例中实现更改、增添及修改。例如,所附权利要求的特征可与独立权利要求的特征进行组合。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1