掌桥专利:专业的专利平台
掌桥专利
首页

用于控制对有界指针的使用的装置和方法

文献发布时间:2023-06-19 09:47:53


用于控制对有界指针的使用的装置和方法

技术领域

本技术涉及数据处理的领域。

背景技术

一些数据处理装置可以支持有界指针,其中,指示特定地址的指针与指示该指针的允许地址范围的范围信息相关联。例如,这样的指针可以被称为“胖指针”。

除了范围信息之外,这样的有界指针还可以具有其他相关联的属性,其定义对指针的使用的一个或多个限制/许可。因此,通过对如何使用由边界指针指定的指针值施加约束,使用此类有界指针可以提供强大的安全性。

当在存储器中分配存储器区域时,例如,以使得该存储器区域能够被特定处理使用,可以建立一个或多个有界指针以与所分配的存储器区域关联使用。这样的有界指针可以包括范围信息,其标识所分配的存储器区域的地址范围。当处理试图使用有界指针生成存储器储器地址时,它将被限制为仅生成落入所分配的存储器区域的地址范围内的存储器地址。

可能出现的问题是,当稍后解除分配存储器区域时,释放了该存储器空间以用于重新分配,有界指针可能仍可用于处理电路。在相关联的存储器区域已被解除分配之后对这种有界指针的潜在使用被称为“释放后使用(use-after-free)”问题。具体地,如果由于编程错误而发生在解除分配相关联的存储器区域之后使用有界指针,则可能引起软件的未定义行为。此外,当有界指针的这种使用作为由安全攻击者有意引起的动作而发生时,这可能潜在地导致信息的安全性泄漏、和/或远程代码执行。

因此,期望提供一种减轻释放后使用问题的技术。

发明内容

在一个示例配置中,提供了一种装置,包括:存储器分配电路,用于分配存储器中的存储器区域;以及有界指针生成电路,用于生成有界指针,该有界指针至少包括用于访问存储器区域的可撤销有界指针,该可撤销有界指针提供指针值以及标识该存储器区域的地址范围的范围信息;其中,该存储器分配电路被布置为在存储器中的头部位置处提供存储器区域的头部,该头部具有第一令牌字段,该第一令牌字段的存储值被初始化为与存储器区域相关联的第一令牌值,该头部位置是从可撤销有界指针所提供的范围信息中导出的,并且其中,存储器分配电路响应于存储器区域的后续解除分配,来修改头部的第一令牌字段中的存储值;并且响应于对使用可撤销有界指针来生成存储器地址的请求,使用认证检查被布置为在确定第一令牌字段中的存储值已被改变时,防止生成存储器地址。

在另一示例配置中,提供了一种控制在装置中对有界指针的使用的方法,该装置具有用于分配存储器中的存储器区域的存储器分配电路,以及用于生成有界指针的有界指针生成电路,该方法包括:布置该有界指针生成电路来至少生成用于访问存储器区域的可撤销有界指针,该可撤销有界指针提供指针值以及标识该存储器区域的地址范围的范围信息;在存储器中的头部位置处提供存储器区域的头部,该头部具有第一令牌字段,该第一令牌字段的存储值被初始化为与存储器区域相关联的第一令牌值,该头部位置是从可撤销有界指针所提供的范围信息中导出的;使得存储器分配电路响应于存储器区域的后续解除分配,来修改头部的第一令牌字段中的存储值;以及响应于对使用可撤销有界指针来生成存储器地址的请求,使得使用认证检查在确定第一令牌字段中的存储值已被改变时,防止生成存储器地址。

在又一示例配置中,提供了一种装置,包括:存储器分配装置,用于分配存储器中的存储器区域;以及有界指针生成装置,用于生成有界指针,该有界指针至少包括用于访问存储器区域的可撤销有界指针,该可撤销有界指针提供指针值以及标识该存储器区域的地址范围的范围信息;其中,该存储器分配装置被布置为在存储器中的头部位置处提供存储器区域的头部,该头部具有第一令牌字段,该第一令牌字段的存储值被初始化为与存储器区域相关联的第一令牌值,该头部位置是从可撤销有界指针所提供的范围信息中导出的,并且其中,存储器分配装置响应于存储器区域的后续解除分配,来修改头部的第一令牌字段中的存储值;并且响应于对使用可撤销有界指针来生成存储器地址的请求,使用认证检查被布置为在确定第一令牌字段中的存储值已被改变时,防止生成存储器地址。

附图说明

将参考如附图中所示的示例仅以说明的方式来进一步描述本技术,在附图中:

图1是根据一个示例的装置的框图;

图2示出了这样的指令类型的示例,针对其如果尝试在一组有界指针存储元件内设置或访问指针值,其中,该指针值用于指定在相关联的范围信息所指示的范围之外的地址,则可能会触发错误;

图3示出了根据一个示例的对与有界指针相关联的标签位的使用;

图4是示出根据一个示例的存储器分配处理的流程图;

图5是示出根据一个示例的有界指针创建操作的流程图;

图6是示出根据一个示例的存储器解除分配处理的流程图;

图7A至图7C示意性地示出了根据一个示例布置的所分配的存储器区域、该存储器区域的示例头部格式、以及所生成的有界指针;

图8是示出在一个示例中执行的使用认证检查操作的流程图;

图9是示出可根据一个实例布置执行的编码操作的流程图;

图10是示出可根据一个实例布置执行的解码操作的流程图;

图11示意性地示出了根据一个示例布置的对有界指针的编码和解码;

图12A和图12B示意性地示出了可以执行的示例编码操作;以及

图13示出了根据一个示例布置的示例使用情况,其中,将由第一装置生成的可撤销有界指针传递给第二装置,以供该第二装置使用,直到相关联的存储器区域被解除分配为止。

具体实施方式

一些处理装置可以支持使用有界指针。例如,指针本身可以指向或用于确定要访问的数据值或要执行的指令的地址。然而,指针还可以具有相关联的范围信息,该范围信息指示使用指针时的允许地址范围。例如,这可用于确保从指针确定的地址保持在一定界限内,以维护行为的安全性或功能正确性。例如,对于基于能力的(capability-based)架构的兴趣日益增加,其中,为给定处理定义了某些能力,并且如果尝试执行在所定义的能力之外的操作,则会触发错误。有界指针的范围信息可以是为这种架构定义的能力信息的一部分,并且在基于能力的架构中,这样的有界指针(包括其相关联的能力信息)可以称为能力。

因此,一种装置可以具有有界指针存储元件,用于存储具有相关联范围信息的指针,该相关联范围信息指示在使用指针时的允许地址范围。每个有界指针存储元件可以是寄存器,或者通用存储器中的存储器位置,例如,堆栈存储器上的位置。

某些指令可以用于引用这种有界指针存储元件以便获得指针,然后该指针用于导出在指令的操作期间所需的存储器地址。指针可以直接用于标识存储器地址,或者可以用于导出存储器地址,例如,通过对指针值添加偏移量。

在一个示例实施方式中,这样的有界指针与具体分配的存储器区域相关联。因此,一旦分配了存储器区域,例如,供特定处理使用,则可以创建一个或多个有界指针以供在访问该存储器区域时使用,并且与有界指针相关联的范围信息将标识形成存储器区域的存储器地址的范围。每当需要访问存储器区域内的地址时,都可以引用这样的有界指针来生成该存储器地址,并且使用有界指针将确保任何生成的存储器地址都被限制在形成存储器区域的允许存储器地址范围内。具体地,如果将有界指针用于生成在所分配的存储器区域之外的存储器地址,则将检测到故障,并防止访问继续进行。

尽管这对于提高安全性非常有用,但是如前所述,可能会出现“释放后使用”的问题,其中,在相关联的存储器区域随后被解除分配之后,有界指针仍可访问。如果由于编程错误而使用这种有界指针,则可能导致软件的未定义行为。作为另一示例,如果该使用作为由安全攻击者有意引起的动作而发生,这可能潜在地导致信息的安全性泄漏、和/或远程代码执行。因此,期望防止在相关联的存储器区域已经被解除分配之后使用有界指针。本文所描述的技术旨在提供一种用于显著降低释放后使用情况发生的可能性的机制。

在一个示例布置中,提供了一种装置,包括:存储器分配电路,用于分配存储器中的存储器区域;以及有界指针生成电路,用于生成有界指针。具体地,该有界指针生成电路被布置为至少生成用于访问存储器区域的可撤销有界指针,该可撤销有界指针提供指针值以及标识该存储器区域的地址范围的范围信息。

