用于控制将指令分配到指令缓存存储区的设备和方法与流程

文档序号:23067953发布日期:2020-11-25 17:55阅读:129来源:国知局
用于控制将指令分配到指令缓存存储区的设备和方法与流程

本公开涉及一种用于控制将指令分配到指令缓存存储区的技术。



背景技术:

数据处理设备可以支持指令的推测性执行,其中在知道是否实际上需要执行指令之前,推测性地执行指令。例如,处理设备可以具有用于预测分支指令的结果的分支预测器,使得可以在知道分支的实际结果是什么之前推测性地提取、解码和执行后续指令。如果预测正确,则可以节省执行,因为与仅在实际知道分支结果后才提取后续指令的情况相比,能够更快地执行后续指令。

最近已经发现,在某些情况下,在指令的推测性执行期间将指令分配到缓存存储区可能打开攻击寻求识别敏感数据的源。特别地,近来已经发布了有关基于推测的缓存定时边信道攻击的信息,其中多种技术可以被使用来使得可以滥用缓存定时分析以使信息从指令的错误推测执行中泄漏出。



技术实现要素:

在一个示例配置中,提供了一种设备,包括:处理电路,该处理电路用于执行指令;提取电路,该提取电路用于从存储器提取指令以由处理电路执行;指令缓存存储区,该指令缓存存储区用于存储由提取电路从存储器提取的指令;以及缓存控制电路,该缓存控制电路响应于提取电路从被确定为指令流改变指令的目标地址的存储器地址提取目标指令,至少在存储器地址在特定地址范围内时,阻止将所提取的目标指令分配到指令缓存存储区,除非所提取的目标指令是至少一种特定类型的指令。

在另一示例配置中,提供了一种控制将指令分配到指令缓存存储区的方法,该指令缓存存储区用于存储从存储器提取的以由处理电路执行的指令,该方法包括:响应于从被确定为指令流改变指令的目标地址的存储器地址提取目标指令,至少在存储器地址在特定地址范围内时,阻止将所提取的目标指令分配到指令缓存存储区,除非所提取的目标指令是至少一种特定类型的指令。

在又一示例配置中,提供了一种设备,包括:处理装置,该处理装置用于执行指令;提取装置,该提取装置用于从存储器提取指令以由处理装置执行;指令缓存存储装置,该指令缓存存储装置用于存储由提取装置从存储器提取的指令;以及缓存控制装置,该缓存控制装置响应于提取装置从被确定为指令流改变指令的目标地址的存储器地址提取目标指令,至少在存储器地址在特定地址范围内时,阻止将所提取的目标指令分配到指令缓存存储装置,除非所提取的目标指令是至少一种特定类型的指令。

附图说明

将参考附图中所示的示例,仅通过例示的方式进一步描述本技术,其中:

图1示意性示出了根据一个示例的数据处理设备;

图2a示意性示出了根据一个示例实现方式的特定类型的指令如何可以被用来指示被确定为分支指令的目标地址的存储器地址是合法目标地址,而图2b示出了当分支指令的目标地址识别出特定类型指令之外的指令时,其如何指示目标地址不是合法的目标地址;

图2c是示出了在一个示例实现方式中实现的分支检查过程的流程图;

图3更详细地示出了根据一个示例的在图1的1级指令缓存内提供的组件;以及

图4是示出了在一个示例实现方式中的图3的指令缓存的操作的流程图。

具体实施方式

最近已经发布了有关基于推测的缓存定时边信道攻击的信息,其中多种技术可以被使用来使得可以滥用缓存定时分析以使信息从指令的错误推测执行中泄漏出。缓存定时边信道的基本原理是:可以通过测量访问缓存中先前已有条目所花费的时间或通过测量访问已分配条目的时间,来确定到缓存的分配的模式,尤其是哪些缓存集已用于分配。这于是可以使用来确定哪些地址已分配到缓存中。基于推测的缓存定时边信道的新颖之处在于其对推测性存储器读取的使用。推测性存储器读取是典型的高级微处理器和实现高性能的总体功能的一部分。

