标签检查装置及方法与流程

文档序号:33712835发布日期:2023-04-01 00:39阅读:42来源:国知局
标签检查装置及方法与流程
标签检查装置及方法
1.本技术涉及数据处理领域。更具体地,本发明涉及执行标签检查。
2.待由数据处理装置执行的软件通常可以高级编程语言编写,然后根据由待在其上执行软件的装置支持的指令集架构编译成代码。例如,软件最初可以较高级别的语言诸如java、c或c++编写,并且随后被编译成本地支持的指令集架构(isa),诸如x86或一些较高级别的编程语言,诸如java,被认为是内存安全语言,因为它们包括用于检查与内存访问相关的某些错误的运行时间错误检测检查。相比之下,内存不安全语言,诸如c和c++,不包括此类运行时间错误检查。长期以来盛行使用内存不安全语言意味着在根据给定指令集架构的编译代码中,可能存在大量存储器相关错误,其可能容易被攻击者或其它恶意方利用。此类错误可以包括:
3.●
边界违例,其中由代码提供的阵列索引在阵列的合法边界之外;
4.●
释放后使用错误,其中对存储器位置的访问是在该存储器位置已经被解除分配或释放之后进行的;
5.●
返回后使用,其中对与在函数内使用的变量(诸如栈上的值)相关联的地址的存储器访问是在已经从函数返回之后进行的;
6.●
范围外使用错误,其中变量在其中它们被声明的范围之外被访问;和
7.●
初始化前使用错误,其中与变量相关联的存储器地址在变量被初始化之前被访问。
8.这些仅仅是存储器相关错误的一些示例,这些错误可能导致不可预测的行为,并且潜在地为攻击者提供利用途径。
9.至少一些示例提供了一种装置,该装置包括:标签检查电路,该标签检查电路响应于目标地址以:识别与一个或多个存储器位置的块相关联地被存储在存储器系统中的防护标签,该块包含由该目标地址识别的目标存储器位置;基于该防护标签和与该目标地址相关联的地址标签来执行标签检查;以及响应于在该标签检查中检测到失配,执行错误响应动作;以及标签映射存储电路,该标签映射存储电路用于存储指示防护标签值与对应的地址标签值之间的映射的映射信息;其中该标签检查电路被配置为:基于由该标签映射存储电路存储的该映射信息来重新映射该防护标签和该地址标签中的至少一者,以生成在该标签检查中使用的重新映射的标签。
10.至少一些示例提供了一种方法,该方法包括以下步骤:响应于目标地址:识别与一个或多个存储器位置的块相关联地被存储在存储器系统中的防护标签,该块包含由该目标地址识别的目标存储器位置;基于该防护标签和与该目标地址相关联的地址标签来执行标签检查;以及响应于在该标签检查中检测到失配,执行错误响应动作;其中该方法包括:基于指示防护标签值与对应的地址标签值之间的映射的映射信息来重新映射该防护标签和该地址标签中的至少一者,以生成在该标签检查中使用的重新映射的标签。
11.至少一些示例提供了一种用于控制主机数据处理装置以提供指令执行环境的计算机程序,该计算机程序包括:标签检查程序逻辑,该标签检查程序逻辑响应于目标地址以:识别与一个或多个存储器位置的块相关联地被存储在存储器系统中的防护标签,该块
包含由该目标地址识别的目标存储器位置;以及基于该防护标签和与该目标地址相关联的地址标签来执行标签检查;响应于在该标签检查中检测到失配,执行错误响应动作;和标签映射保持程序逻辑,该标签映射保持程序逻辑用于保持指示防护标签值与对应的地址标签值之间的映射的映射信息;其中该标签检查程序逻辑被配置为:基于由该标签映射保持程序逻辑保持的该映射信息来重新映射该防护标签和该地址标签中的至少一者,以生成在该标签检查中使用的重新映射的标签。
12.存储介质可以存储上述计算机程序。该存储介质可以是非暂态存储介质。
13.本技术的另外的方面、特征和优点将从以下结合附图阅读的示例的描述中显而易见。
14.图1示意性地示出数据处理装置的示例;
15.图2示出示例性标签检查,其涉及基于防护标签和地址标签进行的比较;
16.图3是示出执行标签检查的方法的流程图,该标签检查涉及重新映射地址标签和防护标签中的至少一者;
17.图4示出示例性标签检查,其中防护标签被重新映射;
18.图5示出示例性标签检查,其中重新映射的防护标签以及地址标签比防护标签长;
19.图6示出另一示例性标签检查,其中重新映射的防护标签以及地址标签比防护标签长;
20.图7示出示例性标签检查,其中地址标签被重新映射;
21.图8示出示例性标签检查,其涉及基于许可信息进行的检查;
22.图9示出另一示例性标签检查,其涉及基于许可信息进行的检查;
23.图10示出示例性标签检查,其涉及基于请求的访问类型来选择要使用的映射信息集;
24.图11示出示例性标签检查,其涉及基于正被执行的线程来选择要使用的映射信息集;
25.图12示意性地示出用于设定标签映射的装置;
26.图13示出设定标签映射的示例,其中每个防护标签值与不同的地址标签值相关联;
27.图14示出设定标签映射的示例,其中特定的地址标签值被排除在选择之外;
28.图15示出更新标签映射的示例,其中特定的防护标签值被排除在更新之外;
29.图16示出设定标签映射的示例,其中所有防护标签值都被映射到同一地址标签值;并且
30.图17示出支持标签检查和标签重新映射的模拟器的示例。
31.下面描述一些具体示例。应当理解,本发明不限于这些确切示例。
32.一种用于防止上文所论述类型的特定存储器使用错误的方法,该方法涉及提供与一个或多个存储器位置的块相关联地被存储在存储器系统中的防护标签。可以基于识别存储器系统中的特定寻址位置的目标地址来执行标签检查(例如当请求经标签防护的存储器访问操作时),并且标签检查电路可以执行基于以下两者的比较:与目标地址相关联的地址标签;和与一个或多个存储器位置的块相关联地被存储在存储器系统中的防护标签,该块包括由目标地址识别的寻址位置。标签检查电路可以生成是否在防护标签与地址标签之间
检测到匹配的指示。该指示可用于控制是否允许存储器访问成功或后续操作是否可以成功,或者仅可在允许存储器访问正常继续时才进行报告。因此,响应于在对防护标签和地址标签执行的标签检查中检测到失配,可以执行错误响应动作。
33.这可能是有用的,因为例如,基于内存不安全语言(诸如c或c++)编译代码的编译器在初始化存储器区域时,可以将期望代码访问的存储器的块的防护标签设定为特定值,并且可以将对应的地址标签值与指向这些块的目标地址相关联。如果发生存储器使用错误,并且例如地址指针被超出范围使用或者扩展超出被初始化的有效范围的边界,则与寻址位置相关联的防护标签可能与目标地址相关联的地址标签不匹配,并且随后在这种情况下,是否检测到匹配的指示可用于触发一些错误处理响应或错误报告机制。所采取的特定响应可以取决于正被执行的软件的特定需要或者取决于架构的特定微架构具体实施。因此,即使高级语言不具有用于执行运行时错误检查以便防止存储器访问错误的手段,用于经编译代码的isa也可以包括用于执行此类检查的架构特征。
34.然而,可能期望防止进程的特定线程重复使用由进程的其它线程使用的地址标签来访问与那些其它线程相关联的数据。虽然每个进程通常具有其自己的指定针对该进程的许可信息的相关联页面表集,但是进程的线程共享进程的页面表,并且因此存储在与进程相关联的页面表中的许可信息对于该进程的所有线程而言是共同的。因此,由存储器管理单元(mmu)实现的许可可能不适用于在同一进程的线程之间实施保护。
35.其中可能期望防止进程的线程访问与进程的其他线程相关联的数据的一个示例是在浏览器选项卡的上下文中。为了在网页上运行代码(诸如javascript代码),浏览器可以实现虚拟机,该虚拟机将代码转换成能够由虚拟机执行的形式并且随后执行代码。即使没有足够的资源来通过在单独进程中运行每个浏览器选项卡以实现完全进程分离,保持浏览器选项卡分离也可以是有用的,以确保与一个浏览器选项卡相关联的代码不会意外地或恶意地访问与另一浏览器选项卡相关联的数据。
36.本技术提供了对以下的支持:标签检查中所涉及的防护标签和地址标签中的至少一者的重新映射,以及使标签检查基于至少一个重新映射的标签。以这种方式,标签之间的不同映射可以用于要保持彼此分离的线程。即使线程要试图重复使用由不同线程使用的导致地址标签和与目标地址相关联的防护标签之间的匹配的目标地址和地址标签组合,防护标签和地址标签中的至少一者也可以以不同方式被重新映射,使得当标签被重复使用时标签检查检测到失配(即使两个线程正在访问存储器中的相同物理地址)。因此,可以识别尝试访问属于另一线程的数据的线程并且采取适当动作(例如,两个线程可对应于如以上示例中的浏览器选项卡)。
37.该方法使得能够对代码的部分进行沙箱化,而不需要针对每个沙箱使用不同的进程,并且避免了必须重新布置存储器中的防护标签或针对每个沙箱保持单独页面表集的开销。这种方法还允许对存储器的访问权限以比页面表(其通常是指例如4kb、16kb或64kb的区域)所使用的页面级颗粒度更精细的颗粒度逐个线程地受到控制,因为不同的防护标签值可以被指派到单个页面的不同部分并且受到针对不同线程的防护标签/地址标签之间的不同映射。
38.根据本文所述的技术,一种装置可以包括响应于目标地址而操作的标签检查电路。目标地址可以识别目标存储器位置,该目标存储器位置可以是存储器系统中针对其寻
求访问的位置或存储器系统中针对其要进行标签检查的位置(例如,目标地址可以识别预期其可能通过未来存储器访问被访问的存储器位置,对于标签检查而言不必与存储器访问本身被同时执行)。存储器系统可包括主存储器以及高速缓存结构。在一个示例中,存储器系统包括主存储器、1级指令高速缓存、1级数据高速缓存和共享2级高速缓存。应当理解,其他高速缓存分级结构是可能的。
39.如上文所论述,防护标签可以与一个或多个存储器位置的块相关联地被存储。以这种方式,存储器位置可以是带有防护标签的块的一部分,该防护标签用于依据是否提供用于访问该块的适当地址标签来约束对该块的访问。
40.在一些实施方案中,具有对应的防护标签的存储器位置的块可以各自包括单个存储器位置。在这种情况下,每个单独的存储器位置可以具有不同的防护标签,其可以提供设定防护标签的精细颗粒度,使得可以检测到较大范围的存储器错误。
41.然而,在实施过程中,针对每个寻址位置设定单独的防护标签的开销可能太高,并且将每个防护标签与多个存储器位置的块相关联可以是更高效的。在这种情况下,若干相邻存储器位置可以共享同一防护标签,这对于检测共同形式的与存储器相关的错误而言可以是足够的。
42.与给定存储器位置的块相关联的防护标签可以被存储在存储器系统内的任何其它存储器位置处。其中选择存储器系统中的防护标签的位置的特定方式可以因具体实施或在运行时间时而显著不同。在一些示例中,存储防护标签的位置可以在架构上能够由处理电路进行访问,例如,防护标签存储位置可以是映射到与寻址位置相同的地址空间的部分的位置。在这种情况下,寻址位置本身与对应的标签存储位置的地址之间的映射可以是固定的或硬连线的,或者可以是可变的,例如可以在由存储器访问电路保持的跟踪表中或在转换后备缓冲器中被跟踪。另选地,其它具体实施可以将与给定寻址位置相关联的防护标签存储在处理电路在架构上不能进行访问的另外的存储位置,例如存储在微架构中设置的附加的存储中,该附加的存储未被映射到可以由处理电路所执行的指令寻址的地址空间。在这种情况下,存储器访问电路可以基于寻址位置的地址来确定用于指代对应的标签存储位置的特定内部地址,并且触发从标签存储位置读取标签数据所需的任何附加的存储器访问。不管标签存储位置是否在架构上能够由处理电路进行访问,标签值也可以被缓存在高速缓存内以便较快地访问,标签值可以被缓存在用于数据值的同一高速缓存内,也可以被缓存在专用标签高速缓存中。
43.在一些情况下,防护标签可以是相对小的,例如4位或8位,并且因此各自与不同的存储器位置的块相关联的多个防护标签可以适配在同一存储器位置内。
44.地址标签可以以不同的方式与目标地址相关联。在一些情况下,可以独立于目标地址来指定地址标签,例如使用由触发存储器访问操作和防护标签检查的存储器访问指令指定的单独寄存器。然而,在其它示例中,可以根据目标地址的一个或多个所选择的位来确定地址标签。即,地址标签可以包括从目标地址本身的一部分导出的信息。通常,虽然指令集架构可以支持带有特定数量的位(例如,64位)的地址,但给定的硬件设备在实施过程中可能不需要如此多的存储容量以致该硬件设备将使用可以使用该数量的位来表示的所有可能地址。例如,在当前设备使用趋势的情况下,尚不存在对提供2
64
个单独的可寻址的位置的任何需要。因此,通常存储器地址的一些位可能实际上未被使用,并且可能总是具有同一
值,或者可能被设定为最高有效“真实”地址位的符号扩展(使得未被使用部分被设定为全0或全1)。因此,该未被使用部分可以被重复使用以表示地址标签或用于导出地址标签的值,以避免为了获得地址标签而需要访问单独的寄存器,并且还使得更容易跟踪地址与对应的地址标签之间的对应关系,因为每当地址被操纵或在寄存器之间移动时,地址标签就可以根据定义与地址一起被传送。
45.在使用目标地址的一部分来确定地址标签的实施方案中,需注意,该地址标签不同于目标地址的以下标签部分:该标签部分可以由高速缓存用于确定来自由目标地址识别的寻址位置的信息是否被存储在高速缓存内。许多高速缓存方案可以将已缓存的数据片的地址的标签部分与该数据一起存储在高速缓存内,使得在针对给定地址搜索高速缓存时,可以将地址的一部分和与已缓存的数据一起存储的标签进行比较,以便确定已缓存的数据是否实际上对应于所要求的地址。然而,在这种情况下,与高速缓存中的标签进行比较的地址的标签部分将是实际上识别对于其而言需要数据的特定寻址位置的地址部分的一部分,即,根据定义,改变地址的高速缓存标签部分将导致地址指向存储器系统内的不同的寻址位置。相比之下,在用于经标签防护的存储器操作的地址标签的情况下,存储器访问电路可以独立于地址标签而选择对于其而言需要数据的寻址位置。即,即使地址标签具有不同的值,由目标地址引用的寻址位置仍然可以是相同的,因为对寻址位置的选择可以仅取决于目标地址的其他部分。这给予编译器自由以将与特定地址相关联的地址标签设定为任何值(例如,上文所论述的随机选择的值),来匹配已被分配给存储器系统中的相关数据块的对应的防护标签值。
46.根据本文所述的技术,装置还可以包括标签映射电路,该标签映射电路用于存储指示防护标签值与对应的地址标签值之间的映射的映射信息。借助于该映射信息,标签映射存储电路因此能够指示当针对特定防护标签值执行标签检查时哪些地址标签值将导致匹配。在典型的经标签防护的存储器系统中,标签检查将仅检查提供的地址标签是否与防护标签相同。然而,通过以这种方式存储映射信息,可以在防护标签值与它们的对应的地址标签值之间形成更复杂的关系,例如,基于请求所源自的线程来改变映射。
47.映射信息可包括多个字段,重新映射的标签值针对与它们相关联的防护标签和地址标签中的至少一者的值被存储在该多个字段中。另选地或除此之外,映射信息可包括标签值之间的一些其它形式的关系,诸如允许从要被重新映射的标签的值导出重新映射的标签值的数学函数。例如,映射信息可包括映射键值,该映射键值与要被重新映射的防护标签/地址标签的输入标签值一起被散列,其中输入标签值和映射键值的散列提供要被用于标签检查的重新映射的标签值。无论哪种方式,映射存储电路都能够实现具有改善的存储器安全性,因为当比较针对同一存储器位置但由对于其而言映射信息已经改变的不同线程使用的同一地址标签时,由给定线程用于访问特定存储器位置的地址标签不能导致匹配。因此,可以识别由另一线程对属于一个线程的数据进行访问的恶意或无意的尝试,并且如果需要,可以阻止访问。
48.根据本文的技术,标签检查电路被配置为:基于由标签映射存储电路存储的映射信息来重新映射防护标签和地址标签中的至少一者,以生成在标签检查中使用的重新映射的标签。
49.在一些示例中,标签检查电路被配置为重新映射地址标签而不重新映射防护标
签。这种方法可以比重新映射防护标签更快,并且可以允许用于获取防护标签的存储器访问与地址标签被重新映射并行地被执行。然而,在其它示例中,重新映射可以应用于防护标签而不应用于地址标签。通过重新映射防护标签并且将重新映射的防护标签与地址标签进行比较,可以关于可以使用的映射而实现更大灵活性。例如,地址标签和重新映射的防护标签可以比防护标签长。通过增加重新映射的防护标签以及地址标签的长度,可以增加可用标签值的数量,从而允许将在下文中说明的对线程的进一步隔离。在一些示例中,可以重新映射防护标签和地址标签两者。
50.在已重新映射防护标签和地址标签中的至少一者之后,标签检查电路可被配置为基于重新映射的标签来执行标签检查。在其中防护标签和地址标签中的仅一者被重新映射的示例中,该标签检查可以涉及确定重新映射的标签与防护标签和地址标签中未被重新映射的那一者是否具有同一值。在其中地址标签和防护标签两者都被重新映射的示例中,标签检查可以确定这两个重新映射的标签是否具有同一值。尽管上述示例描述了当标签具有同一值时,检测到匹配,但是可以使用针对标签值方面的匹配的其它条件,诸如当地址标签落入由重新映射的防护标签指示的允许值范围内时,检测到匹配,或者当一个标签具有从其它标签导出的值时(诸如通过将偏移应用于标签值),检测到匹配。
51.如果标签检查电路在标签检查中检测到失配,则这可以指示线程正在不正确地尝试访问与另一线程相关联的数据,或者以其他方式指示上文列出的种类的存储器错误。因此,标签检查电路可以响应于检测到失配而执行错误响应动作。在一些示例中,可能期望阻止对于其而言标签检查失败的访问,并且因此错误响应动作包括拒绝对由目标地址指定的存储器位置的访问。然而,在一些示例中,可以许可对由目标地址指定的存储器位置的访问,并且可以记录检测到的失配。这可以有助于向程序员指示以下代码:该代码正在不正确地起作用,或者以其他方式作为识别其中不必限制访问的系统中的恶意或故障代码的过程的一部分。这可以改善性能,因为在执行标签检查时可以允许继续进行访问。
52.通过以这种方式存储映射信息并且使标签检查基于重新映射的标签,本技术能够有效地沙箱化代码的部分并且以高效方式实现存储器保护。
53.如上文所论述,地址标签或防护标签可以被重新映射以产生在标签检查中使用的重新映射的标签。在一些示例中,地址标签和防护标签两者都可以被重新映射以产生在标签检查中与彼此进行比较的重新映射的标签。这可以使得攻击者更难以通过对导致标签检查中的匹配的地址标签和防护标签对进行比较来反向工程化防护标签与地址标签之间的映射。
54.在其中防护标签被重新映射的一些示例中,地址标签比防护标签长,并且重新映射的防护标签比防护标签长。例如,4位防护标签可以存储在存储器系统中。如果要使用4位地址标签,则这提供16个可能的地址标签值。然而,如果要针对地址标签使用8位地址标签,则存在256个可能的地址标签值。4位防护标签然后可以被映射到8位重新映射的防护标签,用于与8位地址标签进行比较。该方法可以提供同一进程的线程之间的具有改善的沙箱化,因为可以针对不同的线程限定不同的非重叠地址标签集。例如,对于第一线程而言,16个地址标签值的第一集合可以被映射到16个防护标签值,并且对于第二线程而言,16个不同的地址标签值的第二集合可以被映射到16个防护标签值。因此,如果与第一线程相关联的地址标签将被第二线程使用,则针对第二线程的映射信息将指示地址标签值未被映射到任何
防护标签。这样,标签检查更可能检测到并且能够处理此类情况。这减少了检测到当比较由一个线程有效使用的地址标签被另一线程使用时的匹配的机会。一般来讲,该方法可以通过以下方式来允许增加的存储器安全性:提供比当地址标签具有与防护标签相同数量的位时所可能的更大的不同线程的隔离。
55.尽管地址标签和重新映射的防护标签可以以这种方式比防护标签长,但是在其中地址标签被重新映射的一些示例中,防护标签和重新映射的地址标签可以比防护标签长。这种方法将受益于增加数量的可能标签值,但可能需要将较长的防护标签存储在存储器系统中。然而,在一些系统中,用于存储地址标签的指针中可用的空间可能是有限的,并且因此为了受益于标签无意匹配的减小的可能性,可能期望将较长的防护标签存储在存储器系统中并且将地址标签重新映射到较长的重新映射的地址标签。
56.因此,一般来讲,当重新映射地址标签/防护标签中的至少一者以形成重新映射的标签时,重新映射的标签可以比被重新映射的原始地址/防护标签长(具有更大数量的位)。
57.在一些示例中,标签检查电路可被配置为响应于存储器访问请求来执行标签检查。例如,存储器访问请求可以是:请求将来自与目标地址相关联的位置的数据加载到寄存器中的加载请求;或请求获取与目标地址相关联的指令的指令获取请求;或请求将数据写入由目标地址识别的特定存储器位置的存储请求。存储器访问请求可以具有多种访问类型中的一种访问类型。例如,存储器访问请求可以具有读访问类型、写访问类型和执行访问类型中的一种访问类型,其中访问类型指示与目标地址相关联的操作的类型(读访问对应于加载请求,写访问对应于存储请求,并且执行访问对应于指令获取请求)。应当理解,其它系统可以支持其它访问类型,并且可以使用多个可能的访问类型集。
58.在一些示例中,对于提供给定防护标签值与给定地址值之间的映射的给定映射信息项目,当存储器访问请求的地址标签指定给定地址标签值时,标签映射信息可以限制存储器访问请求的多种访问类型中的哪些访问类型被允许访问与具有给定防护标签值的防护标签相关联的块中的存储器位置。例如,映射信息项目可以指示与特定防护标签相关联的存储器位置的块将仅被读取。因此,当标签检查电路针对指定存储器位置的块中的存储器位置的目标地址执行标签检查时,即使基于地址标签和防护标签的标签检查检测到匹配,标签检查电路也可以将允许的访问限制于读访问。如果标签检查电路基于标签值检测到匹配,但是所请求的访问类型不是由映射信息项目指示为许可的访问类型的读访问,则标签检查电路可以确定不允许访问。
59.通过限制使用映射信息所许可的访问类型,装置可以提供处于针对其限定单独防护标签的存储器位置的块的颗粒度级别的许可信息。在典型的系统中,许可信息将仅被限定在带有要被应用于整个页面的许可集的页面级。因此,该方法可以允许通过以下方式来实现更精细颗粒度的许可:针对同一页面中的不同地址设定不同的防护标签值,并且将不同的许可与这些防护标签值相关联;或者针对不同类型的访问(例如,读/写/执行)指定不同的防护标签映射/地址标签映射。无论哪种方式,映射信息都用于限制什么类型的访问请求被允许访问与给定防护标签值相关联的存储器的块。
60.映射信息以多种形式来呈现。例如,映射信息可包括地址标签值与防护标签值之间的数学关系,其中地址标签值可以根据防护标签值来确定,反之亦然。这种数学关系可以能够在两个方向上进行使用,以根据防护标签和地址标签中的至少一者的值来确定重新映
射的标签值,以及根据重新映射的标签值来确定防护标签和地址标签中的至少一者的值的值。以这种方式使用数学关系可以允许标签被快速地重新映射并且需要比其它技术更少的存储空间。另选地,数学关系可以仅能够在一个方向上进行使用以确定重新映射的标签值,而可以使得难以或不可能根据重新映射的标签值来推断地址标签和防护标签中的至少一者的值,使得攻击者即使知道针对特定位置的防护标签也无法反向工程化有效的地址标签。
61.在一些示例中,映射信息指定存储重新映射的标签值的多个重新映射的标签值字段,该重新映射的标签值可以基于防护标签和地址标签中的至少一者的值来查找。在此类示例中,当重新映射地址标签和防护标签中的至少一者时,标签检查电路可被配置为基于防护标签和地址标签中的至少一者的值来选择多个重新映射的字段中的一个重新映射的字段。以这种方式,标签检查电路可以基于在所选择的重新映射的标签值字段中指定的重新映射的标签值来确定要在标签检查中使用的重新映射的标签。通过以这种方式存储映射信息,映射信息可以通过将重新映射的标签值字段设定为期望值而容易地将防护标签和地址标签中的至少一者的任何可能值与重新映射的标签值相关联。这为在标签值之间使用的映射提供了灵活性,并且允许标签值被容易地更新。该方法还可以允许同一地址标签值被映射到两个或更多个不同的防护标签值,以提供可用于访问更多存储器位置的地址标签。相似地,同一防护标签值可以被映射到两个或更多个不同的地址标签值,这可以被用于允许使用多于一个可能的地址标签值来访问存储器位置的特定块,或者为对同一存储器位置的不同类型的访问提供不同的地址标签值。另外的信息,诸如许可信息,也可以通过提供字段来与每个映射信息项目相关联地被存储,该字段可以以与对重新映射的标签值的选择相似的方式,使用防护标签和地址标签中的至少一者的值来选择。
62.除了将重新映射的标签值存储在映射信息的多个重新映射的标签值字段中之外,映射信息的字段还可以用于与重新映射的标签值相关联地存储许可信息。因此,每个字段不仅可以指定要在比较中使用的重新映射的标签值,还可以指定对允许的存储器访问类型的指示。例如,对于每个映射信息项目而言,可以提供一个或多个位来指示许可信息。这允许标签检查电路不仅确保执行的代码的一部分应当能够访问给定存储器位置的块,还确保代码的该部分对于所寻求的访问类型而言具有足够的访问权限。例如,标签检查电路可以接收针对给定位置的写访问请求。标签检查电路可以在执行标签比较时检测匹配。然而,与给定位置相对应的重新映射的标签值可以指示在使用该地址标签的情况下,对于该存储器位置而言,仅允许进行读访问和执行访问。响应于检测到所请求的访问类型与许可信息之间的这种失配,标签检查电路可以采取错误响应动作。错误响应动作可以与响应于在标签比较中检测到失配而采取的错误响应动作相同,或者可以是不同的错误响应动作。
63.这些技术可用于实施写排他性,由此存储器位置可以受到写访问或执行访问,但可被写入的存储器位置不用于执行,并且存储可被执行的代码的存储器位置不被写入。这减少了攻击者可能提供能够被执行的恶意代码的机会。
64.应当理解,与重新映射的标签值相关联地存储许可信息仅为限制允许的存储器访问类型的多种可能的方式中的一种可能的方式。在一些示例中,标签映射存储电路被配置为存储与不同的访问类型相对应的不同的映射信息集。例如,在利用读访问类型、写访问类型和执行访问类型的系统中,标签映射存储装置可被配置为针对读访问类型、写访问类型
和执行访问类型中的每一者存储映射信息集。当执行标签检查时,标签检查电路可被配置为:基于与存储器访问请求相关联的访问类型,选择要使用哪个映射信息集来生成在标签检查中使用的重新映射的标签。即,标签检查电路可以选择与所请求的访问类型相对应的映射信息集,使得例如当请求读访问时,对应于读访问类型的映射信息被用于重新映射。以这种方式,可以为多种不同访问类型中的每种访问类型提供不同的映射信息集,使得例如如果对于对给定存储器位置的读访问有效的地址标签被重复使用以尝试写入同一存储器位置,则将使用不同的映射信息来生成在标签检查中使用的重新映射的标签,并且因此针对写访问的映射信息可以使得在标签检查中检测到失配。这意味着可以针对页面的各个子部分有效地限定单独的读权限/写权限/执行权限,这在例如由mmu使用页面表限定的许可的情况下将是不可能的。
65.本文所述的技术对于沙箱化同一进程的不同线程而言可以是特别有用的。在处理器上运行的进程可以具有相关联的页面表集,该页面表集允许由进程用于指代存储器位置的虚拟地址被转换成可用于访问物理存储器的物理地址。这些页面表可用于提供在处理器上运行的不同进程之间的分离。然而,这种方法不在进程内提供保护来防止进程的线程访问与同一进程的其它线程相关联的数据。
66.例如,就浏览器选项卡而言,可能期望沙箱化进程的线程或防止进程的线程访问同一进程的其它线程的数据,该进程的线程因此共享同一页面表集。浏览器可以实现诸如javascript引擎之类的单个虚拟机,以运行存在于加载在浏览器的不同选项卡中的网页中的javascript代码。虽然可能期望分离在不同的浏览器选项卡中运行的代码,但是针对每个选项卡使用利用不同的页面表集进行的全进程分离可能过于资源密集而无法针对每个选项卡来实现。然而,根据本文所述的技术,每个浏览器选项卡例如可以在线程中实现,并且每个线程可以被沙箱化以提供浏览器选项卡之间的存储器保护。
67.根据一些示例,存储在标签映射存储电路中的映射信息与能够由处理电路执行的特定线程(例如,运行来自一个浏览器选项卡的代码的线程)相关联。映射信息可以指示响应于由处理电路在执行特定线程时生成的目标地址而供使用的映射。因此,标签检查电路可以确保与正被执行的线程相关联的映射信息集被用于生成在标签检查中使用的重新映射的标签值。通过为不同的线程提供单独的映射信息集,如果线程使用该线程针对其可以访问的另一位置所使用的地址标签来尝试访问其不应访问的存储器位置,或者尝试重复使用来自不同线程的目标地址和地址标签组合,则这可以被检测到并且可以执行错误响应动作。
68.应当理解,尽管浏览器中的选项卡是其中进程可以具有多个线程的一个示例,但是线程之间的沙箱化可用于一系列可能的目的。此外,一些低功率或小占用区设备不能使用页面表并且通过使用本文所述的技术来提供线程之间的分离而以另外的方式实现任何形式的存储器管理,此类设备可以能够在没有处理页面表的开销的情况下实施更精细颗粒度的存储器保护。
69.在一些示例中,标签映射存储电路可以包括用于一次存储一个映射信息集的存储电路。例如,标签映射存储电路可以包括寄存器,该寄存器用于存储与此时在处理电路上执行的线程相关联的映射。当处理电路切换以执行不同的线程时,装置可以致使与该线程相关联的映射信息集被加载到寄存器中以替换与不再正被执行的线程相关联的映射信息。通
过一次仅将一个映射信息集存储在标签映射存储电路中,可以简化标签映射存储电路。此外,因为其它信息(诸如寄存器状态、用于控制将如何处理新线程的控制状态以及与新线程相关的上下文标识)通常将被加载到上下文切换上,所以在上下文切换处加载新映射信息不会在切换线程时引起严重的性能问题。
70.另选地,标签映射存储电路可被配置为存储多个映射信息集,每个映射信息集对应于不同的线程。因此,标签检查电路可被配置为基于存储在与触发标签检查的线程相关联的标签映射存储电路中的多个映射寄存器中的一个映射寄存器中的映射信息来进行标签检查。通过将映射信息存储在标签映射存储电路中用于多于一个线程,装置可以在执行不同线程之间更快速地转变,因为不需要将新的映射信息集加载在上下文切换上。
71.例如,同步多线程(smt)处理器可以将针对每个线程的映射信息与针对线程所存储的架构状态一起进行存储。在smt处理器中,多个线程可以在用对应的线程的线程标识(id)标记的指令的情况下同时执行。smt核心通常具有多个寄存器集以同时存储针对多个线程的架构状态,其中基于指令的线程id针对每个指令参考适当的寄存器集。因此,smt处理器的流水线能够使与多个线程相关的处理交织,并且可以同时具有针对多个线程的“飞行中”指令。这样,除存储架构状态的寄存器之外,smt还可以为硬件中支持的不同线程提供映射寄存器。然后可以基于存储在使用触发标签检查的指令的线程id所选择的寄存器中的映射信息来执行标签检查。
72.在一些示例中,装置提供用于更新或生成映射信息的便利。这种标签映射设定电路可用于改变防护标签值和地址标签值中的至少一者与重新映射的标签值之间的一些或全部映射,或者可用于产生全新的映射集。标签映射设定电路可以响应于针对新的或更新的映射信息集的多种类型的请求而以由请求指示的方式生成或更新映射信息。对由处理电路支持的指令进行限定的isa可包含指令以允许程序员指定应当生成或更新映射信息,或者请求可以实现为微架构特征以实现以较高级指定的程序员意图。在一些示例中,isa不包括用于设定映射的专用指令,并且映射寄存器可以替代地被视为控制寄存器,该控制寄存器可以使用指定要写入寄存器的值的控制寄存器设定指令来更新。在其它示例中,可以支持专用映射设定指令,该专用映射设定指令致使硬件生成要在映射信息中指定的值,而不需要软件提供要在映射信息中设定的精确值作为映射设定指令的操作数。现在将论述请求的类型和标签映射设定电路的响应的示例。
73.在一些示例中,标签映射设定电路被配置为响应于请求,通过“置乱(shuffling)”可用的重新映射的标签值来生成新的映射信息集(该请求针对这种新映射)。即,标签映射设定电路可以设定标签映射存储电路以指示新的映射信息集,该新的映射信息集指示防护标签和地址标签中的至少一者的每个值与不同的重新映射的标签值相关联。通过将防护标签和地址标签中的至少一者的每个值与不同的重新映射的标签值相关联,减少了地址标签的误用未被检测到的机会。具体地讲,该方法确保防护标签和地址标签中的至少一者的两个值不被映射到同一重新映射的标签值。继而,这减少了当指针用于访问其不打算访问的存储器区域时将检测到匹配的机会。如果两个防护标签值被映射到同一重新映射的标签值,例如,如果地址标签被有效地生成以访问与这些防护标签值中的第一防护标签值相关联的块,那么如果地址标签要被用于访问与防护标签值中的第二防护标签值相关联的块,则仍然可以检测到匹配,即使对这些位置的访问本应触发错误处理响应以发信号通知存储
器使用错误。
74.当更新映射信息集时,可能期望能够指定将不使用的重新映射的标签的一个或多个值。这可以是这样的情况,其中特定的重新映射的标签值被预留用于特定目的(例如,因为用于对于其而言不期望发生标签混淆(aliasing)的先前分配的存储器区域),并且期望地址标签和防护标签中的至少一者的值都不被映射到那些重新映射的标签值。这可以由标签映射更新请求来指示,该标签映射更新请求指定要被排除在选择之外的一个或多个排除的标签值作为重新映射的标签值。响应于该请求,标签映射设定电路可以指示新的映射信息集,该新的映射信息集指示防护标签和地址标签中的一者的每个值与除该一个或多个排除的标签值之外的重新映射的标签值相关联。应当理解,如果要在特定的标签值被排除的情况下生成新的映射信息集,并且期望将每个标签值映射到不同的重新映射的标签值,则例如通过使用较长的重新映射的标签,应当有比要被重新映射的标签值更多的重新映射的标签值可用。
75.在一些示例中,标签映射设定电路响应于针对新映射的请求,该请求指示特定的存储器位置将不被访问而不管提供的地址标签如何。例如,可以确定与映射信息集相关联的特定线程应不能访问特定的存储器位置,而不管与针对访问那些存储器位置的请求相关联地提供的地址标签如何。为了实现该行为,装置可以包括标签映射设定电路,该标签映射设定电路被配置为响应于指定一个或多个排除的标签值的标签映射更新请求而设定标签映射存储电路以指示新的映射信息集,该新的映射信息集指示当标签检查识别出防护标签和地址标签中的至少一者具有所述一个或多个排除的标签值中的一个排除的标签值时,对目标地址的存储器访问不被许可。映射信息可以指示这些存储器位置将不以多种方式被访问。例如,映射信息集可以经设定以使得与禁止的存储器位置相关联的一个或多个标签值不具有将导致标签检查中的匹配的对应的标签值。这可以通过将映射信息中的所有字段设定为除排除的标签值之外的值来实现。另选地或除此之外,映射信息可以包括许可信息,该许可信息指示当使用该映射信息集时,不允许对指定的存储器位置进行任何形式的访问。
76.在一些示例中,标签映射设定电路提供便利以在执行标签映射更新时“锁定(pin)”一个或多个现有标签映射。例如,可能期望确保当同一映射信息集中的其他映射被更新时,仍在使用中的映射得以保持并且不被盖写。因此,标签映射设定电路可以被配置为:响应于指定要从更新被排除的一个或多个现有标签映射的标签映射更新请求,设定标签映射存储电路以更新除该一个或多个现有标签映射之外的标签映射。因此,可以生成更新的映射信息集以供存储在标签映射存储电路中,同时保留指定的现有标签映射不变。在一些情况下,当执行这种更新时,标签映射设定电路被配置为避免将已经与“已锁定”标签值相关联的对应的标签值与未被标记为“已锁定”的标签值相映射。例如,如果特定的防护标签值被“锁定”,则除不更新针对“已锁定”防护标签值的映射之外,标签映射设定电路还可以避免将任何“未锁定”防护标签值和与“已锁定”防护标签值相关联的地址标签值相关联。应当理解,这可以在地址标签值为“已锁定”的情况下相似地进行。
77.在一些示例中,装置包括标签映射设定电路,该标签映射设定电路被配置为响应于全匹配标签映射更新请求而设定标签映射存储电路以指示新的映射信息集,该新的映射信息集指示所有的防护标签值都将被映射到同一地址标签值。通过这样做,可以使用单个地址标签值来访问与防护标签中的任何防护标签相关联的存储器位置。在一些情况下,暂
时提供全匹配功能可以是有益的,使得可以确保当使用所有防护标签值被映射到的一个地址标签值时,在标签检查中将不会检测到失配。这对于为不支持标签使用的遗留代码提供支持可以是有用的。
78.如上所述,响应于在标签检查中检测到失配,可以执行错误响应动作。另外,可以响应于检测到以下尝试访问而执行错误响应动作(其可以是相同的或不同的错误响应动作):针对该尝试访问所请求的访问类型未被许可信息指示为可允许。错误响应动作可以涉及多个可能的动作中的一个或多个可能的动作。错误响应动作可以涉及拒绝对由目标地址指定的存储器位置的访问。在标签检查失败的情况下拒绝对所请求的存储器位置的访问可以改善存储器安全性。然而,由于需要从存储器获取防护标签,所以标签检查需要一些时间来执行,并且延迟实际存储器访问直到通过标签检查对于一些具体实施而言可能招致无法接受的执行成本。因为标签检查有时可用于识别代码中的存储器错误(代码中的存储器错误本身可能不是显著的安全性问题),但可能存在攻击者可能在未来进行利用的风险,所以只是提供失配的指示同时仍允许继续进行访问可以是足够的。这可以改善性能。因此,错误响应动作可以涉及:将标签检查检测到失配的指示置于状态寄存器中;在错误报告中记录条目;或者以其他方式通过发送信号通知故障。错误响应动作可以指示:检测到了失配;以及导致失配的指令被存储的位置和/或针对其寻求访问的位置的地址。在一些示例中,装置能够在多种模式下操作,其中不同的错误响应动作在不同的模式下被执行。例如,装置可以能够在以下模式下操作:不精确模式和精确模式;在不精确模式下,尽管检测到失配,但仍允许继续进行访问;在精确模式下,响应于检测到失配而拒绝对由目标地址指定的存储器位置的访问。应当理解,存在可以响应于检测到失配而进行的多个可能的错误响应动作,并且多于一个此类错误响应动作可以响应于检测到失配而进行。
79.图1示意性地示出数据处理装置2的示例。应当理解,这只是装置部件的子集的高级表示,并且装置可包括未示出的许多其它部件。装置2包括处理电路4,该处理电路用于响应于由指令解码器6解码的指令来执行数据处理。指令解码器6对从指令高速缓存8获取的指令进行解码,以生成用于控制处理电路4执行由指令表示的对应的处理操作的控制信号。处理电路4可以包括一个或多个执行单元,该一个或多个执行单元用于对存储在寄存器14中的值执行操作以生成要被写回到寄存器的结果值。例如,执行单元可以包括:用于执行算术运算或逻辑运算的算术/逻辑单元(alu)、用于使用浮点操作数执行运算的浮点单元和/或用于对包括多个独立数据元的操作数执行矢量运算的矢量处理单元。处理电路也包括存储器访问单元(或加载/存储单元)15,该存储器访问单元用于控制寄存器14与存储器系统之间的数据传输。在该示例中,存储器系统包括指令高速缓存8、1级数据高速缓存16、在数据与指令之间被共享的2级高速缓存17以及主存储器18。应当理解,其他高速缓存分级结构也是可能的(这仅是一个示例)。存储器管理单元(mmu)20被设置用于提供地址转换功能以支持由加载/存储单元15触发的存储器访问。mmu具有转换后备缓冲器(tlb)22,该转换后备缓冲器用于高速缓存来自存储在存储器系统16、17、18中的页面表的条目的子集。每个页面表条目可以提供针对对应的地址页面的地址转换映射,并且还可以指定访问控制参数,诸如指定页面是只读区还是既可读又可写入的访问许可,或指定哪些特权级别可以访问页面的访问许可。
80.图2示出基于比较防护标签和地址标签的示例性标签检查。用于指代存储器系统
内的存储器位置的物理地址空间可以在逻辑上划分为多个块30,每个块包括特定数量的能够寻址的位置。为了简洁起见,在图2的示例中,每个块30包括四个存储器位置,但是也可以使用其它块尺寸。每个块30与对应的防护标签32相关联。与特定数量的块30相关联的防护标签可以被聚集在一起并且被存储在同一物理地址空间内的不同的架构上能够访问的存储器位置34内,或者被存储在主存储器18中设置的架构上不能访问(不映射到同一物理地址空间)的附加的存储位置内。在一些情况下,可以优选使用单独的非架构上能够访问的存储装置以避免用尽数据高速缓存16、17中用于高速缓存防护标签值的空间(这可能影响正规码的性能并且可能使一致性管理更加复杂)。可以在微架构中设置附加的标签高速缓存19(图1所示),用于高速缓存针对非架构上能够访问的存储装置的标签值,以便比必须从主存储器18访问标签的情况更快地进行访问。与每个块30相对应的哪些标签存储位置34的特定映射可以由加载/存储单元15控制,并且可以是硬连线的或者可以是可编程的。虽然在图2中每个标签32与物理地址的块相关联,但是也可以提供与虚拟存储器地址空间中的虚拟存储器位置相关联的防护标签32,但这可能需要对于每次存储器访问的一些附加的地址转换。因此,通过将防护标签32与物理存储器位置相关联,这可以改善性能。一般来讲,防护标签32具体如何与物理地址空间的对应的块30相关联对于特定的微架构具体实施而言是一种选择。一般来讲,所需要的是与给定存储器块相关联的防护标签32可以被访问和比较。
81.因此,当需要标签检查时,基于地址标签40(其与识别要访问的寻址位置44的目标地址42相关联)和与包括寻址位置44的存储器位置的块30相关联的防护标签32来执行比较。例如,在图2中,目标地址42指向存储器中的特定位置b1,在图2的地址空间中标记为44。因此,该比较基于与包括位置b1的位置的块b相关联的防护标签b和与目标地址42相关联的地址标签40。地址标签40可以根据目标地址本身的所选择的位来确定。特别地,可以根据目标地址的以下部分内的位来确定地址标签:该部分未被用于指示要被选择为寻址位置44的特定存储器位置。例如,在一些架构中,目标地址的位的顶部部分可以始终具有特定的固定值,诸如符号扩展(全0或全1),并且因此可以通过用任意标签值盖写这些未被使用的位来用地址标签40标记地址。特定标签值可以由程序员或编译器进行选择,或者可以被随机选择。地址标签和防护标签32可以是相对小数量的位,例如四位,并且因此不需要占用存储器内和目标地址内的很多空间。
82.可以响应于针对访问给定存储器位置的请求来执行标签检查以确定该访问是否被允许。在一些具体实施中,可以针对所有存储器访问来执行标签检查。然而,可以优选的是为软件提供配置选项以选择是否执行标签检查。在这种情况下,当通过存储在控制寄存器中的配置信息启用标签检查时,存储器访问可以被视为经标签防护的存储器访问,并且可以针对每次存储器访问的目标地址执行标签检查,但是当通过配置信息禁用标签检查时,则可以在不执行标签检查的情况下执行存储器访问。另外,一些实施方案可以支持以下能力:将存储器访问的子集限定为需要标签检查,并且将其它存储器访问限定为不需要标签检查(例如,可以支持单独的标签检查存储器访问指令和非检查存储器访问指令,以指示在标签检查被启用的情况下存储器访问是否应被视为对于其而言要对目标地址执行标签检查的经标签防护的存储器访问)。
83.存储器访问电路15可以附加地或另选地支持在不触发存储器访问的情况下响应于专用标签检查指令来执行标签检查,该专用标签检查指令指定对于其而言需要标签检查
的目标地址。
84.存储器访问电路15包括标签检查电路62和标签映射存储电路64。标签映射存储电路64被配置为存储指示防护标签和地址标签中的至少一者的值与重新映射的标签值之间的映射的映射信息。映射信息可以提供防护标签与重新映射的防护标签值之间、地址标签与重新映射的地址标签值之间的映射,或者可以提供针对防护标签和地址标签两者的映射信息。标签检查电路62通信地耦接到标签映射存储电路64。
85.因此,响应于带有相关联的地址标签40的目标地址42,在使用映射信息的情况下,标签检查电路62重新映射防护标签32、地址标签40或两者以生成标签检查所基于的重新映射的标签。在防护标签32和地址标签40中的一者被重新映射以形成重新映射的标签的情况下,标签检查电路62将重新映射的标签与防护标签32和地址标签40中未被重新映射的一者进行比较以确定它们是否匹配。在防护标签32和地址标签40两者都被重新映射以产生重新映射的标签值的情况下,比较这两个重新映射的标签值以确定它们是否匹配。如果标签检查电路62在标签检查中检测到失配,则标签检查电路62执行错误响应动作,诸如输出故障信号60(图1所示)。应当理解,存在可以取决于系统的要求而被执行的多个可能的错误响应动作,诸如更新指示是否存在匹配的状态寄存器,或向错误报告添加条目以指示针对其检测到错误的地址和/或触发错误的指令的指令地址。
86.图3是示出执行标签检查的方法的流程图,该标签检查涉及重新映射地址标签和防护标签中的至少一者。在步骤102处,接收到目标地址和地址标签。在一些情况下,地址标签实际上可以从目标地址本身的位的子集导出,但在其它示例中,地址标签可以在单独的寄存器中被指定。目标地址可以指定针对其寻求访问的存储器位置,该存储器位置是具有相关联的防护标签的存储器位置的块的一部分,该防护标签在步骤104处被识别。在步骤106处,防护标签和地址标签中的至少一者被重新映射以产生在步骤108中执行的标签检查中要使用的重新映射的标签。标签检查将重新映射的标签与防护标签和地址标签中未被重新映射的一者进行比较。如步骤110中所示,如果在标签检查中检测到失配,则可以在步骤114中执行错误响应动作,诸如将指示置于状态寄存器中,在错误报告中记录条目,通过发送信号通知故障,或者拒绝访问由目标地址指定的存储器位置。可以以如由图3中的虚线所示的两种方式中的一种方式在步骤112中允许对存储器位置的访问。对存储器位置的访问可以被允许而不管标签检查的结果如何,并且因此甚至可以在进行标签检查之前被许可。通过这样做,可以改善性能,因为可以发起访问而不必等待防护标签从存储器被返回以及标签检查被执行。另选地,可以仅当在步骤110中已检测到匹配时才允许对存储器位置的访问。因此,可以确保仅允许执行针对其提供了适当的地址标签的访问。存储器访问电路15可被配置为实施这些方法中的仅一种方法,或者可以能够在多于一种模式下操作,并且因此当在不同模式下时可以根据两种变型形式来执行方法。
87.如上文所论述,使用存储在标签映射存储电路64中的映射信息来重新映射防护标签和地址标签中的至少一者。图4示出示例性标签检查,其中防护标签被重新映射。图4示出包含具有值0b1001的地址标签40的目标地址42。目标地址42指定存储器18中与具有值0b0011的防护标签32相关联的存储器位置44。在该示例中,地址标签和防护标签两者的长度都是四位,并且因此对于地址标签和防护标签中的每一者而言存在16个可能的值。标签映射存储电路64包括存储映射信息的映射寄存器68。该映射信息用于将防护标签32映射到
重新映射的标签52。在图4所示的示例中,映射信息包括多个位集。每个位集表示映射信息中针对不同的防护标签值指定重新映射的地址标签值的字段。在映射寄存器68中识别对应于防护标签32的映射信息项目。如图4中所描绘的,这对应于重新映射的标签值被存储在其中的映射寄存器68中的位12至位15。然后可以通过比较地址标签40和重新映射的标签52来执行标签检查。在这种情况下,重新映射的标签52具有与地址标签值相同的值1001,并且因此标签检查检测到匹配。
88.在图4所示的示例中,防护标签、地址标签和重新映射的标签52都是相同的长度。然而,在一些示例中,映射信息可以将不同长度的标签映射到彼此。图5示出示例性标签检查,其中重新映射的防护标签以及地址标签比防护标签长。在该示例中,地址标签40为八位长,具有值0b10101001,并且防护标签为四位长,具有值0b0001。存储在映射寄存器68中的映射信息将4位防护标签32映射到在标签检查中使用的8位重新映射的标签52。以这种方式,可以在不用尽存储器中的更多空间来存储较长防护标签的情况下实现具有较长标签值的许多有益效果,诸如能够针对不同的线程指派映射信息中的不同地址标签集。在一些架构中,目标地址的位的顶部部分可以始终具有固定的特定值。这可以发生是因为虽然指令集架构可以支持带有特定数量的位(例如,64位)的地址,但给定的硬件设备在实施过程中可能不需要如此多的存储容量以致其将使用可以使用该数量的位来表示的所有可能地址。例如,在当前设备使用趋势的情况下,尚不存在对提供2
64
个单独的可寻址位置的任何需要。因此,通常存储器地址的一些位可以实际上未被使用。这些位因此可以用于存储地址标签或用于导出地址标签的值,以避免需要访问单独的寄存器以便获得地址标签。未被使用的位的数量可以足以使得可以存储8位或更长的地址标签,而不影响地址的长度或必须使用单独的寄存器来存储地址标签。通过利用较长的地址标签而不使用较长的防护标签,可以改善存储器安全性,而不需要存储器中的更多空间专用于存储防护标签,也不需要针对地址标签的额外存储装置。
89.图6示出另一示例性标签检查,其中重新映射的防护标签以及地址标签比防护标签长。在图6的示例中,为了简洁起见,未示出目标地址和存储器而以图形方式仅示出标签以及它们的比较。在该示例中,防护标签32被重新映射以产生比防护标签32长并且与地址标签40同样长的重新映射的标签52。然后在标签检查中比较地址标签40和重新映射的标签52。在该示例中,因为地址标签40和重新映射的标签52具有同一值,所以在标签检查中检测到匹配而不执行错误响应动作。然而,如果检测到失配(例如因为重新映射的标签52和地址标签40的值不同),则将执行错误响应动作。
90.在图4至图6所示的示例中,防护标签已经被重新映射,并且重新映射的防护标签与地址标签进行比较。这可以提供关于可以如何构造映射的更大灵活性,例如通过使得更易于使用更长的地址标签。然而,如图7所示,地址标签40可以替代地基于存储在标签映射存储电路64中的映射信息来受到重新映射,以产生用于与防护标签32进行比较的重新映射的地址标签52。这可以允许更快地执行标签检查。防护标签32可能需要从标签高速缓存19获取,或者在标签高速缓存19中未发现防护标签的情况下从存储器系统获取。因此,通过重新映射地址标签40,可以至少部分地与防护标签32的获取并行地进行重新映射的过程,从而减少从接收目标地址到确定标签检查中是否存在匹配所花费的时间。尽管未示出,但是在一些示例中,防护标签和地址标签两者都被重新映射以产生在标签检查中针对彼此进行
比较的两个重新映射的标签。
91.图8示出示例性标签检查,其涉及检查许可。除检查标签的值之外,还执行许可检查以确定已经发起标签检查的访问请求的类型是否是允许的访问形式。在图8的示例中,地址标签40是8位地址标签,其与基于4位防护标签32的8位重新映射的标签52进行比较。除存储防护标签值与重新映射的标签值之间的映射以与地址标签值进行比较之外,标签映射存储电路64还包括存储针对每个映射的许可信息的映射寄存器68。如图8所示,与防护标签32相关联的映射信息项目存储对应的重新映射的标签52以及许可信息54。在该示例中,支持三种类型的访问:读、写和执行。许可信息针对每个映射信息项目指示允许这些访问类型中的哪种访问类型发生。在其它示例中,可以支持不同的访问类型和对应的许可。附加地或另选地,与所请求的访问相关的其它信息可以与映射信息一起被提供,诸如指示高速缓存策略的属性,该高速缓存策略适用于与由映射信息项目识别的防护标签相关联的存储器位置的块。除检查重新映射的标签值与地址标签值是否匹配之外,还使用存储在映射寄存器68中的许可信息来执行许可检查,以确定所请求的访问是否被许可。如果确定所请求的访问不被许可,则可以采取错误响应动作,该错误响应动作可以是与当在标签值之间检测到失配时所采取的错误响应动作相同或不同的错误响应动作。
92.通过提供许可信息,可以约束允许的访问类型。这可用于确保被预期仅执行对特定存储器位置的读访问的程序不向那些位置写入代码或执行来自那些位置的代码,或可用于识别代码正在这样做并且可能有故障。许可信息还可用于确保写执行排他性。出于安全性目的,通常期望确保存储在可被写入的存储器区域中的代码不能被执行,以便防止对稍后将由处理器执行的代码的恶意或意外修改。应当理解,可以在存储器位置的块的颗粒度级别处实现许可,因为不同的许可可以与每个块相关联。因此,该方法可以提供比由mmu基于以下页面表所执行的任何许可检查更精细颗粒度的许可控制:对于该页面表而言,任何许可信息都适用于与每个页面表条目相关联的整个存储器区域。基于标签映射信息的任何许可检查都可以被视为除基于由mmu执行的页面表的许可检查之外所执行的附加的形式的许可检查(如果基于标签映射信息的许可检查被执行,则这并不阻止mmu检查也被执行)。
93.图9示出另一示例性标签检查,其涉及与映射信息一起被存储的检查许可信息。在该示例中,存储器访问电路15接收如由访问类型44所示的读访问请求。该访问请求指定由与防护标签32相关联的存储器位置的块30包括的存储器位置。使用由标签映射存储电路64存储的映射信息来重新映射防护标签32以产生重新映射的标签52。在该示例中,标签映射信息指定多个重新映射的标签值字段,该多个重新映射的标签值字段由将与相关联的防护标签值相匹配的地址标签值以及许可信息组成。通过以这种方式构造映射信息,地址标签值和许可信息可以容易地与适当的防护标签值相关联,并且该信息可以容易地针对各个映射信息项目被更新或改变。
94.为了生成重新映射的标签52,在映射信息中查找防护标签值0b0100,并且可以识别出对应的地址标签值是0b10101001,并且对与该防护标签52相关联的存储器位置的块的允许的访问类型是读和写。然后在标签检查中将重新映射的标签52与地址标签40进行比较,并且在许可检查中将由许可信息54指示的允许的访问类型与所请求的访问类型44进行比较。在该示例中,地址标签40和重新映射的标签52相匹配,并且所请求的访问类型44是允许的访问类型,因此不执行错误响应动作。如果这些检查的任一者或两者检测到失配,则可
以进行错误响应动作。
95.图8和图9示出其中字段用于存储针对每个映射信息项目的许可信息的示例。因此,对于同一映射信息集而言,不同的映射信息项目(对应于用于索引到映射信息中的防护标签/地址标签中的一者的不同值)可以具有不同的许可。然而,许可信息可以以多种其它方式来存储。例如,可以针对多种可能的访问类型中的每种可能的访问类型来存储单独的映射信息集。该方法在图10中示出,该图示出标签映射存储电路64,该标签映射存储电路包括针对由装置支持的读访问类型、写访问类型和执行访问类型中的每一者的映射寄存器68。响应于指定地址标签40和访问类型44的访问请求,基于存储在标签映射存储电路64中的适当的映射信息集来重新映射防护标签32。在这种情况下,访问请求是读访问请求,并且因此基于存储在与读访问类型相对应的映射寄存器68中的映射信息集来重新映射防护标签32。针对读访问类型的映射信息集指示针对防护标签32的重新映射的标签值是0b1011,并且因此重新映射的标签52具有值0b1011。在标签检查中将该重新映射的标签值52与地址标签40进行比较。因为标签值相同,所以没有检测到失配,并且因此不实施错误响应动作,因为已经确定已经提供了用于对所请求的目标位置执行所请求的访问类型的适当的地址标签。然而,如果具有值0b1011的同一地址标签40要被用于尝试和执行写访问,则不同的映射信息集将被用于重新映射防护标签32,这可能导致与地址标签40不匹配的不同的重新映射的标签52。如图10所示,如果替代地请求写访问,则存储不同映射信息的不同映射寄存器68将被使用,防护标签32将被重新映射以产生具有值0b0011的重新映射的标签52。因此,标签检查将检测到具有值0b1011的地址标签40与具有值0b0011的重新映射的标签52之间的失配,并且因此将执行错误响应动作。以这种方式,可以标识、防止和/或记录由于以下情况而发生的存储器错误:有效地址标签被重复用于与其被预期针对的访问类型不同的访问类型。
96.除了或代替针对每种访问类型提供映射信息集,每个映射信息集可以与能够由处理电路4执行的特定线程相关联。图11示出示例性标签检查,其涉及基于正被执行的线程来选择要使用的映射。在该示例中,当重新映射防护标签32时,基于在处理电路4上执行的线程来选择要使用的映射信息集。标签映射存储电路64被布置成存储对应于不同线程的多个映射信息集,并且在处理电路4上执行的线程的线程id 46用于标识要使用哪个映射信息集。如图11所示,线程id 64是0x12a7,并且因此与线程0x12a7相关联的映射信息集用于将防护标签32映射到具有值0b1011的重新映射的标签52。在标签检查中将该重新映射的标签值52与地址标签40进行比较。在这种情况下,标签具有同一值,因此没有检测到失配并且不执行错误响应。然而,如果同一地址标签40被在处理电路4上执行的另一线程(诸如具有线程id 0x12a8的线程)使用,则将使用与该线程id相关联的映射信息来重新映射防护标签32以产生重新映射的标签值0b0011。因此,标签检查将检测到重新映射的标签52与地址标签40之间的失配,并且因此将执行错误响应动作。因此,该技术可以检测尝试重复使用地址标签40的线程,该地址标签可能已被有效地生成以供不同的线程使用,这可以帮助将线程彼此沙箱化。
97.如图11所示,标签映射存储电路64被配置为将多个映射信息集存储在一组映射寄存器68中。以这种方式,对应于若干线程的映射信息可以被同时存储在标签映射存储电路64中。替代地,标签映射存储电路64可被配置为一次存储有限数量(例如,一个)的映射信息
集。在一个映射信息集被存储在标签映射存储电路64中的情况下,所存储的映射信息集可以是与此时在处理电路4上执行的线程相对应的映射信息集。当发生上下文切换以使处理电路4执行不同的线程时,存储器访问电路15可以被布置用于将存储在标签映射存储电路64中的映射信息替换为与要执行的线程相关联的映射信息集。该方法减少了标签映射存储电路64所需的存储量。
98.图12示意性地示出包括标签检查电路62、标签映射存储电路64和标签映射设定电路66的装置。在该示例中,标签映射设定电路66被设置成响应于针对新的或更新的映射信息集的请求而进行操作,以将这种新的或更新的映射信息集提供给标签映射存储电路64。可以提供指定如何以及何时应当设定或更新映射信息的功能。标签映射设定电路66可以响应于指定要如何生成新的映射信息集的多种请求类型。下面参考图13至图16阐述可以由标签映射设定电路66支持的请求类型以及标签映射设定电路66的对应的行为的示例。
99.在下面的示例中,术语“地址标签值”用于指代当与对应的防护标签进行比较时将导致标签检查中的匹配的地址标签值。这可以与重新映射的标签值相同。在下面的示例中,已经设定了地址标签值,使得每个防护标签值与不同的地址标签值相关联,标签映射设定电路66可以支持设定防护标签值,使得每个地址标签值与不同的防护标签值相关联。
100.图13示出一个示例,其中标签映射设定电路66被配置为响应于指定每个防护标签值与不同的地址标签值相关联的请求而设定标签映射。这种请求在图13中称之为置乱请求。如图13所示,由标签映射设定电路66根据这种置乱请求而生成的映射指示,每个地址标签值被指派到不超过一个防护标签值。在该示例中,因为可能的防护标签值的数量与可能的地址标签值的数量相同,所以每个地址标签值被指派给恰好一个地址标签值,然而,一般来讲,在地址标签和防护标签的长度可以不同的情况下,情况可能并非如此。在生成新映射时,可能期望使所有防护标签都映射到不同的地址标签以避免同一地址标签值与不同防护标签值相关联的情况,因为具有这些地址标签值中的一个地址标签值的地址标签可能匹配与同一地址标签值相关联的防护标签,即使访问并非是将不被许可的存储器位置。关于哪个地址标签值与每个防护标签相关联的选择可以是随机的。图13示出一个示例,其中针对防护标签值和地址标签值中的每一者使用3位值,但是应当理解,这些技术也适用于其它长度的标签值,包括地址标签具有与防护标签不同的长度的情况。
101.图14示出设定标签映射的示例,其中特定的地址标签值被排除在选择之外。标签映射设定电路66被配置为响应于指定要被排除在选择之外的一个或多个排除的标签值的请求而进行操作。如图14所示,这可以通过使用包括针对每个可能的地址标签值的字段的排除掩码来指示,以针对每个地址标签值指示该地址标签值是否要被排除在选择之外。在该示例中,值1指示地址标签值要被排除在选择之外,然而,应当理解,可以使用不同的映射。响应于排除掩码,标签映射设定电路被配置为生成映射信息集,针对该映射信息集,排除的地址标签值不被指派到防护标签值。在该示例中,使用3位防护标签值和4位地址标签值。应当理解,在诸如通过使用排除掩码将特定值排除在选择之外的情况下,如果每个防护标签值要被指派不同的地址标签值,则需要存在比防护标签值更多的可能的地址标签值,并且因此使用更长的地址标签。然而,在一些示例中,针对不同的防护标签值重复使用相同的地址标签值可以是可接受的。因此,在此类示例中,即使地址标签和防护标签具有相同数量的位,也可以使用排除掩码。尽管这会增加在标签检查中检测到伪匹配的概率,但是通过
以下方式来增加线程/沙箱之间的隔离可以是有用的:在它们的映射信息中为它们提供不重叠的标签值集。是采用该方法还是提供较长地址标签以确保每个防护标签被指派到不同的地址标签值可以基于进程的线程之间的沙箱化与检测线程内的存储器错误的相对优先级。在一些示例中,装置2可被配置为用软件来支持这两种方法,该软件能够通过在控制寄存器中设定配置信息以设定要使用的重新映射的地址标签的长度来指示所选择的方法。在一些具体实施中,对用于控制如何执行标签映射的任何控制信息的更新可以被限制于处于特定特权级别或更高特权级别的软件(例如,被限制于操作系统或管理程序软件,使得不允许应用程序级别代码设定控制信息)。
102.图15示出更新标签映射的示例,其中特定的防护标签值被排除在更新之外。这些防护标签值被指示为对于其而言映射不应改变的“已锁定”值。如图15所示,可以使用更新掩码来指示应当被排除在更新之外的防护标签值,该更新掩码包括针对每个可能的防护标签值的字段,以指示防护标签值是否要被排除。在图15的示例中,值1指示映射要被排除在更新之外,但是应当理解,可以使用其它映射。更新之前和之后的映射信息在图15中示出,用星号识别被更新掩码指示为被排除在更新之外的映射。可以看出,这些映射在更新之前和之后是相同的。其它映射已经被标签映射设定电路66更新。可能期望确保特定的映射在映射信息集被更新时不发生改变。通过确保特定的映射为“已锁定”,标签映射设定电路66可以确保针对以下防护标签的映射不会改变:该防护标签与包含要被共享的存储器位置的块相关联,并且因此针对不同线程的共同地址标签可用于访问那些位置。当执行更新时,标签映射设定电路66还可以避免指派与“已锁定”标签值相关联的标签值。这在图15中可见,因为与“已锁定”防护标签值010、011和101相关联的地址标签值1001、1110和0101没有被指派到任何其它防护标签值。
103.图16示出设定标签映射的示例,其中所有防护标签值都被映射到同一地址标签值。这对于有效地禁用标签检查功能可能是期望的,因为只要提供的地址标签与所有防护标签值被映射到的地址标签值具有同一值,就会检测到匹配。当处理不支持经标签防护的访问的遗留代码时,这可以是特别有利的。在这种情况下,所有防护标签值都可以被设定为可以被提供的地址标签的默认值。如上所述,在一些架构中,可以根据目标地址的原本都要被设定为给定值的位来确定地址标签。在给定值在目标地址中未被地址标签替换的情况下(诸如在遗留代码中),当执行标签检查时,这些位仍可以被解译为地址标签,并且通过将所有防护标签值都映射到这些位的默认值,可以允许所有访问而不必提供用于完全绕过标签检查的手段。如图16所示,所有防护标签值都被映射到地址标签值0b1111,然而,应当理解,可以使用另一值来代替。
104.图17示出可使用的模拟器具体实施。虽然先前所述的实施方案在用于操作支持所涉及的技术的特定处理硬件的装置和方法方面实现了本发明,但也可以提供根据本文所述的实施方案的指令执行环境,该指令执行环境是通过使用计算机程序来实现的。此类计算机程序通常被称为模拟器,在一定程度上是因为此类计算机程序提供硬件架构的基于软件的具体实施。模拟器计算机程序的种类包括仿真器、虚拟机、模型和二进制转换器,其包括动态二进制转换器。通常,模拟器具体实施可以在支持模拟器程序210的主机处理器230上运行,该主机处理器任选地运行主机操作系统220。在一些布置中,在硬件和所提供的指令执行环境和/或在同一主机处理器上提供的多个不同指令执行环境之间可存在多个模拟
层。在历史上,需要强大的处理器来提供以合理速度执行的模拟器具体实施,但这种方法在某些情况下可能是合理的,诸如当出于兼容性或重复使用原因而希望运行另一处理器本地的代码时。例如,模拟器具体实施可以向指令执行环境提供主机处理器硬件不支持的附加的功能,或者提供通常与不同硬件架构相关联的指令执行环境。模拟概述在以下文献中给出:“some efficient architecture simulation techniques”,robert bedichek,winter 1990usenix conference,第53至63页。
105.就先前已参考特定硬件构造或特征描述了实施方案而言,在模拟的实施方案中,等效功能可以由合适的软件构造或特征提供。例如,特定电路可以在模拟的实施方案中被实现为计算机程序逻辑。类似地,存储器硬件诸如寄存器或高速缓存可以在模拟的实施方案中被实现为软件数据结构。在其中先前描述的实施方案中参考的硬件元件中的一个或多个硬件元件存在于主机硬件(例如,主机处理器230)上的布置中,在合适的情况下,一些模拟的实施方案可以利用主机硬件。
106.模拟器程序210可以存储在计算机可读存储介质212(其可以是非暂时性介质)上,并且向目标代码200(其可以包括应用程序、操作系统和管理程序)提供程序接口(指令执行环境),该程序接口与由模拟器程序210建模的硬件架构的接口相同。因此,可以使用模拟器程序210从指令执行环境内执行目标代码200的程序指令,使得实际上不具有上文所论述的装置2的硬件特征的主计算机230可以仿真这些特征。例如,模拟器程序210可以包括标签检查程序逻辑214用于:识别防护标签,执行标签检查,以及响应于在标签检查中检测到失配,以与硬件实施方案的模拟标签检查电路62将执行这些功能的方式相对应的方式来执行错误响应动作。另外,模拟器程序210可以包括标签映射保持程序逻辑216,该标签映射保持程序逻辑用于保持指示防护标签值与对应的地址标签值之间的映射的映射信息(类似于上述标签映射存储电路64)。
107.在本技术中,字词“被配置为...”用于意指装置的元件具有能够执行所限定的操作的配置。在该上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,该装置可以具有提供所限定的操作的专用硬件,或者可以对处理器或其他处理设备进行编程以执行该功能。“被配置为”并不意味着装置元件需要以任何方式改变以便提供所限定的操作。
108.虽然本文已结合附图详细描述了本发明的示例性实施方案,但应当理解,本发明并不限于那些精确的实施方案,并且在不脱离所附权利要求书所限定的本发明的范围和实质的前提下,本领域的技术人员可以在其中实现各种变化和修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1