此外,该存储器分配电路(其可以由专用硬件、或由在通用处理器上运行的软件形成)被布置为在存储器中的头部位置处提供存储器区域的头部,其中,该头部具有第一令牌字段,该第一令牌字段的存储值被初始化为与存储器区域相关联的第一令牌值。该头部位置从可撤销有界指针所提供的范围信息中导出,因此,使得能够在使用有界指针时定位头部,从而允许在允许使用撤销有界指针之前,引用头部进行硬件检查。

存储器分配电路响应于存储器区域的后续解除分配,修改头部的第一令牌字段中的存储值,其结果是将不再存储第一令牌值。

响应于对使用可撤销有界指针来生成存储器地址的请求,使用认证检查被布置为在确定第一令牌字段中的存储值已被改变时,防止生成存储器地址。

通过这种方法,在可撤销有界指针被使用生成存储器地址时,如果头部的第一令牌字段中的存储值已被修改,则使用认证检查将阻止访问。已经发现,这可以提供一种用于显著地抑制释放后使用情况的可能性的简单且有效的机制。

使用认证检查可以通过多种方式来防止生成存储器地址。在一个示例实施方式中,使用认证检查被布置为当确定第一令牌字段中的存储值已被改变时,使可撤销有界指针无效,从而防止生成存储器地址。

使用认证检查可以确定头部的第一令牌字段中的存储值是否已经被修改的方式可以根据实施方式而变化。然而,在一个示例中,可撤销有界指针被布置为存储第一令牌值,并且响应于对使用可撤销有界指针来生成存储器地址的请求,使用认证检查被布置为采用范围信息来确定头部位置,并且在存储在可撤销有界指针中的第一令牌值与头部的第一令牌字段中的存储值之间不匹配的情况下,使可撤销有界指针无效。

通过这种方法,在可撤销有界指针被用于生成存储器地址时,可以在硬件中执行检查,以确定可撤销有界指针内所提供的第一令牌值是否仍与头部的第一令牌字段的内容相匹配。如从上面的讨论中明显的,在存储器区域的解除分配之后,情况将不再如此,因此可检测到以下情况:在相关联的存储器区域已被解除分配之后,尝试使用可撤销有界指针,在该点处,可撤销有界指针可被无效以防止使用该可撤销有界指针,从而防止所请求的访问发生。

在替代实施方式中,可以不在可撤销有界指针本身内再次生成第一令牌值(例如,由于可撤销有界指针内没有足够的空间来容纳第一令牌值),并且可以使用其他机制来检测头部的第一个令牌字段中的存储值何时已被修改。在这样的实施方式中,第一令牌值可以采用在后文中称为第二令牌值的令牌值的形式,并且可以以与后文关于第二令牌值详细讨论的相同的方式来执行对令牌值的修改的检测。

可以以多种方式来生成第一令牌值,但在一个示例实施方式中,该装置还包括令牌生成电路,用于生成第一令牌值。在一个特定示例中,令牌生成电路是伪随机数生成器,并且第一令牌值然后为伪随机数,其被生成用于与所分配的存储器区域以及(一个或多个)相关联的可撤销有界指针关联使用。

在一些实施方式中,有界指针生成电路可以被布置为不仅生成上述可撤销有界指针,而且还生成不利用第一令牌值的其他有界指针。为了辅助区分不同类型的有界指针,有界指针生成电路可被布置为在每个所生成的有界指针中提供可撤销字段,其在所生成的有界指针是可撤销有界指针时被设置。当可撤销字段被设置,并且有界指针被用于生成存储器地址时,可以在允许可撤销有界指针被使用之前,在硬件中执行上述使用认证检查,并且如果在可撤销有界指针所提供的第一令牌值与相关联的存储器区域的头部的第一令牌字段中的存储值之间存在不匹配,则可撤销有界指针被无效。

有界指针可以存储在系统内的多个位置处。在一个示例布置中,该装置包括一组有界指针寄存器,其中,每个有界指针寄存器被布置为存储用于生成存储器地址的有界指针。当装置的处理电路正在执行指令,并且那些指令的执行需要使用有界指针来生成存储器地址时,可以在有界指针寄存器中的指定的一个有界指针寄存器中访问相关有界指针。有界指针寄存器可以是用于存储有界指针的专用寄存器,或者是可以存储各种类型的数据(包括有界指针)的通用寄存器。

在一个示例中,有界指针可以在有界指针寄存器和存储器之间移动,或者实际上,可以从寄存器复制到存储器,反之亦然,使得并非所有有界指针都将在任何特定时间点驻留在有界指针寄存器之一内。

在其中第一令牌值存储在可撤销有界指针中的实施方式中,第一令牌值的大小受可撤销有界指针内可用于容纳第一令牌值的可用空间的限制。具体地,在一个示例布置中,第一令牌值位于有界指针的未以其他方式使用的部分内。在一些实施方式中,可以存储在有界指针内的第一令牌值的大小可以提供足够的保护级别以防止“释放后使用”情况。然而,分配给令牌值的位数越多,该机制针对释放后使用场景越强健。例如,当生成随机令牌值以与特定存储器区域一起使用时,令牌值越大,则还将生成同一令牌值以与另一先前分配的存储器区域(针对其有界指针仍可处于活动状态)一起使用的可能性就越小,因此,现有的有界指针在先前分配的存储器区域已被解除分配之后可用于访问稍后分配的存储器区域(这实际上是将期望防止的另一类型的释放后使用访问)的可能性就越小。

在一个示例实施例中,如果期望增加有效令牌大小,则可以将第二令牌值与第一令牌值结合使用,其中,头部保留第一令牌值和第二令牌值二者,但是由于缺少空间来容纳第二令牌值,因此第二令牌值本身未在可撤销有界指针内提供。

具体地,在一个示例布置中,头部还包括第二令牌字段,该第二令牌字段被布置为存储与存储器区域相关联的第二令牌值,该第二令牌值不在由有界指针生成电路生成的可撤销有界指针中,并且使用认证检查被布置为当确定第二令牌值已被改变时,使可撤销有界指针无效。

使用认证检查可以通过多种方式确定第二令牌值何时被改变。例如,在一个实施方式中,该装置可以包括附加存储装置,该附加存储装置与该组有界指针寄存器相关联地被提供,其中,当可撤销有界指针被存储在所选择的有界指针寄存器中时,该附加存储装置被布置为与所选择的有界指针寄存器相关联地标识如在头部的第二令牌字段中初始化的第二令牌值。因此,根据这样的实施方式,第二令牌值被存储在头部区域中,并且与一组有界指针相关联地提供附加存储装置,使得当可撤销有界指针被存储在有界指针寄存器之一中时,附加存储装置可以与其相关联地保持第二令牌值,从而使得前面讨论的使用认证检查被扩展,以便可以将第一令牌值和第二令牌值二者与头部中保持的对应值进行比较,并且如果这些令牌值中的任何一个与头部中的相应值不匹配,则可撤销有界指针可被无效。

因此,在一个这样的示例布置中,使用认证检查可以进一步响应于对使用如存储在所选择的有界指针寄存器中的可撤销有界指针来生成存储器地址的请求,来在存储在头部中的第二令牌值与存储在与所选择的有界指针寄存器相关联的附加存储器装置中的第二令牌值之间不存在匹配的情况下,使可撤销有界指针无效。因此,如前所述,在确定可撤销有界指针应继续使用还是应被撤销时,可以引用第一令牌值和第二令牌值二者。

附加存储装置可以以多种方式提供。例如,如果存在将存储在附加存储装置中的每个第二令牌值与有界指针寄存器中的特定的一个有界指针寄存器相关联的机制,则附加存储装置可以与提供该组有界指针寄存器的存储装置在物理上分开。替代地,附加存储装置可以由与提供该组有界指针寄存器的相同的存储结构来提供,并且该附加存储装置被视为对每个有界指针寄存器提供扩展,使得不仅使有界指针能够存储在其中,并且还存储相关联的第二令牌值。

为了提高安全性,尤其是减轻第二令牌值被篡改的潜在风险,附加存储装置可被布置为对于在该装置上执行的一种或多种类型的软件(在一种实施方式中,这可以是在装置上执行的任何软件)是不可访问的。因此,附加存储装置将直接在硬件控制下填充,并且在执行使用认证检查时将由硬件引用。