通过对架构上未解析的分支(或程序流中的其他改变)之外的可缓存位置执行第一推测性存储器读取,该读取的结果本身可以用于形成其他推测性存储器读取的地址。这些推测性读取导致向缓存中分配条目,这些条目的地址指示第一推测性读取的值。如果非受信代码能够以如下方式控制推测:其导致对该非受信代码原本无法访问的位置的第一推测性读取,则这可能成为可利用的边信道。特别地,非受信代码可以测量出到缓存的第二推测性分配和后续推测性分配的效果。

尽管上面提到的各种推测性读取操作都可能与数据值有关,并且因此可能导致数据被分配到数据缓存中,但是已经意识到,有可能与用于存储要由处理电路执行的指令的指令缓存存储区有关地采用类似的技术。例如,虽然上面提到的第一推测性存储器读取仍可以用于获得分配到数据缓存的敏感数据值,但是该敏感数据然后可以用于形成要提取的指令的地址,例如,通过用于确定分支指令的目标地址。因此,在这种情况下,进一步的推测性存储器读取实际上是关于在从敏感数据得出的目标地址处找到的指令的读取,然后将这些指令分配到指令缓存中。在这种情况下,攻击者于是可能会寻求针对指令缓存执行缓存定时边信道攻击。

本文描述的技术旨在提高指令缓存存储区对此种攻击的弹性。

在一个示例配置中,提供了一种设备,该设备具有用于执行指令的处理电路、用于从存储器提取指令以由处理电路执行的提取电路、以及用于存储由提取电路从存储器提取的指令的指令缓存存储区。假设所提取的指令来自存储器中被认为是可缓存的地址区域,则通常这些指令将被缓存在指令缓存存储区内,以便改善其后对这些指令的访问时间。然而,至少当存储器地址在特定地址范围内时,与指令缓存存储区相关联地提供的缓存控制电路被布置为关于分配到指令缓存存储区的指令更具选择性。特别地,响应于提取电路从被确定为指令流改变指令的目标地址的存储器地址提取目标指令,缓存控制电路在允许该目标指令被缓存之前执行附加检查。特别地,缓存器控制电路被布置为阻止将所提取的目标指令分配到指令缓存存储中,除非所提取的目标指令是至少一种特定类型的指令。因此,仅当所提取的目标指令符合一种或多种预期类型时,才允许将其分配到指令缓存存储区中。

由于前面所述攻击的性质(即,从敏感数据得出地址),所以攻击者不太可能能够引起目标地址被生成,该目标地址将标识特定类型的指令,并且因此在采用上述方法时,很可能由于这种攻击机制而提取的指令将不会被分配到指令缓存中,因此抑制了对指令缓存执行基于推测的缓存定时边信道攻击的能力。

尽管上述技术可以限于某些情况,尤其是其中存储器地址在特定地址范围内的情况,但是在一个实现方式中,不论从中提取目标指令的存储器地址如何,缓存控制电路都可以被布置为阻止将所提取的目标指令分配到指令缓存存储,除非所提取的目标指令是前面提到的至少一种特定类型的指令。这提供了一种特别鲁棒的解决方案,因为无论从中提取目标指令的存储器地址如何,都应用相同的机制。

在一个示例实现方式中,处理电路被布置为执行软件,该软件被配置为在作为指令流改变指令的合法目标地址的每个存储器地址处使用所述至少一种特定类型的指令。因此,在此实现方式中,软件将被布置成使得可以经由指令流改变指令而被分支出的各种例程以特定类型的指令开始。这提供了一种用于检查指令流改变指令的目标地址是合法目标地址的机制。极有可能的是,当前面提到的类型的攻击被策动以寻求从敏感数据得出的地址中提取指令时,目标地址所标识的指令将不是特定的指令类型,因此将不会是指令流改变指令的合法目标地址。

尽管这将后续通过处理电路所采用的机制来检测以用于管理推测性执行,并且纠正措施被采取以将处理电路恢复到推测性执行之前的状态,但是如果没有上述技术,这些指令可能仍会分配到指令缓存,并且因此对于后续策动的任何缓存定时边信道分析,这些指令仍将存在。然而,通过使用上述技术,这些指令将不会被分配到指令缓存存储区中,并且因此这将抑制执行这种缓存定时侧信道分析的能力。