在替代实施方式中,可能不需要附加存储装置。例如,该装置可以进一步包括通知机制,用于标识何时已经对头部的第一令牌字段和第二令牌字段中的至少一个进行了写入操作,从而使得使用认证检查能够在第一令牌值或第二令牌值已被改变的情况下,使可撤销有界指针无效。通知机制可以采取多种形式,但在一种实施方式中,基于缓存一致性协议,其中,头部被缓存在装置的缓存中。

在采用第一令牌和第二令牌二者的实施方式中,在存储器区域的后续解除分配时,存储器分配电路可被布置为不仅修改存储在头部的第一令牌字段中的值,而且还修改存储在头部的第二令牌字段中的值,使得在存储器区域已被解除分配之后,第一令牌值和第二令牌值在此后都不和与可撤销有界指针相关联地维护的信息相匹配。

第二令牌值可以以各种方式来生成,但在一个实施方式中,使用令牌生成电路来生成,该令牌生成电路还被布置为生成第一令牌值。因此,在一个示例实施方式示例中,第二令牌值也是伪随机数,被生成用于与存储器区域相关联地使用。

在其中在第一令牌值之外还使用第二令牌值的实施方式中,出现的问题是如果可撤销有界指针从有界指针寄存器被存储回存储器,则如何维护指示第二令牌值的信息。如前所述,第二令牌值本身并不构成可撤销有界指针的一部分,因此,当可撤销有界指针被存储到存储器时,第二令牌值将不构成存储在存储器中的可撤销有界指针的一部分。根据一个示例实施方式,通过使用编码操作来解决该问题。

具体地,在一个实施方式中,头部被布置为存储可撤销有界指针的一部分的副本,并且该装置还包括编码控制电路,其被布置为当可撤销有界指针从所选择的有界指针寄存器被存储到存储器时,执行编码操作,以如下方式通过使用第二令牌值对可撤销有界指针的该部分进行编码来创建经编码的可撤销有界指针,该方式允许使用第二令牌值和经编码的可撤销有界指针来重新创建可撤销有界指针的该部分,此后,经编码的可撤销有界指针被存储到存储器。因此,可撤销有界指针以编码形式存储在存储器内。此后,可以从存储器中检索编码形式,并在存储到有界指针寄存器中之前对其进行解码。假设解码操作成功(这需要使用头部中的第二令牌值对可撤销有界指针的编码部分进行解码,以产生与存储在头部中的可撤销有界指针的部分副本相匹配的解码部分),如果通过了较早的使用认证检查,则经解码的可撤销有界指针可以用于后续的存储器访问操作。

将理解,存储在头部内的可撤销有界指针的部分的副本可以以任何适当的格式来存储。因此,虽然它可以以在可撤销有界指针内使用的原始格式进行存储,但如果需要,则可以替代地以其他格式存储(例如,它可以作为对应位的按位逆版本而存储在可撤销有界指针中)。

如果在编码操作期间需要,可以附加地使用第一令牌值,并且如果这样,在执行相应的解码操作时对其进行引用。

具有副本存储在头部中的可撤销有界指针的部分可以采用多种形式,但在一个示例实施方式中,是对于针对存储器区域的当前分配实例而生成的任何有界指针所公用的部分。可撤销有界指针中将存在许多字段,这些字段对于针对存储器区域的当前分配实例而生成的任何有界指针是公用的。例如,这将包括范围信息,该范围信息用于标识存储器区域的范围,但也可以包括某些权限位。在一个特定示例中,针对其副本被存储在头部中的可撤销有界指针的部分至少包括范围信息的对于标识头部位置所不需要的部分。通过不包括标识头部位置所需的范围信息的部分,使得能够在执行所需的解码操作之前标识头部位置。

范围信息可以采取多种形式,但在一个实施方式中,包括存储器区域的基地址和限制地址,头部位置是使用该基地址和限制地址之一来确定的,并且针对其副本被存储在头部中的可撤销有界指针的部分标识基地址和限制地址中的另一个。

如前所述,针对其副本被存储在头部中的可撤销有界指针的部分还可以包括其他信息,例如,指示在可撤销有界指针内指定的至少一个或多个权限的信息。实际上,在一种特定实施方式中,例如,如果在编码/解码操作中仅权限位被编码/解码,则仅权限信息具有副本存储在头部中。

编码控制电路然后可以被布置为通过执行解码操作以使用存储在头部的第二令牌字段中的值(以及如果在编码操作中还使用了第一令牌值,则存储在第一令牌字段中的值)对可撤销有界指针的编码部分进行解码来对可撤销有界指针进行解码,以生成可撤销有界指针的重新创建部分,并然后执行检查操作,以确定可撤销有界指针的重新创建部分是否与存储在头部中的可撤销有界指针的部分的副本相匹配。具体地,尚未编码的范围信息的部分可用于标识头部位置,从而使头部的内容能够被检索,此后,存储在第二令牌字段(以及可选的第一令牌字段)中的值可用于解码可撤销有界指针的编码部分。如果存储在第二令牌字段中的值仍然是第二令牌值(并且如果在编码/解码处理中还使用了第一令牌,则存储在第一令牌字段中的值仍然是第一令牌值),则重新创建部分应仍与存储在头部中的可撤销有界指针的复制部分相匹配。然而,如果头部已更改(例如,因为相关联的存储器区域已被解除分配),则解码操作将不会生成与存储在头部中的可撤销有界指针的复制部分相匹配的可撤销有界指针的重新创建部分。如果出现这种情况,则编码控制电路可以被布置为使可撤销有界指针无效。此外,在一个实施方式中,一旦可撤销有界指针已被解码,则还执行检查,以确保可撤销有界指针中的第一令牌值与头部的第一令牌字段中的存储值相匹配,并且如果不是这种情况,则可撤销有界指针也被无效。

解码操作可由于多种原因而触发。在一个示例实施方式中,编码控制电路被布置为每当经编码的可撤销有界指针从存储器被加载到有界指针寄存器之一中时,执行解码操作。因此,在这样的实施方式中,可撤销有界指针在被存储到存储器中时总是被编码,并且在从存储器被检索到有界指针寄存器中时总是被解码。

然而,在替代实施方式中,可以将经编码的可撤销有界指针检索到有界指针寄存器中而无需对其进行解码。例如,这将允许在存储位置之间复制有界指针,而无需执行解码步骤和相应的编码步骤。然而,在这样的实施方式中,需要确保编码有界指针不能被用于执行存储器访问操作。因此,在一个这样的实施方式中,每个有界指针包括编码字段,该编码字段被设置以指示可撤销有界指针何时已经被编码。因此,这使得处理硬件能够区分存储在有界指针寄存器中的仍处于编码形式的可撤销有界指针(因此不能用于存储器访问)以及解码形式的可撤销有界指针(因此如果通过了使用认证检查,则可能被用于存储器访问)。

在这样的实施例中,在经编码的可撤销有界指针被用于生成存储器地址之前,该经编码的可撤销有界指针需要由编码控制电路进行解码。

如果头部位置可以从存储器区域的范围信息中标识,则头部相对于相关联的存储器区域的物理位置可以采取多种形式。在一个示例实施方式中,头部位置相对于存储器区域被布置为以下项之一:紧接在所分配的存储器区域之前、或在所分配的存储器区域之前的固定偏移量处的存储器地址序列;紧接在所分配的存储器区域之后、或在所分配的存储器区域之后的固定偏移量处的存储器地址序列;基于存储器区域的地址通过执行计算而确定的位置处的存储器地址序列。

尽管在一个实施方式中,用于保持头部的存储器地址序列可以是软件可寻址的,但在替代实施方式中,头部位置可以在存储器的不能被在该装置上执行的至少一些类型的软件寻址的部分内。例如,头部可以由非软件可寻址存储位形成(例如,类似于与数据值相关联地存储ECC位的方式)。如果需要,则头部位置可以由某些特权软件(例如,核心(kennel)以及可能地具有适当特权级别的一个或多个其他软件组件)访问,但是对特权较低的软件(例如,用户空间软件)则不可访问。

作为另一示例,头部位置可以在与包含所分配的存储器区域的地址空间分离的地址空间中表示。在这样的布置中,分离的地址空间仍然可以由软件寻址,但是其方式不同于对常规地址空间进行寻址的方式(例如,对该分离的地址空间进行寻址可能需要使用特殊的CPU指令)。在这种布置中,分离的地址空间中的头部位置仍可被布置为使得它可以使用所分配的存储器区域的范围信息来进行定位。

如果头部在存储器的不能被在该装置上执行的某些类型的软件寻址的部分内,则可以通过避免该软件修改头部信息的任何潜在风险来进一步提高安全性。

在一个实施方式中,针对其副本被存储在头部中的可撤销有界指针的部分可被预先确定。然而,替代地,可以在头部内提供控制字段,以标识可撤销有界指针的哪些位已被用来形成存储在头部中的可撤销有界指针的复制部分。这可以提供关于在头部内维护的可撤销有界指针的位的选择的可配置性水平,以供在先前描述的编码和解码操作中使用。在一个特定实施方式中,控制字段可以至少部分地由第一和/或第二令牌字段的部分提供,使得例如第一/第二令牌值的第一部分在执行编码/解码是被用作“加密密钥”,并且另一部分(可能与第一部分相交)用作控制字段值,以确定可撤销有界指针的哪些位将被编码/解码。

应注意,当执行使用认证检查时,不一定需要访问存储器以获取头部信息。例如,该装置可以进一步包括缓存结构,该缓存结构被布置为维护头部的第一令牌字段中的存储值(以及可选地,在使用第二令牌的实施方式中,存储在第二令牌字段中的值)的副本,其中,使用认证检查被布置为在确定第一令牌字段中的存储值是否已经改变时,引用在缓存结构中维护的副本。在现代数据处理系统中,使用缓存一致性方案来确保系统内的各种缓存所维护的内容代表其中所缓存的数据的最新版本,因此如果头部的内容已被缓存,并且这些缓存的内容在执行使用认证检查时仍然有效,则可以使用这些缓存的内容来确定第一令牌字段中的存储值是否经改变。因此,这可以显著减少执行使用认证检查所花费的时间。

实际上,在一些系统中,使用有界指针的核心(该核心在下文中称为当前核心)可完全避免执行使用认证检查,直到缓存一致性方案建议对头部的缓存版本进行更新,或当前核心更新头部为止。例如,一旦有界指针被加载到有界指针寄存器中并且相应的头部被存储在缓存内,则缓存一致性方案能够跟踪对与有界指针相关联的头部的写入。因此,例如,如果另一核心写入包含头部的位置,则这将使得一致性无效请求被发送到当前核心,因此通过该机制,当前核心接收指示头部的可能改变的消息。结果,这可以避免执行认证检查,直到由于另一核心的更新而接收到这样的一致性无效请求为止,或者直到它写入头部本身为止,因为在该时间之前已知头部没有改变。一旦对头部进行了改变,则使用认证检查可被布置为确定可撤销有界指针将被无效。

存在其中使用上述机制提供可撤销有界指针可能非常有用的许多示例用例。在一个示例用例中,该装置被布置为向另一装置提供可撤销有界指针,以控制该另一装置对存储器区域的访问,并且该另一装置被布置为执行使用认证检查,由此在该装置解除分配该存储器区域之后,该另一装置将被防止进一步使用可撤销有界指针来生成存储器地址。因此,通过这种方法,装置可以创建可传递给另一装置的有界指针,并且上述机制确保一旦该装置决定解除分配相关的存储器区域,则该另一装置将不再能够使用所提供的有界指针,并且具体地,在相关联的存储器区域已被解除分配之后的任何尝试使用该有界指针时,该有界指针将被取消。

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

图1示意性地示出了数据处理装置2的示例,包括用于处理指令的处理流水线4。在该示例中,处理流水线4包括多个流水线级(stage),包括提取级6、解码级8、发布级10、执行级12和回写级14,但应理解,可以提供其他类型的级或级的组合。例如,在一些实施方式中,可以包括用于执行寄存器重命名的重命名级。要处理的指令从一个级移到另一级,并且当一个指令在一个级处待处理时,另一指令可在流水线4的不同级处待处理。

提取级6从等级1(L1)指令缓存20中提取指令。提取级6通常可以从连续的指令地址顺序地提取指令。然而,提取级还可以具有分支预测器22,用于预测分支指令的结果,并且如果预测分支被采用,则提取级6可以从(非顺序)分支目标地址提取指令,或者如果预测分支不被采用,则从下一个顺序地址提取指令。分支预测器22可以包括一个或多个分支历史表,用于存储用于预测某些分支是否可能被采用的信息。例如,分支历史表可以包括计数器,用于跟踪先前执行的分支的实际结果,或用于表示对分支做出的预测的置信度。分支预测器22还可以包括分支目标地址缓存(BTAC)24,用于缓存分支指令的先前目标地址,使得可以在随后遇到相同的分支指令时对其进行预测。

所提取的指令被传递到解码级8,其对指令进行解码以生成解码指令。解码指令可以包括用于控制执行级12来执行适当的处理操作的控制信息。对于从缓存20提取的一些更复杂的指令,解码级8可以将那些指令映射到多个解码指令,这可以被称为微操作(μops或uops)。因此,从L1指令缓存20提取的指令与流水线的较后级所看到的指令之间可能没有一对一关系。通常,在本申请中对“指令”的引用应被解释为包括微操作。

解码指令被传递到发布级10,其确定执行指令所需的操作数是否可用,并在操作数可用时发布用于执行的指令。一些实施方式可以支持有序处理,从而以与从L1指令缓存20中提取指令的程序顺序相对应的顺序发布指令以执行。其他实施方式可以支持无序执行,从而可以以与程序顺序不同的顺序向执行级12发布指令。无序处理对于提高性能很有用,因为在较早指令停滞而等待操作数时,程序顺序中的操作数可用的较后指令可以先执行。

发布级10将指令发布到执行级12,其中,执行指令以执行各种数据处理操作。例如,执行级可以包括多个执行单元30、32、34,其包括用于对整数值执行算术或逻辑运算的算术/逻辑单元(ALU)30、用于对以浮点形式表示的值执行运算的浮点(FP)单元32、以及用于执行加载操作以将数据值从等级1(L1)数据缓存36加载到寄存器40或执行存储操作以将数据值从寄存器40存储到L1数据缓存36的加载/存储单元34。将理解,这些仅是可以提供的执行单元的类型的一些示例,并且还可以提供许多其他种类。为了执行处理操作,执行级12可以从一组寄存器40中读取数据值。然后,所执行的指令的结果可以通过回写级14被回写到寄存器40。

L1指令缓存20和L1数据缓存36可以是包括多个缓存等级的缓存层级的一部分。例如,还可以提供等级2(L2)缓存44,并且可选地,可以提供其他等级的缓存。在该示例中,L2缓存44在L1指令缓存20和L1数据缓存36之间共享,但是其他示例可以具有单独的L2指令和数据缓存。当要提取的指令不在L1指令缓存20中时,则可以从L2缓存44中提取该指令,并且类似地,如果该指令不在L2缓存44中,则可以从主存储器50中提取该指令。类似地,响应于加载指令,如果数据不在L1数据缓存36中,则可以从L2缓存44中提取数据,并且如果需要,则可以从存储器50中提取数据。任何已知方案都可以用于管理缓存层级。

流水线4用来引用程序指令和数据值的地址可以是虚拟地址,但是至少主存储器50,以及可选地还有缓存层级的至少一些等级可以被物理地寻址。因此,可以提供转换后备缓冲器52(TLB),以用于将流水线4所使用的虚拟地址转换为用于访问缓存或存储器的物理地址。例如,TLB 52可以包括多个条目,每个条目指定虚拟地址空间的相应页面的虚拟页面地址,以及虚拟页面地址应映射到的相应物理页面地址,以便将相应页面中的虚拟地址转换为物理地址。例如,虚拟页面地址和物理页面地址可以对应于相应的虚拟地址和物理地址的最高有效部分,而其余的最低有效部分在将虚拟地址映射到物理地址时保持不变。除了地址转换信息之外,每个TLB条目还可以包括一些指定访问权限的信息,例如,指示在流水线4的某些模式下是否可以访问某些地址页面。在一些实施方式中,TLB条目还可以定义相应的地址页面的其他属性,例如,缓存策略信息,该缓存策略信息定义缓存层级的哪些等级响应于读取或写入操作而被更新(例如,缓存应在回写还是直写模式中操作),或者以下信息,该信息定义对相应页面中的地址的数据访问是否可以由存储器系统相比于数据访问被流水线4发布的顺序而重新排序。