作为指令流改变指令的合法目标地址的至少一种特定类型的指令可以采取多种形式。然而,在一个实现方式中,特定类型的指令包括虚设指令,该虚设指令的目的是表明由指令流改变指令使用来提取该虚设指令的目标地址是合法目标地址。

处理电路可以被布置成以多种方式应对此虚设指令,但是在一个实现方式中,处理电路被布置成通过执行空操作(no-op)来处理该虚设指令。因此,虚设指令没有任何有用的处理目的,而仅仅是用来表明指令流改变指令的目标地址是合法的。在一个特定实现方式中,此虚设指令被称为着陆场(landingpad)指令,其是这样一种指令,即如果为分支得出的目标地址是合法的,则期望该分支在该指令处着陆。

从以上讨论中,将认识到,当目标地址是从通过加载指令的错误推测而获得的数据中得到时,每当所提取的目标指令不是所述至少一种特定类型的指令时,缓存控制电路将阻止将所提取的目标指令分配到指令缓存中,从而抑制了执行针对指令缓存存储区而执行的缓存定时边信道攻击。加载指令的错误推测执行可能例如是由于前面提及的第一推测性存储器读取针对架构上未解析的分支(或程序流中的其他改变)之外的可缓存位置而执行。例如,当非受信软件将数据值传递到受信任软件以用作受信任软件将要访问的阵列的偏移时,可能会出现这种情况。软件代码可以包括边界检查指令形式的指令流改变指令,使得在从非受信软件传递的数据值得出的地址处执行的读取仅在通过了边界检查操作的情况下才被执行。然而,由于推测,读取操作可能会在边界检查操作的结果已知之前执行,并且可能会使访问的数据存储到数据缓存中。

在本文所述的与指令缓存有关的技术的上下文中,所关注的情况是:不应该被非受信代码访问的数据然后被用于生成指令流改变指令的目标地址,并且因此导致指令从被分配到指令缓存的目标地址中提取。如果此类指令被分配到指令缓存中,则稍后可以关于指令执行时间执行时序分析,以计算出由于推测执行所做的分配而从指令缓存中逐出了哪些缓存行,这使能地址信息能够被推导出,于是该地址信息可以被用来寻求确定由原始推测性存储器读取操作获得的敏感数据值。

然而,不太可能的是:在该过程中,从敏感数据生成的目标地址将标识之前提到的特定类型的指令,并且因此,通过使用本文所述的技术,很可能这些提取的指令将不被分配到缓存,从而抑制了缓存定时边信道攻击的执行。

还应注意,当分支预测电路从错误预测中获得目标地址时,每当所提取的目标指令不是所述至少一种特定类型的目标指令时,缓存控制电路将阻止将所提取的目标指令分配到指令缓存,从而抑制了执行针对指令缓存存储区而执行的缓存定时边信道攻击。在错误预测的情况下,目标地址很可能与存储至少一种特定类型指令的地址不匹配,因此将不会发生到指令缓存的分配。这对于抑制执行先前类型的攻击的能力也非常有用。特别地,可以用来寻求执行此攻击的另一种机制被称为攻击的分支目标注入变体。这种攻击利用分支预测电路,并且特别地寻求使用非受信代码来训练特定的分支预测机制,从而影响由可受信任代码做出的分支预测。特别地,分支预测机制可以使用先前分支的历史来推测指令流的改变。所生成的推测可能需要花费相当长的时间才能解决。这种解决方案中的延迟可能导致执行推测性存储器访问的过程,从而导致分配到缓存中。