尽管图1示出了单个等级TLB 52,但应理解,TLB的层级可以提供为使得等级1(L1)TLB 52可以包括用于翻译多个最近访问的页面中的地址的TLB条目,并且可以提供等级2(L2)TLB以存储更多页面的条目。当所需条目不存在于L1 TLB中时,则可以从L2 TLB或层级中的其他TLB中提取。如果要访问的页面的所需条目不在任何TLB中,则可以执行页面表遍历以访问存储器50中的页面表。在本技术中可以使用任何已知的TLB管理方案。

此外,将理解,一些系统可以支持多个等级的地址转换,使得例如第一TLB(或TLB的层级)可以用于将虚拟地址转换为中间地址,并且使用一个或多个另外的TLB的第二等级的地址转换然后可以将中间地址转换为用于访问缓存或存储器的物理地址。例如,这可用于支持虚拟化,其中,第一等级的地址转换可以由操作系统管理,并且第二等级的地址转换可以由管理程序管理。

如图1所示,装置2可以具有一组有界指针寄存器60。尽管在图1中将该组有界指针寄存器示出为与一组通用数据寄存器40在物理上分开,但在一种实施方式中,同一物理存储装置可以用于提供通用数据寄存器和有界指针寄存器二者。

每个有界指针寄存器60包括指针值62,其可用于确定要访问的数据值的地址,以及范围信息64,其指定在使用相应的指针62时的允许地址范围。有界指针寄存器60还可以包括限制信息66(本文也称为权限信息),其可以定义关于指针的使用的一个或多个限制/权限。例如,限制66可以用于限制可以使用指针62的指令的类型,或者在其中可以使用指针的流水线4的模式。因此,可以考虑范围信息64和限制信息66来定义在其中允许使用指针62的能力。当试图使用所定义的能力之外的指针62时,可触发错误。范围信息64可用于例如确保指针保持在某些已知范围之内,并且不会偏离到存储器地址空间的可能包含敏感或安全信息的其他区域。在其中同一物理存储装置被用于通用数据寄存器和有界指针寄存器两者的实施方式中,则在一种实施方式中,指针值62可以例如存储在与用于相应的通用寄存器的相同的存储位置内。

图2示出了针对其允许范围被用于防止对数据或指令的未授权访问的指令类型的示例。如图2的顶部所示,特定的有界指针寄存器PR1包括给定的指针值62和范围信息64,在该示例中,其是使用下界地址68(定义允许范围的下界)和上界地址69(定义允许范围的上界)指定的。例如,边界68、69被设置为定义地址范围80000至81000。当某些指令引用有界指针寄存器PR1,并且从指针62确定的地址在此范围之外时,可触发错误。

例如,如图2的A部分所示,在一些系统中,如果尝试将指针寄存器60中的指针62的值设置为超出由范围信息64指定的范围的值,则可触发错误(这里假定指针直接指定地址)。这避免指针62取在指定范围之外的任何值,使得可以确保使用该指针的任何访问都安全地位于该允许范围内。替代地,如图2的B部分所示,当指令试图访问由指针62的地址标识的位置时,如果该地址位于指定范围之外,则可触发错误。因此,仍然可以允许将指针62设置为指定范围之外的值,但是一旦尝试对指针地址(或从指针导出的地址)处的数据访问,则如果地该址位于允许范围之外,则可触发错误。其他系统可响应图2的A部分和B部分所示的两种指令类型而触发错误。

范围信息64可以以不同的方式设置。例如,安全码,或操作系统或管理程序,可以指定给定指针的允许范围。例如,指令集架构可以包括用于设置或修改给定指针62的范围信息64的多个指令,并且这些指令的执行可以限于处理器4的某些软件、或某些模式、或异常状态。可以使用用于设置或修改范围信息64的任何已知技术。

除了在执行引用指针的某些指令时可以在执行级12处使用的该组有界指针存储元件60之外,程序计数器功能(PCC)寄存器80也可以用于在从等级1指令缓存20中提取指令时,在提取级6处提供类似的功能。具体地,程序计数器指针可以存储在字段82中,其中PCC80还提供范围信息84和任何适当的限制信息86,类似于该组有界指针存储元件60中的每个指针所提供的范围和限制信息。。

图3示意性地示出了标记位如何与各个数据块相关联地使用,以识别那些数据块是表示能力(即,有界指针和相关联的限制信息)还是表示正常数据。具体地,存储器地址空间110将存储一系列数据块115,其通常将具有指定大小。仅出于说明的目的,在此示例中假定每个数据块包括128个位。与每个数据块115相关联地,提供标记字段120,在一个示例中,该标记字段120是被称为标记位的单个位字段,其被设置以标识相关联的数据块代表能力,并且被清除以指示相关联的数据块代表常规数据,因此不能视为能力。应理解,与设置或清除状态相关联的实际值可以取决于实施方式而变化,但仅作为说明,在一个示例实施方式中,如果标签位的值为1,则指示相关联的数据块是能力,并且如果其值为0,则表示相关联的数据块包含常规数据。

当能力被加载到有界指针寄存器60(在本文中也称为能力寄存器)之一中时,例如,图3所示的能力寄存器100,则标记位与能力信息一起移动。因此,当能力被加载到能力寄存器100中时,指针102、范围信息104和限制信息106(以下称为权限信息)将被加载到能力寄存器中。此外,与该能力寄存器相关联地,或者作为该能力寄存器中的特定位字段,标签位108将被设置以标识内容表示能力。类似地,当能力被存储回存储器中时,相关标签位120将与存储该能力的数据块相关联地设置。通过这种方法,可以区分能力和常规数据,从而确保常规数据不能被用作能力。

返回图1,根据本文描述的技术,可以生成可撤销有界指针,在与有界指针相关联的常规信息之外,该可撤销有界指针还包括与相应的存储器区域相关联的第一令牌值,针对该相应的存储器区域,有界指针被用于控制访问。此外,为了与关于存储器区域的分配实例的可撤销有界指针相关联地使用,提供头部,该头部存储在存储器中的头部位置处,其中,该头部具有第一令牌字段,其存储值被初始化为与可撤销有界指针相关联地使用的第一个令牌值。头部位置被布置为可从可撤销有界指针所提供的范围信息中导出,因此使得能够在有界指针被用于生成存储器地址时对头部进行定位。在随后解除分配所分配的存储器区域时,则修改第一令牌字段中的存储值。

图1示意性地示出了用于管理对可撤销有界指针和与相应的存储器区域相关联地提供的头部的使用的组件。具体地,如图所示,提供有界指针控制电路90,用于控制有界指针的生成,以及这些有界指针在能力寄存器60与缓存层级36、44和/或存储器50之间的移动。此外,提供存储器分配器/解除分配器电路92,用于分配存储器内的存储器区域,例如,使得它们能够被在数据处理装置上执行的特定处理使用,并用于随后解除分配那些存储器区域。存储器分配器/解除分配器电路还负责维护每个存储器区域的头部。

在一些实施例中,有界指针控制电路90和存储器分配器/解除分配器92可以由专用硬件组件来提供。替代地,它们可以在受信代码(例如,安全代)或操作系统或管理程序的控制下,在数据处理装置的现有硬件上实现。在这些组件中的任何一个由软件实现的情况下,有界指针语义仍应由硬件实施。

还如图1所示,与该组有界指针寄存器60相关联地提供附加存储装置94。这可以被提供为对于被用于提供有界指针寄存器60的存储这种的单独存储组件,或者可以被提供在同一组件内,从而有效地为每个有界指针寄存器提供扩展,使得它们不仅可以存储有界指针,还在附加存储装置94中相应位置处存储一些附加信息。具体地,如稍后将更详细讨论的,对于可撤销有界指针,附加存储装置中的与有界指针寄存器相关联的相关位置可以用于存储第二令牌值,该第二令牌值也被维护在针对与存储在该有界指针寄存器中的可撤销有界指针相关联的存储器区域所提供的头部中。

在一些实施方式中,可能期望提供可撤销程序计数器功能,并且在这种情况下,还可以与PCC寄存器80相关联地提供其他附加存储装置。

图4是示出在一个实例实施方式中可由存储器分配器/解除分配器电路92执行的存储器分配操作的流程图。在步骤150处,确定需要分配新的存储器区域。这可以由在处理电路上执行的软件来触发,例如,由于需要提供一部分存储器以供在数据处理装置上执行的特定处理或任务使用。一旦要分配新的存储器区域,则在步骤155处,使用多种标准存储器分配技术中的任何一种来确定该存储器区域的地址范围,然后在步骤160处,将所标识的存储器区域标记为已分配,以便保留形成该存储器区域的存储器地址范围,以供相关联地任务或处理使用。如果要针对该存储器区域构造可撤销有界指针,并且相关联的头部位于软件可寻址存储位中,则还需要保留一部分存储器以存储头部。

在步骤165处,然后确定可撤销有界指针是否将用于存储器区域。具体地,在一个实施方式中,可能是支持可撤销有界指针的情况,但是标准有界指针也可以使用,因此在一些情况下,可确定标准有界指针将用于特定存储器区域。如果将不使用可撤销有界指针,则在该点处,处理可以前进至步骤170,其中,可以执行与使用标准有界指针有关的常规步骤。

然而,假定所分配的存储器区域将具有至少一个与其相关联的可撤销有界指针,则处理进行到步骤175,其中,创建该存储器区域的头部,然后该头部存储在针对存储器区域确定的头部位置处。如将在下面更详细地讨论的,如果头部位置可以使用在相关联的可撤销有界指针中提供的范围信息来确定,则头部位置可以采用各种不同的形式。头部的内容可以采用多种形式,但在一个所描述的实施方式中,提供了第一令牌(本文也称为小令牌)、第二令牌(本文也称为大令牌)、以及将用于与存储器区域相关联的有界指针的某些有界指针位的值。在头部中维护的有界指针位可以采用多种形式,但通常是对于被创建以用于与存储器区域的当前分配实例相关联地使用的任何有界指针公用的有界指针位。作为示例,这可以包括范围信息的一部分,因为范围信息对于被分配给特定存储器区域的有界指针将是公用的,在一个实施例中,范围信息标识存储器区域的基地址和限制地址。此外,某些权限位对于被创建以用于与存储器区域相关联地使用的有界指针可以是公用的,并且那些权限位中的一个或多个可以被包括在头部内所保持的信息中。

如从将后面的讨论中明显的,当有界指针在有界指针寄存器60和存储器之间移动时,某些有界指针位的值被保留在头部中,以用于编码操作和相应的解码操作。具体地,较大令牌不能被容纳在可撤销有界指针本身内(与小令牌相反,在一个示例实施方式中,小令牌以在有界指针格式中未使用的一系列位被并入可撤销有界指针内)。因此,尽管大令牌信息可以被维持在附加存储装置94的相应部分中,而可撤销有界指针存在于有界指针寄存器60之一中,当有界指针被存储到存储器中时,大令牌信息不能被维持。因此,在一个示例实施方式中,可撤销有界指针的一部分(即与头部中所维持的部分相对应的部分)将使用大令牌进行编码操作,以生成编码部分,编码操作采用以下形式,该形式稍后使得大令牌被用于对该编码部分进行解码,以便将其恢复回其原始内容,然后可撤销有界指针的编码形式被存储到存储器中。

在替代实施方式中,使用小令牌可能是足够的,而未提供第二令牌。在该情况下,头部可能仅需要提供对小令牌的指示,而不会标识第二令牌或有界指针的某些位的值。此外,将不需要编码操作和解码操作,因为第一令牌值可以直接并入可撤销有界指针中,并且因此可以在可撤销有界指针在有界指针寄存器60和存储器50之间移动(在任一方向)时被保持。然而,当令牌的总体大小增加时,该机制防止释放后使用场景的强健性得到提高,因此,为了下文所述的示例实施方式的目的,将假定总体令牌由小令牌(可以直接在有界指针内表示)和大令牌(不能直接在有界指针内表示)表示,并且在决定是否撤销可撤销有界指针时,使用该两个指针。这将参考其余附图进行更详细地讨论。

图5示出了可以由有界指针控制电路90实现的有界指针创建处理。具体地,该处理描述了在创建可撤销有界指针时发生的事件序列,如在步骤200处确定。一旦将创建可撤销有界指针,则在步骤205处,有界指针的字段填充有所需信息(包括通常的指针、范围和权限信息)。然而,此外,有界指针将被填充以合并如存储在相关联的存储器区域的头部的小令牌字段中的小令牌值。此外,在本文描述的示例实施方式中,在有界指针内提供可撤销(R)位,其可以被设置以标识有界指针是可撤销有界指针。相反,如果正在创建标准有界指针,则没有第一令牌值将并入有界指针内,并且R位将被清除。

还如稍后将更详细讨论的,在一个实施方式中,提供编码(E)位,其可以被设置以标识可撤销有界指针为编码形式,并且其可以被清除以标识可撤销有界指针为解码形式。如果实施方式使用E位信息,则在步骤205处,E位被清除,因为在创建有界指针的点,在一个示例中,其将以未编码形式在有界指针寄存器60之一中创建。

在步骤210处,可撤销有界指针将被存储在所选择的有界指针寄存器60内,并且如在相应的存储器区域的头部中提供的大令牌将被存储在与所选择的有界指针寄存器60相关联的附加存储装置94中。大令牌可以以多种方式存储在附加存储装置94中。如果在有界指针寄存器60之一内的可撤销有界指针被用于生成存储器地址时,针对该有界指针的适当的第二令牌可以从附加存储装置94中访问,则可以使用任何适当的机制。

在一些实施方式中,如果存在通知机制,该通知机制使得核心在对与当前在其有界指针寄存器中的可撤销有界指针相关联的任何头部执行写入操作的情况下接收通知,则可能不需要用于附加存储装置。具体地,在该情况下,如果核心未接收到任何这样的通知,并且尚未写入相关的头部本身,则它知道头部未被改变并且因此该区域未被解除分配,因此可以避免使用认证检查。关于如果可撤销有界指针移动到存储器则所需的编码操作,则第二令牌值可以直接从头部加载以用于该目的。

这种通知机制的具体示例是前面讨论的缓存一致性方案示例。具体地,如果头部被缓存,则可优化认证检查,以使当前核心(即使用可撤销有界指针的核心)实际上不需要执行认证检查,直到缓存一致性方案建议对头部的缓存版本的更新,或者当前核心更新头部为止。在这种情况下,可以避免需要附加存储装置94。如果在适当的时候接收到关于头部的修改的通知,并且未提供附加存储装置,则与经修改的头部相关联且当前驻留在有界指针寄存器之一中的所有可撤销有界指针应被无效。

图6示出了可以由存储器分配器/解除分配器电路92执行的存储器解除分配操作。当在步骤250处确定需要解除分配所分配的存储器区域时,例如,因为打算使用该存储器区域的处理已经完成并且因此不再需要该存储器区域,则该处理进行到步骤255,其中,确定存储器区域是否具有相关联头部。这将是其中已创建可撤销有界指针以与该存储器区域相关联地使用的情况。

如果存储器区域确实具有相关联头部,则在步骤260处,头部被预定值覆盖。确切地,什么数据被写入头部将根据实施方式而变化,但是覆盖处理的目的是确保头部不再维护先前存储在头部中的大令牌值和小令牌值,作为结果,它们将不再匹配与该存储器区域相关联的可撤销有界指针所相关联地维护的令牌信息。

在步骤260之后,或者如果存储器区域不具有相关联头部,则紧接在步骤255之后,处理进行到步骤265,其中,存储器区域被解除分配,使其可以用作可用于存储器区域的未来分配的存储器地址池的一部分。

图7A至图7C示出了一个示例实施方式中的对头部的使用,以及可撤销有界指针的形式。如图7A所示,在存储器分配处理中,存储器地址空间300内的存储器区域305可被确定为要分配的存储器区域。所分配的存储器区域将具有标识该区域内的第一地址的基地址和标识该区域内的最后一个地址的限制地址。此外,在其中存储器区域将具有与其相关联的可撤销有界指针的情况下,则将生成用于该存储器区域的头部,该头部将被存储在头部位置310处。头部位置可以采用多种形式,但是在一个实施方式中,要求其位置可以使用所分配的存储器区域的范围信息来确定,该范围信息将在该存储器区域的可撤销有界指针内提供。在一个示例实施例中,基地址和限制地址信息将被编码在有界指针的范围信息内,并且因此,头部位置被布置为使得其可以直接从基地址或限制地址之一导出。在所示的示例中,头部位置可直接从基地址确定,并且具体地由刚好在所分配的存储器区域的起始之前的存储器地址位组成。然而,不要求头部位置直接与存储器区域相邻,而是可以位于存储器区域的起始之前的固定偏移量处,使得可以根据基地址和固定偏移量来确定头部位置。替代地,头部位置可以被布置为刚好在所分配的存储器区域的末端之后,使得其可以使用限制地址来确定。同样地,它可以替代地位于存储器区域的末端之后的固定偏移量处。