在一些实现方式中,用于驱动推测的先前分支的历史未通过处理器所在的异常级别来过滤,因此,在一个异常级别运行的代码可能以一种导致其他异常级别(或其他上下文)执行推测性存储器访问的方式训练分支预测器。然后,这可以用于通过使较低的异常级别训练分支预测器来模拟基于推测的缓存定时边信道攻击,以影响较高异常级别的推测性指令流,或在不同的上下文中,读取在较低的异常级别原本不可访问的数据,并额外地基于该数据推测地将项目分配到缓存中。然后,以较低的异常级别运行的代码可以检查缓存分配的影响,因此利用缓存定时边信道。

攻击的此种分支目标注入变体可以用于基于敏感数据寻求生成分支指令的目标地址,从而寻求使得分配到指令缓存中。然而,上述机制将倾向于抑制这种攻击,因为以该方式生成的目标地址所标识的指令不太可能是先前提到的特定类型,因此将不会分配到指令缓存中。

指令流改变指令可以采用多种形式,并且实际上可以是引起指令流改变的任何指令,即,用作提取地址的指令地址的非增量调整。然而,在一个示例中,指令流改变指令是分支指令。

应用了上述技术的指令缓存存储区可以采用多种形式。例如,它可以是仅用于缓存指令的专用缓存存储区,诸如1级指令缓存。然而,可替代地或另外地,这些技术可以应用于其他类型的缓存存储区。例如,指令缓存存储区可以是用于存储指令以及在执行指令时由处理电路操纵的数据值的缓存存储区。

现在将参考附图描述具体示例。

图1示意性示出了具有包括多个管线阶段的处理管线的数据处理设备2的示例。管线包括分支预测器4,该分支预测器4用于预测分支指令的结果并生成要提取的指令的一系列提取地址。提取阶段6从指令缓存8中提取由提取地址标识的指令。解码阶段10解码所提取的指令以生成用于控制管线的后续阶段的控制信息。重命名阶段12执行寄存器重命名,以将由指令标识的架构寄存器指定符映射到标识在硬件中提供的寄存器14的物理寄存器指定符。寄存器重命名对于支持乱序执行很有用,因为这可以通过将指令映射到硬件寄存器文件中的不同物理寄存器来消除指定相同架构寄存器的指令之间的危害,从而增加了指令可以以与从缓存8中提取指令的指令程序顺序不同的顺序被执行的可能性,这可以通过允许在较早的指令等待操作数变为可用的同时执行后一条指令来提高性能。在分支错误预测的情况下,将架构寄存器映射到不同物理寄存器的能力还可以促进架构状态的回滚。发布阶段16将等待执行的指令排队,直到用于处理这些指令的所需操作数在寄存器14中可用为止。执行阶段18执行指令以执行相应的处理操作。写回阶段20将执行的指令的结果写回到寄存器14。

执行阶段18可以包括多个执行单元,诸如用于评估分支指令是否已经被正确预测的分支单元21、用于执行算术或逻辑运算的算术逻辑单元(alu)22、用于使用浮点操作数执行运算的浮点单元24、和用于执行将数据从存储器系统加载到寄存器14的加载操作或用于将数据从寄存器14存储到存储器系统的存储操作的加载/存储单元26。在该示例中,存储器系统包括1级指令缓存8、1级数据缓存30、在数据和指令之间共享的2级缓存32和主存储器34,但是将意识到,这仅是可能的存储器层次的一个示例,并且其他实现方式可以具有其他缓存级或不同的布置。加载/存储单元26可以使用转换后备缓冲器36,而提取单元6可以使用转换后备缓冲器37以将由管线生成的虚拟地址映射到标识存储器系统内的位置的物理地址。应当理解,图1所示的管线仅仅是一个示例,其他示例可以具有不同组的管线阶段或执行单元。例如,顺序处理器可能没有重命名阶段12。

如图1所示的此设备可以用于执行指令的推测性执行。在实际上知道这些指令的输入是否正确或者这些指令是否需要完全执行之前,由处理电路进行的指令的推测性执行可以在提供高处理器性能方面是非常有益的。然而,最近已经认识到,如果这种推测导致存储器访问被推测地执行,则即使在推测性指令已被解析为错误预测或不正确推测且推测性重执行指令的架构影响被逆转后,由推测性存储器访问触发的到缓存的分配可能仍然可见。然后,这可以允许后续执行的代码通过使用缓存定时边信道来调查先前代码加载了哪些数据。缓存定时边信道背后的基本原理是:可以通过测量访问以前已在缓存中的条目所花费的时间、或通过测量访问已分配条目的时间,来确定到缓存的分配模式,尤其是哪些缓存集已经用于分配。然后这可以用来确定哪些地址已分配到该缓存中。

最近已经提出了使用推测性存储器读取的基于推测的缓存定时边信道。推测性存储器读取通常是高级微处理器或实现非常高性能的总体功能的一部分。通过对架构上未解析的分支(或程序流中的其他改变)之外的可缓存位置执行推测性存储器读取,并进一步使用这些读取结果本身形成其他推测性存储器读取的地址,这些推测性读取导致条目(其地址指示第一推测性读取的值)分配到缓存。如果非受信代码能够以如下方式控制推测:其导致对该非受信任代码原本无法访问的位置的第一推测性读取,但是非受信代码可以测量缓存内的第二推测性分配的效果,则这可能成为可利用的边信道。

对于任何形式的管理软件,非受信软件通常会将要用作偏移的数据值传递到将由受信任软件访问的阵列或类似结构中。例如,一应用(非受信的)可以基于文件描述符id询问有关打开文件的信息。当然,管理软件会在使用偏移之前检查偏移是否在合适的范围内,因此此范例的软件可能是使用以下形式编写的:

在调制解调器微处理器中,处理器实现方式常常可能在执行与untrusted_offset_from_user(来自_用户_非受信_偏移)范围检查(由第7行暗示)相关联的分支之前,推测地执行数据访问(由以上代码的第9行暗示)以建立值。以管理级别运行该代码的处理器(诸如os内核或超级管理器)可以从该管理级别可访问的普通存储器中的任何位置推测地加载,这由非受信软件传递的untrusted_offset_from_user的超范围的值确定。这在架构上不是问题,因为如果推测不正确,那么加载的值将被硬件丢弃。

然而,高级处理器可以使用已推测地加载的值进行进一步推测。基于推测的缓存定时边信道利用了此进一步推测。例如,前面的示例可以扩展为以下形式:

在此示例中,“value(值)”(其是使用从与untrusted_offset_from_user组合的arr1->data(第10行)计算出的地址从存储器加载的)然后用作进一步存储器访问的基础(第13行)。因此,value2的推测性加载来自从为value推测地加载的数据得出的地址。如果处理器对value2的推测性加载引起到缓存的分配,则可以使用标准缓存定时边信道来推断此加载的部分地址。由于该地址取决于value中的数据,因此可以使用边信道来推断value的部分数据。通过将此方法应用于value的不同位,(在许多推测性执行中)可以确定value的全部数据。因此,非受信软件可以通过为untrusted_offset_from_user提供超范围的量来访问管理软件可访问的任何位置,如此,非受信软件可以使用此方法来恢复管理软件可访问的任何存储器的值。

调制解调器处理器具有多种不同类型的缓存,包括指令缓存、数据缓存和分支预测缓存。如果这些缓存中的条目分配由已基于非受信输入加载的一些数据的任何部分的值确定,则原则上可以激发此边信道。尽管以上给出的示例以在通过第一推测性数据加载操作获得的敏感数据(“value”)得出的地址上的额外的数据加载操作形式考虑了进一步推测,但是该技术也可以应用于如下情况:其他推测性存储器访问是从分支操作的目标地址提取指令的提取操作;目标地址是参考初始数据加载操作所加载的敏感数据而得出的。攻击者于是可能基于指令执行时间发起缓存定时分析,以寻求确立推测性分配已从指令缓存中逐出了哪些缓存行,从而获取有关地址的信息,目的是得出敏感数据。本文所述的技术旨在使指令缓存对于基于此种行动的缓存定时分析攻击更鲁棒。