作为又一示例,如果可以使用某种确定机制从存储器区域的地址确定头部的位置,则头部可以放置在相对于存储器区域的任意单独位置中。例如,可以使用二进制搜索树,并且所分配的存储器区域的地址作为搜索关键字,并且头部作为对应值。

在一些示例实施方式中,头部位置可以被提供为软件可寻址存储器位,但替代地,可以被提供为非软件可寻址存储器位,其方式与可以与存储器中的数据相关联地提供ECC位的方式几乎相同。

头部的格式可以采用多种形式,但图7B中的框315示出了一种格式。在此示例中,提供四个字段,即用于存储小令牌值的小令牌字段320,用于存储大令牌值的大令牌字段335,以及用于存储将在与存储器区域相关联的可撤销有界指针中提供的某些信息位的附加字段。具体地,可以提供字段325以存储范围信息的特定部分。在一个示例实施方式中,存储在该字段中的部分是标识头部位置不需要的部分。考虑图7A的示例,其中,基地址被用于标识头部位置,因此字段325可以存储限制地址,并且被称为限制字段。然而,如果限制地址被用于标识头部位置,则可以在字段325中标识基地址,并且该字段被称为基字段。

在一个示例实施方式中,字段325可以是足够的,但如果期望,则还可以在头部内再次生成来自有界指针的其他信息位。例如,可以提供权限字段330以存储有界指针的权限位的至少一部分。通常,权限字段将用于存储对于被创建以用于与所分配的存储器区域关联地使用的任何有界指针为公用的那些权限位。

图7C示出了示例可撤销有界指针340,尤其是可在其中提供的各种字段。如图所示,可撤销有界指针包括用于存储指针值的指针字段345、用于标识存储器区域的基地址的基字段350、用于标识限制地址的限制字段355、用于存储各种权限位的权限字段360、用于存储小令牌值的小令牌字段365、以及所示的其他位字段。具体地,可以使用R位字段370,其被设置以标识有界指针是可撤销有界指针,并且在有界指针是标准有界指针时被清除。此外,先前参考图3讨论的T位信息可以存储在T位字段380内。替代地,可以提供E位字段375,其可以用于标识有界指针的内容是否被编码。

在一些实施方式中,对E位的使用将不是必需的。例如,在一个实施方式中,可能的情况是可撤销有界指针在被存储在有界指针寄存器60之一中时总是被解码,并且在被存储在存储器50中时总是被编码。在该情况下,可以推断E位信息,并且不需要提供单独的字段。然而,在期望允许编码有界指针驻留在有界指针寄存器60之一中的实施方式中,则可以提供E位字段375,以便可以确定特定可撤销有界指针当前处于编码形式(在生成存储器访问时不可使用)还是解码形式(如果通过使用认证检查处理,则可以在执行存储器访问时使用)。

在一个示例实施方式中,在生成有界指针时,其在有界指针寄存器60之一中创建,例如,图7C所示的有界指针寄存器385。在有界指针被存储在有界指针寄存器内时,则将使用附加存储装置94的相关联部分(例如,部分390)来存储相关的大令牌,即大令牌被存储在相应的存储器区域的头部315的大令牌字段335中的。

对于要用于生成存储器地址的有界指针,它必须首先驻留在有界指针寄存器60之一中,并因此在使用时,附加存储装置将捕获大令牌信息。如图7C所示,如果需要,则附加存储装置可被布置为至少一些类型的软件不可访问,从而通过防止对大令牌值进行软件修改的可能性,来提高大令牌信息的安全性。

在可撤销有界指针被用于生成存储器地址时,然后可以在硬件控制下实现使用认证检查处理,如图8所示。

具体地,当在执行流水线内执行使得生成存储器地址的指令时,则处理器硬件可以在步骤400处确定可撤销有界指针将被用于生成存储器地址,此时,处理可以进行到步骤405。在步骤405处,在可撤销有界指针内提供的范围信息的至少一部分被用来标识存储器区域的头部。考虑在图7A的示例中,存储在基字段350中的基地址信息将用于该目的,但如前所述,在替代实施方式中,限制地址信息可用于该目的。

一旦标识了头部位置,则在步骤410处,检索头部的小令牌字段和大令牌字段中所保持的令牌值。应注意,可不必访问主存储器来获取头部的小令牌字段和大令牌字段。例如,在许多系统中,将存在一个或多个等级的缓存,其可用于缓存数据以供处理流水线4访问,例如,先前讨论的等级1和等级2缓存36、44。因此,可以缓存头部的内容,从而在需要执行使用认证时改进访问时间。

此后,在步骤415处,确定可撤销有界指针中的小令牌值以及相关联的附加存储装置中的大令牌值是否与从头部中检索的值相匹配。如果否,则处理进行到步骤425,其中,可撤销有界指针被撤销,这使得生成存储器地址的请求失败,并防止对可撤销有界指针的进一步使用。

然而,假设通过了检查415,则在步骤420处,可撤销有界指针被允许用于生成存储器地址。应注意,一旦生成了存储器地址,则执行所有通常的边界和权限检查,以确保所生成的存储器地址确实落在相关联的存储器区域的范围内,并且所请求的访问的类型考虑到权限信息而被允许执行。

如前所述,在使用大令牌的实施方式中,则当在有界指针存储元件60和存储器之间传送可撤销有界指针时,可以使用编码和相关联的解码机制。具体地,在将可撤销有界指针存储到存储器中时,可以使用大令牌对有界指针的一部分进行编码,其方式允许在解码操作期间的稍后点处,使用第二令牌值和编码有界指针来重新创建可撤销有界指针的该部分。图9的流程图示出了可以执行的编码操作的示例。在步骤450处,确定是否存在可撤销有界指针要存储到存储器,并且当出现这种情况时,处理进行到步骤455,其中,有界指针控制电路90执行编码操作,同时将有界指针从相关的有界指针寄存器60移动到存储器。具体地,在步骤455处,使用存储在与存储可撤销有界指针的有界指针寄存器相关联的附加存储装置94中的大令牌来对有界指针的所标识的部分进行编码。考虑图7B的示例,其中,限制字段和权限位的子集被保持在头部内,则这些是形成使用大令牌编码的有界指针的部分的位。具体地,由于头部包含该信息的副本,因此稍后可以确定在执行相关联的解码操作时,大令牌字段335的内容是否已更改,因此是否应在执行解码时撤销可撤销有界指针。稍后将参考图10的流程图对此进行详细讨论。

一旦在步骤455处执行了编码操作,则在步骤460处,将经编码的可撤销有界指针存储到存储器,并且如果有界指针格式包括E位,则E位被设置。然后,在步骤465处,如果需要,则相关的有界指针寄存器和相关联的附加存储装置的内容可被无效。此时,可撤销有界指针已迁移到存储器,但采用考虑大令牌值的编码形式。作为对在步骤465处使相关的有界指针寄存器和相关联的附加存储装置的内容无效的替代方案,该信息可仅在需要时保留,在这种情况下,应当理解,可撤销有界指针已经以编码形式被复制到存储器中,同时仍将可撤销有界指针保留在有界指针寄存器中。

在一个实施例中,每当将可撤销有界指针从有界指针寄存器之一存储到存储器中时,执行编码操作。当随后从存储器中检索这样的编码有界指针以用于存储回有界指针寄存器60之一内时,则可以在将其写入有界指针寄存器之前对其进行解码。具体地,在其中有界指针格式不包括用于标识有界指针是否被编码的信息的情况下,将总是采用该方法,但替代地,将预先确定可撤销有界指针将始终以编码形式存储在存储器中,并且以非编码形式存储在寄存器中。然而,对于包括E位的有界指针格式,可以将编码有界指针从存储器检索到有界指针寄存器中,尽管该编码形式的有界指针无法用于生成存储器地址,直到其被解码为止。这在某些情况下可以证明是有用的,例如,当在存储器的不同区域之间迁移有界指针时,在此期间,有界指针可以被加载到有界指针寄存器之一中,并然后被存储回不同的存储器地址。