根据本文描述的技术,与1级指令缓存8相关联的缓存控制电路被布置为利用用于识别分支指令的合法目标地址的软件机制,以选择性地抑制将指令分配到指令缓存中。特别地,在一个示例实现方式中,如图2a和2b所示,软件可以被编写成使得作为分支指令的合法目标的每个软件例程均以特定类型的指令开始,在图2a中将其称为作为着陆场指令。因此,如果为分支指令确定的目标地址是包含着陆场指令的存储器地址,则将确定该目标地址为有效目标地址。然而,相反地,如果为分支指令确定的目标地址是包含任何其他类型的指令的存储器地址,例如图2b的示例中的加载指令,则将确定该目标地址不是分支指令的合法目标地址。

如图2c所示,处理电路可以实施分支检查操作以检查分支指令的目标地址,从而阻止执行分支指令分支到的任何代码,其中该代码不是以着陆场指令开始的。特别地,如图2c所示,处理电路在步骤100确定是否进行了分支,以及当确定进行了分支(即,指令流改变指令的执行已经导致提取地址不连续改变到所确定的目标地址)时,然后过程进行到步骤105,在步骤105确定目标地址处的指令是否为着陆场指令。如果不是,则过程进行到步骤110,在步骤110阻止分支到的代码的执行。这可以通过多种方式来实现,但是在一个示例实现方式中,当处理电路开始在分支的目标处执行代码时,出现了例外。因此,考虑图2b的示例,当处理电路到达开始执行加载指令的点时,将采取例外处理,并且将不执行以加载指令开头的代码。

然而,如果在步骤105处确定目标地址处的指令是着陆场指令,则在步骤115处,处理器将继续执行已被分支到的代码。

处理器处理着陆场指令所采取的步骤可以根据实现方式而变化。然而,在一个特定的实现方式中,着陆场指令实际上是虚设指令,除了表明目标地址是分支的合法目标地址外,它不执行任何有用的处理。因此,在遇到着陆场指令时,处理电路将执行空操作(no-op),然后处理将继续该序列中的下一条指令,在图2a的示例中,这是加载指令。尽管上述对着陆场指令的使用可以阻止在意外的分支目标处执行代码,并且因此例如解决了与执行编写糟糕的代码相关联的或由寻求分支到非法目标地址的攻击者导致的代码执行的问题,然而由于代码的推测性执行,所以可能分支目标地址处的指令缓存在指令缓存中。然而,根据本文描述的技术,与1级指令缓存相关联的缓存控制电路能够选择性地抑制将指令分配到指令缓存中,并且特别是当这些指令是在分支指令的目标地址处获取时并且不是特定指令类型(在图2a的示例中,如果它们不是着陆场指令)时,将阻止将指令分配到指令缓存中。

图3更详细地示出了根据一种实现方式的在1级指令缓存8内提供的组件。该指令缓存包括用于存储指令的缓存行的普通指令缓存存储区155,并且具有用于控制将指令分配到指令缓存区155中以及用于在指令缓存存储区155内执行查找操作的缓存控制电路150。

因此,当提取电路6向1级指令缓存8发布提取地址时,缓存器控制电路150可以在指令缓存存储区155内执行查找,以确定所需的指令是否在缓存内。如果是,则该指令可以直接返回到提取电路,而如果不是,则缓存控制电路150通常将发起向2级缓存32传输请求,以便寻求获得所需的指令。通常,将从2级缓存32/存储器34返回缓存行的有价值的指令,然后除了将所需的指令返回到提取电路6之外,将该缓存行分配到缓存存储区155。然而,如将参考图4的流程图所讨论的,可以在某些情况下修改此行为,以选择性地抑制将指令分配到指令缓存存储区155中。

特别地,在步骤200,等待来自提取电路6的新提取请求。一旦接收到提取请求,则在步骤205,缓存控制电路在缓存存储区155中执行查找。然后在步骤210确定是否已经检测到命中,如果是,则在步骤215将所请求的指令返回到提取电路6。

然而,如果尚未检测到命中,则在步骤220,缓存控制电路150发起从较低级的缓存/主存储器检索包含指令的缓存行。