图10是示出一个示例实施方式中的解码操作的流程图。当在步骤500处确定有界指针将被解码时,则处理进行到步骤505,其中,至少范围信息的未编码部分被用于标识相关联的存储器区域的头部。考虑先前参考图7A至图7C讨论的示例,由于限制字段信息是被编码的范围信息的一部分,因此基地址信息将是用于标识头部的信息。然而,相反地,如果限制信息被用于标识头部,则基信息将已被编码,并且该限制地址将在步骤505处被用于标识头部。

在步骤510处,检索头部内容,此后在步骤515处,使用头部315的大令牌字段335中的值对可撤销有界指针的编码部分进行解码。假设大令牌字段335中所保持的值仍然与可撤销有界指针被编码时的大令牌值相同,则这将以其解码形式重新创建可撤销有界指针的相关部分。在步骤520处,确定解码部分是否与存储在头部中的有界指针位值相匹配。考虑图7B的示例,这将涉及比较经解码的限制地址信息与各种权限位值,并且相应的数据被保持在头部315的字段325、330中。

如果在步骤520处由于任何原因而检测到不匹配,则在步骤530处,可撤销有界指针被无效。否则,在步骤525处,确定可撤销有界指针中的小令牌值是否与头部315的小令牌字段320中的值相匹配。如果否,则在步骤530处,这再次使可撤销有界指针无效,但以其他方式处理进行到步骤535,其中,经解码的可撤销有界指针被存储在所选择的有界指针寄存器中,并且从头部中检索到的大令牌值被存储到相关联的存储装置94中的适当位置。此外,在使用E位的实施例中,则可撤销有界指针内的E位在此时将被清除,以确认可撤销有界指针处于解码形式。

图11示意性地示出了先前描述的编码和解码处理。如图11的顶部所示,未编码有界指针600包括先前参考图7C讨论的所有各种字段,包括限制和权限字段610、615,在该示例中,它们形成在将有界指针存储到存储器时进行编码的有界指针的一部分。如前所述,针对此目的,并非所有权限位都被包括。附加存储装置605存储相应的大令牌值,并且该大令牌值被用于执行编码操作620,使得经编码的可撤销有界指针622被存储到存储器。在限制和权限字段610、615之外,这还包括原始未编码有界指针的各个部分,并且代替限制和权限字段610、615,在经编码的可撤销有界指针内存在编码部分625。

当随后决定对经编码的可撤销有界指针622进行解码时,则访问基字段630,并将其用于标识存储在与相应的存储器区域相关联的存储器中的头部635。然后从头部中检索大令牌,并将其用于使用编码部分625来执行解码操作640,以产生经解码的限制和权限信息。

该经解码的限制和权限信息连同小令牌值一起被输入到匹配处理645,其还从头部635接收限制、权限和小令牌信息。在检测到匹配的情况下,则经解码的可撤销有界指针被存储到相关的有界指针寄存器中,并且来自头部635的大令牌值被存储到附加存储装置605中。如图11的底部所示,因此已重新创建了原始未编码有界指针。如果在步骤645处未检测到匹配,则可撤销有界指针被无效/撤销。

如从图11明显的,在使用E位的实施方式中,当可撤销有界指针为未编码形式时,E位被清除,而当有界指针为编码形式时,E位被置位。

编码和相关联的解码操作可以采用多种形式。主要要求是在使用与编码时相同的令牌值的情况下,可以将编码操作产生的编码值解码为原始可撤销有界指针的相同的串联字段值。在一些情况下,可能还希望不能使用任何其他令牌值来将编码值解码为相同的串联字段值。然而,在一些实施方式中,可以考虑不需要该后一限制,以促进对释放后使用场景的足够程度的复原能力。

图12A和图12B示意性地示出了在大令牌中的位数与正被编码的有界指针的相关部分中的位数不直接相同的情况下可以使用的两个示例编码方案。具体地,一种合适的编码方案将是使用在有界指针的相关位与大令牌的相关位之间应用的XOR二进制运算。在大令牌内的位数与有界指针的相关部分内的位数相同的情况下,这很简单。相反,如图12A所示,如果需要编码的有界指针中的位数700超过大令牌中的位数705,则在一个实施方式中,可以使用任何合适的方案(例如,旋转)扩展大令牌,以添加附加位710。此后,可以在有界指针部分700中的每个对应的位对与由部分705、710形成的扩展大令牌之间应用XOR操作715,以产生编码位720。

图12B示出了一种替代方法,其中,大令牌大于需要编码的有界指针的相关位数。在这种情况下,使用相关的有界指针位700和大令牌的相应位数730来应用XOR运算740,以便生成中间编码745。大令牌735的其余的位然后可以用于对中间编码执行补充操作(在所示示例中,这是旋转750),以便产生编码位755。

利用图12A和图12B的两种方法,将理解,可以执行相应的解码操作,假设使用相同的大令牌,则将使得重新创建原始有界指针位700。

然而,应注意,提供图12A和图12B仅是为了示出合适的编码方案的特定示例,并且应理解,可以使用任何其他合适的编码方案,只要其能够使用与在编码处理期间相同的令牌值来重新创建有界指针位。

在许多情况下,能够可靠地撤销有界指针以确保它在相应的存储器区域被解除分配后不被使用是非常有益的。在图13中示出了一个示例使用情况,其中,第一装置800具有相关联存储器815,并且能够分配其想要临时允许从第二装置805访问的存储器区域820。根据本文描述的方案,第一装置800可以生成可撤销有界指针810,以与存储器区域820相关联地使用,并且作为本文描述的机制的结果,还将与存储器区域820相关联地创建头部825。

可撤销有界指针810然后可以传递到第二装置805,以使第二装置805能够访问存储器区域820。然后,当使用可撤销有界指针来生成存储器地址时,第二装置将在硬件中执行使用认证检查830。

结果,当在适当时候第一装置800决定解除分配存储器区域820时,先前描述的机制将确保如果后续第二装置805试图使用可撤销有界指针810,则使用认证检查830将失败,使得可撤销有界指针被撤销,从而防止其被第二装置805进一步使用。

在参考附图所讨论的示例中,假定在将可撤销有界指针存储到存储器时,可撤销有界指针的被编码的部分是预先确定的。具体地,参考图7B,在该示例中,假设是限制地址信息和预定权限位构成有界指针的被编码的部分。然而,在替代实施方式中,所使用的实际位可以是可配置的。例如,头部可以包括控制字段,该控制字段标识可撤销有界指针的哪些位已被用于形成存储在头部中的可撤销有界指针的复制部分。例如,掩码字段可用于精确地标识可撤销有界指针的哪些位由头部315的字段325、330中的值表示,并且这些位不必预先确定为限制地址和某些权限位。由于存在掩码字段,因此可以在编码时确定可撤销有界指针的哪些位将用作编码操作的输入,并且类似地,在解码时,可以确定哪些位要进行解码操作,以确保在解码操作期间使用的令牌值与在较早的编码操作中使用的令牌值相同时,重新创建原始位。

本文所述的技术提供了一种用于显著减轻出现释放后使用场景的可能性的机制。防止释放后使用场景的概率取决于所使用的令牌的大小。因此,在令牌大小和防止出现任何释放后使用场景的概率之间存在权衡。因此,可以根据实施方式适当地选择令牌大小。在一些实施方式中,仅使用小令牌可能是足够的,并且在这种情况下,将不需要如上所述的编码和解码操作,因为小令牌可以完全容纳在可撤销有界指针内。然而,通常认为同时使用大令牌和小令牌来生成适当大小的整体令牌是适当的。仅作为示例,如果串联的大令牌和小令牌字段的大小为40个位,则生成具有特定选择值的令牌的概率约为1亿分之一。

如果需要,则可以采取其他步骤来减少攻击者规避本文所述措施的可能性。例如,攻击者可能重新创建大量随机值,并指定不同的令牌值来持续重试存储器访问。然而,如果需要,则处理装置可以被布置为防止这种活动,例如,通过在第一访问失败之后停止攻击组件执行进一步的尝试。

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

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

相关技术
  • 用于控制对有界指针的使用的装置和方法
  • 用于控制有界指针的使用的设备及方法
技术分类

06120112303549