一旦已经检索到缓存行,则在步骤225,缓存控制电路150确定提取请求是否将该地址指示为分支指令的目标地址。这可以以多种方式指示,但是在一个示例中,如图3所示,可以将某种形式的控制标志与提取地址一起从提取电路6传播到指令缓存8,以指示提取地址是分支指令的目标地址的情形。

如果提取请求未指示该地址是分支指令的目标地址,则过程仅进行到步骤230,在步骤230将缓存行分配到指令缓存存储区中,并且将所请求的指令返回到提取电路6。

然而,如果提取请求指示该地址是分支指令的目标地址,则过程进行到步骤235,在步骤235,在决定是否应该将缓存行分配到缓存之前,执行进一步检查。特别地,确定在由提取请求所指定的目标地址处的所请求的指令是否为着陆场指令。为了使能进行该确定,缓存控制电路150可以包括图3所示的指令分析电路160,以关于该指令执行一些初步解码,以便确定其是否为着陆场指令。

在一些实现方式中,例如如果在较低级的缓存处执行此初步解码,则可能不需要在1级指令缓存8的缓存控制电路150内存在指令分析电路160,并且因此此信息作为从较低级的缓存中撷取到的信息的一部分而可用于缓存控制电路150。

如果检索到的指令是着陆场指令,则其指示提取地址是分支指令的合法目标地址,因此可以执行正常处理。因此,过程进行到步骤230,在步骤230将缓存行分配到指令缓存存储区中,并且将所请求的指令返回到提取电路。然而,如果检索到的指令不是着陆场指令,则在图4所示的实现方式中,指令的缓存行不被分配到缓存中,以便不替换任何现有的指令缓存内容,而是在步骤240仅将所请求的指令返回到提取电路6。因此,只要在分支指令的目标地址处检索到的指令不是着陆场指令,就不会进行到指令缓存的分配。由于这种情形很可能在执行前面提到的类型的攻击时出现,因此这确保了没有相关指令被分配到指令缓存中,因此可以抑制攻击者寻求获取关于敏感数据的信息的随后缓存定时分析的执行。

在一种实现方式中,在步骤235,每当检索到的指令不是着陆场指令时,就不进行到指令缓存的分配。然而,如果需要,则可以将这种方式的分配抑制限制在特定的存储器地址范围内,例如,在所检索的缓存行位于存储器中支持着陆场的页面中的情况。因此,如果所检索的指令不是着陆场指令,并且是从存储器中支持着陆场的页面中检索的,则不进行到指令缓存的分配,否则可以在步骤230进行分配。

然而在图4的示例中,如果到达步骤240,则不进行分配,但是在替代实现方式中,可以采用稍微不同的方法。例如,可以决定分配缓存行,但将其标记为无效。在所关注的攻击场景是攻击者寻求查看分配的缓存行而不是逐出的缓存行的情况下,这可以仍然有用。

尽管已经参考1级指令缓存8描述了上面讨论的技术,但是原则上可以将相同技术应用于存储器层次中的其他级,例如,应用于共享的指令和数据2级缓存32,以便当出现以上关于1级指令缓存8讨论的情况时(即,在分支的目标地址处的提取指令不是着陆场指令时),阻止将指令分配到2级缓存32中。

通过这种方法,可以阻止在各种错误推测情况下将指令分配到指令缓存,例如,当对加载指令进行错误推测时,或者分支预测电路执行了某些错误预测时。

在本申请中,词语“被配置为……”用于表示设备的元件具有能够执行所定义的操作的配置。在本上下文中,“配置”是指硬件或软件的互连的布置或方式。例如,设备可以具有提供所定义的操作的专用硬件,或处理器或其他处理装置可以被编程以执行该功能。“被配置为……”并不意味设备元件需要以任何方式改变以提供所定义的操作。

尽管本文已经参考附图详细描述了本发明的说明性实施例,但是应当理解,本发明不限于这些精确的实施例,并且在不脱离所附权利要求所限定的本发明的范围和精神的情况下,本领域技术人员可以在其中进行各种改变、添加和修改。例如,在不脱离本发明的范围的情况下,可以将从属权利要求的特征与独立权利要求的特征进行各种组合。

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