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

访存方法、处理装置和存储介质

文献发布时间:2023-06-19 19:28:50


访存方法、处理装置和存储介质

技术领域

本公开的实施例涉及一种访存方法、处理装置和存储介质。

背景技术

计算机系统的安全问题一直悬而未决。1988年计算机蠕虫病毒问世,自此以后,计算机系统的安全状况便一直停留在一个恶性循环中:防护者不断开发出针对漏洞的防护补丁,而攻击者却能不断找到新的系统漏洞。据调查,计算机漏洞中有超过七成为内存漏洞,所以这个恶性循环现象也被称为“内存战争”。这个过程中,形式多样的防护方案被不断提出,有一些被工业界采纳,譬如DEP(NX/XD)、

截至目前,上述每一个防护方案均能够被新的攻击方法攻破。这些新的攻击绕过防护方法的方式多种多样。有的通过特意的裁剪自己的攻击方法,从而绕过防护方案中特定的检查(比如,面向返回编程,return-oriented programming),有的则是利用之前未知的攻击方法(比如,Row Hammer)。尤其是在内存保护领域,传统防护方法中的

这些新的攻击方法出现的根源所在,便是由于诸多现有的软件是由不安全的开发语言(如C/C++)开发,而硬件对程序编写者的信任程度一直停留在计算机创造初期时代--即相信程序员是专业的、不会犯错误。但随着软件系统的不断增大,编程错误已被实践证明是不可避免的。传统处理器设计中对内存内容的无差别设计使得硬件本身对编程者的编程错误没有任何容忍度。

另一方面,虽然仅仅基于现有的硬件可以开发出一定的安全防护功能,避免或者检测出程序错误。但是这些方案已经被证明是无法高效地应用到这些计算机系统当中的,譬如,软件实现的完整的内存安全方案会引起计算机系统超过100%的性能损失。如此高的性能损失使得纯软件的安全防护很少落地到广泛的应用当中。

因此,现在越来越多的安全工作将重心转移到了硬件方面,因为硬件实现的安全功能在性能损失方面是很低的,甚至接近于0。同时,传统处理器设计中对内存内容的无差别设计导致了很多诸如内存安全漏洞频出、高性能优化困难等问题也可以在一定程度上被弥补。尤其是标记内存的提出,可以通过内存元数据(metadata)的管理,有效辅助处理器智能识别内存中不同类型的存储内容,从而做出不同处理。如果经过合理的标记架构的系统设计,诸如堆栈溢出(空间安全)、悬空指针复用(时间安全)、控制流攻击、信息流泄露等问题,均能起到一定的防护作用。

发明内容

本公开的至少一个实施例提供了一种访存指令的访存方法,该访存方法包括:获取所述访存指令对应的第一内存标记信息,其中,所述第一内存标记信息包括第一内存标记,所述第一内存标记对应于存储所述访存指令的第一存储地址在内存空间中的第一存储位置;获取所述访存指令包括的目标地址对应的第二内存标记信息,其中,所述第二内存标记信息包括第二内存标记,所述第二内存标记对应于所述目标地址在所述内存空间中的第二存储位置;基于所述第一内存标记信息和所述第二内存标记信息,确定所述第一内存标记和所述第二内存标记是否匹配;响应于所述第一内存标记和所述第二内存标记匹配,允许所述访存指令继续执行,或者,响应于所述第一内存标记和所述第二内存标记不匹配,进入异常处理。

本公开的至少一个实施例提供了一种处理装置,该处理装置包括:第一获取单元,配置为获取所述访存指令对应的第一内存标记信息,其中,所述第一内存标记信息包括第一内存标记,所述第一内存标记对应于存储所述访存指令的第一存储地址在内存空间中的第一存储位置;第二获取单元,配置为获取所述访存指令包括的目标地址对应的第二内存标记信息,其中,所述第二内存标记信息包括第二内存标记,所述第二内存标记对应于所述目标地址在所述内存空间中的第二存储位置;第一确定单元,配置为基于所述第一内存标记信息和所述第二内存标记信息,确定所述第一内存标记和所述第二内存标记是否匹配;第一操作单元,配置为响应于所述第一内存标记和所述第二内存标记匹配,允许所述访存指令继续执行,或者,响应于所述第一内存标记和所述第二内存标记不匹配,进入异常处理。

本公开的至少一个实施例提供了一种处理装置,该处理装置包括:处理单元和存储器,在所述存储器上存储有一个或多个计算机程序模块;其中,所述一个或多个计算机程序模块被配置为由所述处理单元执行时实现上述实施例所述的访存方法。

本公开的至少一个实施例提供了一种非瞬时可读存储介质,其中,所述非瞬时可读存储介质上存储有计算机指令,其中,所述计算机指令被处理器执行时实现上述实施例所述的访存方法。

本发明实施例的基于内存标记的安全方案相对于纯软件方案的效率更高,安全性更好。

附图说明

为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。

图1A示出了根据本公开一实施例的计算机系统中内存空间的示意图;

图1B示出了根据本公开另一实施例的计算机系统中内存空间的示意图;

图2A示出使用本公开实施例的内存标记对内存空间的访问进行保护的流程图;

图2B示出了使用本公开实施例的内存标记提供安全保护的示意图;

图3示出了使用本公开实施例的一个示例的内存标记提供安全保护的示意图;

图4示出了使用本公开实施例的另一个示例的内存标记提供安全保护的示意图。

图5A示出了使用本公开实施例的另一个示例的内存标记提供安全保护的示意图;

图5B示出了根据本公开至少一实施例的包括内存标记的内存地址的示例;

图6示出了使用本公开实施例的另一个示例的内存标记提供安全保护的示意图;

图7展示了一种示例性的实现内存标记对应内存粒度的配置方案;

图8示出了根据本公开至少一实施例的处理装置的示意图;

图9为本公开至少一个实施例提供的一种电子装置的示意框图。

具体实施方式

为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。

除非另作定义,此处使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。

为了应对计算机面临的内存安全问题,本公开的多个实施例提供了一种标记内存方案,该方案通过标记内存及其提供的细粒度内存保护,例如通过软硬件协同处理以保护对于计算机内存的访问,以较低的成本实现对计算机系统的保护,以缓解或避免内存安全违例带来的威胁。

图1A示出了根据本公开一实施例的计算机系统中内存空间的示意图。本公开的至少一实施例提供的标记内存方案中,如图1A所示,计算机系统的内存空间10包括安全内存空间100和非安全内存空间200,例如将计算机系统的内存空间10划分为安全内存空间100和非安全内存空间200。安全内存空间100和非安全内存空间200都可以作为传统程序的运行空间,用于存储数据或指令以及传统的运行状态信息等。安全内存空间100和非安全内存空间200在内存空间10中的占比可以是固定的或动态的,在二者间的占比为动态的情形,可以由操作系统根据运行的进程来增加或回收安全内存空间100。

图1B示出了根据本公开另一实施例的计算机系统中内存空间的示意图。例如,在另一个实施例中,内存空间10仅包括安全内存空间100(即全部的程序运行空间都被赋予标记),又例如可以在安全内存空间100之外单独开辟一个标记空间,用于仅仅存储标记本身以及标记的相关管理数据(标记元数据),而不是作为程序的运行空间。

在安全内存空间100中,将对应的内存空间按照预定大小划分为多份内存子空间101_1……101_n等,并且对每份内存子空间101进行标记,赋予内存标记(label),因此安全内存空间100在本公开中也称为“标记内存空间”或“标记内存”,即被赋予了内存标记的内存空间。因此,安全内存空间100中存储的数据或指令被相应地赋予了内存标记。

如图1A和图1B所示,在安全内存空间100中,对于内存子空间101_1赋予标记La1,对于内存子空间101_2赋予标记La2,……,对于内存子空间101_n赋予标记Lan。由此,内存子空间101_1、101_2等与对应的内存标记La1、La2等具有映射关系,也即,指向内存子空间101_1内的一个或多个内存地址与对应的内存标记La1具有该映射关系,指向内存子空间101_2内的一个或多个内存地址与对应的内存标记La2具有该映射关系……。内存子空间101_1、101_2等的物理地址可以连续的,也可以是彼此分散的。

如下面所述的,内存标记La1、La2等的值例如可以基于随机数得到,或者可以基于预设规则得到。例如,彼此相邻的内存子空间的标记的值彼此不同,或者在预定空间大小范围内(例如连续相邻的4个、8个、16个等内存子空间构成的地址段内)各个内存子空间的内存标记的值彼此不同,又或者,例如安全内存空间内的全部内存子空间的标记的值彼此都不同(虽然这需要内存标记本身可能的值的数量很大)。在非安全内存空间200中,则与常规的内存空间相同,不按份划分也不进行标记。

安全内存空间100的最小粒度(即一份内存子空间101的预定大小,又可以称为“内存粒度”(MG,Memory Granularity))可以是固定的,或者根据需要设置,例如可以根据处理器的硬件规格决定,例如,内存空间的最小粒度可以设置一个字,也可以设置为2个字、4个字、8个字等。

在本公开的至少一个实施例中,标记内存和内存标记之间采用的是物理地址或者虚拟地址映射的方式。如果使用物理地址映射,则系统在运行使用基于虚拟地址的程序时需要在执行时把虚拟地址通过处理器的存储管理单元(MMU)翻译过后得到物理地址,然后由系统使用物理地址完成对内存标记的读写。

如上所述,安全内存空间的内存粒度可以固定,或者可以根据需要设置;该内存粒度的设置例如保存在系统中的预定存储位置或预定寄存器中,以供处理器在运行的过程中根据需要调用。内存标记本身所占据存储空间的大小(即标记粒度(Label Size)或标记宽度(Label Width))也可以是固定的,或者可以根据需要设置;该标记大小例如保存在预定存储位置(例如单独开辟的标记存储空间)或预定寄存器中,以供处理器在运行的过程中根据需要调用。

例如,在本公开的至少一个实施例中,设置了安全寄存器(SEC寄存器),该安全寄存器设置为一种控制与状态寄存器(CSR)寄存器。该寄存器用于保存系统中的标记内存粒度(MG)和标记宽度(LS)。该寄存器还可以用于存储当前标记所对应的安全策略,以根据取值控制标记的变更或者改变指令的行为,比如在发生异常时的处理方式等。

在本公开的实施例中,例如,可以通过指令对安全内存空间中的每一份内存空间进行标记,并且也可以对需要保护的内存地址、指针等(在本公开的实施例中为了简便起见也统称“目标地址”)进行标记,即对内存地址、指针等也赋予标记。这种内存标记也可以称为“安全标记”。

这样,在计算机系统中(例如处理器)通过识别内存内容对应的内存标记的取值,可以将内存的不同区域区分为具有不同安全配置的内存空间。每一个安全内存空间的内存子空间可以是连续的,也可以是不连续的。例如,当设置某程序在安全内存空间中运行时,则可以在启动该程序的进程时,由系统创建其安全内存子空间,为其中对应于内存粒度的安全内存子空间赋予其特定的内存标记,由此对其中存储的数据和指令赋予了内存标记。而当另一个程序运行时,系统可以创建具有不同安全标记的内存子空间,则两个程序可以保证相互隔离,只能在自己所属的隔离环境中执行而互不侵犯。又例如,在一项程序的编译过程中确定并记录了程序代码中的访存指令与该访存指令操作的对象数据之间的关系,因此在创建安全内存空间时可以对该访存指令的存储位置和该对象数据的存储位置赋予相同的内存标记或相同类型的内存标记(例如用于同一用户的内存标记)等,即对该访存指令所在的安全内存子空间和该对象数据所在的安全内存子空间赋予相同的内存标记或相同类型的内存标记等。进一步地,如果在编译过程中对不同程序指令的分类、分组并标记不同的安全标记,则这些不同类、不同组的指令也可以使用标记匹配规则保证相互隔离。

在本公开中,“访存指令”包括可以发起内存访问请求的任何指令,既包括涉及数据内存的访问操作的指令,也包括涉及代码内存的访问操作的指令,例如,涉及数据内存的访问操作的指令例如包括源操作数和目的操作数至少之一是对内存地址操作的指令,而不限于读取指令或存储指令等;涉及代码内存的访问操作的指令例如包括指令预取操作的指令或跳转指令,例如直接或者间接跳转指令等。

在本公开不同的实施例中,内存标记可以以不同的方式存储,例如,可以在内存中单独划分出用于存储内存标记的空间(该空间可以独立于前述安全内存空间和非安全内存空间被寻址和访问)、在系统中单独设置用于存储内存标记的存储装置等。

图2A示出了使用本公开实施例的内存标记提供安全保护的流程图。如图2A所示,该安全保护的方法包括如下的步骤310~步骤350:

步骤310,获取访存指令对应的第一内存标记信息。

第一内存标记信息包括第一内存标记,第一内存标记对应于存储访存指令的第一存储地址在内存空间中的第一存储位置。

步骤320,获取访存指令包括的目标地址对应的第二内存标记信息。

第二内存标记信息包括第二内存标记,第二内存标记对应于上述目标地址在内存空间中的第二存储位置。

步骤330,基于第一内存标记信息和第二内存标记信息,确定第一内存标记和第二内存标记是否匹配。

步骤340,响应于第一内存标记和第二内存标记匹配,允许访存指令继续执行,或者,

步骤350,响应于第一内存标记和第二内存标记不匹配,进入异常处理。

该异常处理的程序或过程例如包括根据预定的安全策略选择忽略错误恢复执行、记录异常行为并恢复执行或停止访存指令执行等操作。

例如,在停止访存指令执行之后,例如进行报警等,本公开的实施例对此不作限制。通过图2A所示的实施例的内存标记匹配的流程来检测访存指令是否存在内存安全违例,避免了被他人篡改访存指令的目标地址或伪造访存指令等,由此提高了计算机系统的安全性。

在该实施例的一个示例中,访存指令为涉及数据内存的访问操作的指令,则该访存指令包括的目标地址为数据存储地址;在该实施例的一个示例中,访存指令为代码内存的访问操作的指令,则该访存指令包括的目标地址为指令(代码)存储地址。

图2B示出了使用本公开实施例的内存标记提供安全保护的示意图。如图2B所示,访存指令201具有目标地址、操作码等。访存指令201自身在内存空间中的存储地址(第一存储地址)位于安全内存子空间(第一存储位置)311中,对应于该安全内存子空间311提供有内存标记信息L11(第一内存标记信息)。内存标记信息L11包括对应于该安全内存子空间301的内存标记(第一内存标记),获取该第一内存标记。

从访存指令201可以获取其中的目标地址2011,例如该目标地址指向数据或指令,由此对应于目标地址2011在内存空间中位于安全内存子空间(第二存储位置)321中,提供有内存标记信息L21(第二内存标记信息)。内存标记信息L21包括对应于该安全内存子空间302的内存标记(第二内存标记),获取该第二内存标记。

基于第一内存标记信息和第二内存标记信息,确定第一内存标记和第二内存标记是否匹配。如果二者匹配,允许访存指令继续执行,否则停止访存指令执行,例如进入异常处理。

并且,如图2B所示,对于与安全内存子空间311相邻的其他安全内存子空间提供有内存标记信息L10、L12、L13等,并且这些安全内存子空间用于存储程序(或进程)在运行过程中将使用的数据。对于与安全内存子空间321相邻的其他安全内存子空间提供有内存标记信息L20、L22、L23等,并且这些安全内存子空间用于存储程序(或进程)在运行过程中将使用的指令。

例如,从第一内存标记信息L11中提取第一内存标记,从第二内存标记信息L21中提取第二内存标记;由此,比较第一内存标记和第二内存标记,以确定第一内存标记和第二内存标记是否匹配。

图3示出了使用本公开实施例的一个示例的内存标记提供安全保护的示意图。例如,在至少一个示例中,从第一内存标记信息中提取第一内存标记以及从第二内存标记信息中提取第二内存标记,包括:获取第一内存标记或第二内存标记对应的标记宽度信息;根据标记宽度信息,从第一内存标记信息中提取部分数据位以得到第一内存标记,以及从第二内存标记信息中提取部分数据位以得到第二内存标记。

如图3所示,在图2B所示示例的基础上,通过标记检查模块获取第一内存标记对应的标记宽度信息或第二内存标记对应的标记宽度信息,然后由该标记宽度信息从第一内存标记信息中提取部分数据位以得到第一内存标记,由该标记宽度信息从第二内存标记信息中提取部分数据位以得到第二内存标记。之后,判断获取的第一内存标记和获取的第二内存标记是否匹配。例如,标记元数据(metadata)包括标记宽度信息,即标记检查模块可以从标记元数据可以获取所需要的标记宽度信息等。标记元数据还可以包括内存粒度信息等。标记检查模块可以不仅选择标记宽度/内存粒度,还可以需要根据标记检查规则检查标记之间的匹配与否等。

在不同的示例中,用于比较的第一内存标记和第二内存标记二者的宽度可以是不同,也可以是相同的。

在至少一个示例中,如果用于比较的第一内存标记和第二内存标记二者的宽度被定义为不同宽度,则系统可以灵活的定义特定的匹配规则来确定两个宽度不同的标记是否匹配。比如,将较长标记与较短标记具有模式包含关系定义为匹配,从而实现同一个较长标记可以与多个不同取值的较短标记匹配等。

在至少一个实例中,如果用于比较的第一内存标记和第二内存标记二者的宽度被定义为必须相等,则可以仅获取第一内存标记和第二内存标记之一的标记宽度信息,并且将其作为第一内存标记和第二内存标记的标记宽度信息;相反,如果第一内存标记和第二内存标记二者的宽度不相等,那么所获取的第一内存标记和所获取的第二内存标记之一将出现错误,由此也将导致后续的比较结果为不匹配。或者,在至少一个示例中,同时获取第一内存标记和第二内存标记的标记宽度信息,并将获得的两个标记宽度信息进行比较,如果二者不相等,则后续不再判断第一内存标记和第二内存标记是否匹配,直接终止访存指令的处理,而进入异常处理,反之则继续进行上面描述的后续处理。

前述“部分数据位”例如为内存标记信息中预定的基址开始的预定数据位(偏移),该基址例如为最高位或最低位,或中间某一位,并且选择中间某一位时,则需要进一步预定偏移的方向。

图4示出了使用本公开实施例的一个示例的内存标记提供安全保护的示意图。

又例如,在至少一个示例中,获取第一内存标记或第二内存标记对应的标记元数据,例如标记宽度信息,包括:获取第一内存标记信息或第二内存标记信息对应的标记存储位置;根据标记存储位置获取标记元数据,例如标记宽度信息。

如图4所示,在图3所示示例的基础上,获取第一内存标记信息对应的标记存储位置和第二内存标记信息对应的标记存储位置,由对应的标记存储位置可以对应获取所存储的标记元数据,例如标记宽度信息。

同样地,基于在正常情况下用于比较的第一内存标记和第二内存标记二者的宽度应该相等的假设,可以基于第一内存标记信息对应的标记存储位置或第二内存标记信息对应的标记存储位置,由选择的标记存储位置可以对应获取所存储的标记元数据,例如标记宽度信息。如图4所示,选择第一内存标记信息L11对应的标记存储位置(即L11.Addr)来获得所存储的标记元数据。如图4所示,标记存储位置和对应的标记元数据可以二维表格的形式存储,类似于页表。

或者,在至少一个示例中,基于第一内存标记信息对应的标记存储位置和第二内存标记信息对应的标记存储位置,分别获取两个标记存储位置所存储的标记宽度信息,并将获得的两个标记宽度信息进行比较,如果系统要求标记宽度必须匹配,但二者不相等,则后续不再判断第一内存标记和第二内存标记是否匹配,而是直接终止访存指令的处理,进入异常处理,反之则继续进行上面描述的后续处理。

在至少一个示例中,标记存储位置可以位于内存空间中被选择专用于存储内存标记信息的存储页、存储段,或者位于独立于内存空间的存储装置。例如,该独立于内存空间的存储装置例如为专用的RISC-V PMP、ARM MPU等物理内存隔离区域实现隔离。

在至少一个实例中,标记存储位置可以独立于普通内存空间之外。例如专门的DRAM设备、SRAM设备等,或者DRAM的特定物理分区、缓存的特定分区等等。在这种实现中专用的设备可以通过专用的硬件设计保证隔离,而不需要使用或者定义存储页、存储段来保护。

在至少一个实例中,标记取值的传输路径可以共享现有的数据通路,也可以使用专用的数据通路实现访问,譬如使用现有的总线传输标记,或者使用独立的总线信号专用于传输标记等。

图5A示出了使用本公开实施例的一个示例的内存标记提供安全保护的示意图。

又例如,在至少一个示例中,获取第一内存标记或第二内存标记对应的标记元数据,例如标记宽度信息,包括:从访存指令的第一存储地址或目标地址本身中的冗余位获取标记元数据,例如标记宽度信息。

如图5A所示,在图3所示示例的基础上,目标地址本身高位部分包括对应的内存标记元数据,例如,该内存标记元数据包括内存标记宽度信息(而低位部分则包括目标地址的有效地址部分),由此从目标地址本身就可以提取目标标记的宽度信息。

对于内存地址等赋予的内存标记可以与该内存地址本身整合为一体,例如通过复用系统设定的内存地址中的富余位来保存每个内存地址、指针等对应的内存标记或标记元数据(例如内存标记宽度)。例如,在64位处理器架构中,系统位宽为64位(bit),然而系统中的虚拟地址通常不会使用全部64位;例如,RISC-V指令集中虚拟地址目前通常使用sv32、sv39和sv48三种分页模式,因此在64位的系统中,上述三种分页模式下,虚拟地址的低32位、低39位和低48位记载了全部有效地址(页表号+页内偏移)。因此,系统的虚拟地址中在高位存在无用位(例如,这些无用位通常为0),而低位则已经记载了全部有效地址信息。因此,可以利用64位架构中虚拟地址中高位余量来记载该地址对应的内存标记或内存标记宽度。在至少一个示例中,在使用这种地址空余量来存储标记相关信息时,对于所用地址空余位的访问设置访问控制权限,以避免普通程序的读写导致标记信息的泄露或者被篡改。

图5B示出了根据本公开至少一实施例的包括内存标记的内存地址的示例;如图5B所示,一项内存地址包括高位部分以及低位部分,例如,对于64位地址而言,如果对应于sv48分页模式,可以选择高位部分为最高的16位(即[63:48]),而其余的低位部分则为最低的48位(即[47:0])。例如,高位部分的全部或部分用于记录内存标记或标记元数据(例如内存标记宽度),例如选择最高的16位中的8位作为内存标记位,例如选择[63:56]作为内存标记位用于记录对应的内存标记或内存标记宽度;低位部分则用于记录有效地址,该有效地址部分共有48位,对应于理论上最多2

图6示出了使用本公开实施例的一个示例的内存标记提供安全保护的示意图。

又例如,在至少一个示例中,获取第一内存标记或第二内存标记对应的标记元数据,例如标记宽度信息,包括:从内存空间中与第一存储地址或目标地址相邻的存储地址获取标记元数据,例如标记宽度信息。

如图6所示,在图3所示示例的基础上,在内存空间中,目标地址与目标地址对应的内存标记的内存标记元数据(例如,该内存标记元数据包括标记宽度信息)的存储地址彼此相邻(例如,二者之间的地址偏移量可以提前设置为某一固定数值,由此便于寻址),例如二者分别落入相邻的双字或相邻的存储块(memory block)中等,例如,目标地址对应的存储位置(例如如图1A和图1B所示的安全内存子空间,第二存储位置)和目标地址对应的标记元数据(例如标记宽度信息)所在的存储位置(例如如图1A和图1B所示的安全内存子空间)彼此相邻。

对应地,访存指令的存储地址与该访存指令的存储地址对应的内存标记的标记宽度信息的存储地址彼此相邻(例如,二者之间的地址偏移量可以提前设置为某一固定数值,由此便于寻址),例如二者分别落入相邻的双字或存储块中等,例如,访存指令的存储地址对应的存储位置(例如如图1A和图1B所示的安全内存子空间,第一存储位置)和该访存指令的存储地址对应的标记元数据(例如标记宽度信息)所在的存储位置(例如如图1A和图1B所示的安全内存子空间)彼此相邻。存储块的大小例如可以为32个字或64个字等。

又例如,在至少一个示例中,获取第一内存标记或第二内存标记对应的标记元数据,例如标记宽度信息,包括:从第一寄存器中获取标记元数据,例如标记宽度信息,其中,标记元数据由系统设置于第一寄存器中。该第一寄存器可以是前述提及的安全寄存器(SEC寄存器)。

再例如,在上面描述的示例的基础上,例如,基于上述图3、图4、图5A和图6所示的示例的基础上,在获取第一内存标记或第二内存标记对应的标记宽度信息的同时获取内存空间中的标记内存粒度(MG)信息。例如,标记元数据包括标记宽度信息和标记内存粒度信息,标记宽度信息和标记内存粒度信息一体存储,由此在获取第一内存标记或第二内存标记对应的标记宽度信息的同时获取内存空间中的标记内存粒度信息。根据标记内存粒度信息,可以确定标记内存粒度的大小,由此当前确定例如两个目标地址或存储地址在同一个内存子空间内时,则在获取一个目标地址或存储地址对应的内存标记时,则也获得另一个目标地址或存储地址的内存标记。

在本公开的至少一个实施例中,第一内存标记信息还包括指示第一内存标记为针对指令的第一类型信息,第二内存标记信息还包括指示第二内存标记为针对数据的第二类型信息。例如,内存标记信息包括1位(类型指示位)来指示对应的内存标记是针对数据还是针对指令,例如,该类型指示位为0时表示数据,而为1时表示指令。例如,对于图2B所示,安全内存子空间311对应的内存标记信息中的类型指示位的值为0,而安全内存子空间321对应的内存标记信息中的类型指示位的值为1。

至少在本公开的上述实施例中,比较第一内存标记和第二内存标记,以确定第一内存标记和第二内存标记是否匹配,包括:确定第一内存标记和第二内存标记是否相同;或者确定第一内存标记和第二内存标记是否位于同一取值范围。

例如,在至少一个示例中,对应于第一内存标记和第二内存标记是否位于同一取值范围的情形,第一内存标记和第二内存标记各自的高n位根据当前系统的用户设置,这里n为正整数。例如,在系统中为每个用户分配一个3位的数字标识(例如随机值),即n取3,该3位的数字标识作为内存标记的高3位,而内存标记除高3位之外的低位部分(例如5个或更多位)则例如是系统根据安全内存子空间分配的数值(例如随机值),因此,对于同一个用户分配的标记内存空间的内存标记的高3位都是相同,由此可以凭借该内存标记实现访问控制,提高计算机系统的安全性。

在本公开的实施例中,标记宽度和标记内存粒度均可由系统进行配置,例如在系统启动时配置,或者在系统运行的过程中动态配置。

在至少一个示例中,为了简化硬件实现,可以标记内存粒度和标记宽度在实现中合二为一。而硬件允许软件在标记的使用过程中,定义不同的内存粒度和标记宽度。例如,硬件实现的最小内存粒度是4bytes,最小标记宽度的最小宽度是2bits,则最基础的内存/标记比特比为32:2。而软件在编译和运行过程中,可以选择的内存粒度为4~12bytes等等,而对应的标记的宽度也可以选择(受最大的硬件标记宽度限制)为2~6bits。或者内存粒度和标记宽度可以保持默认取值。在默认取值的配置下,也可以首先决定标记内存粒度的大小,然后根据标记内存粒度的大小,确定对应的标记宽度。

图7展示了一种示例性的实现内存标记对应内存粒度的配置方案。在图7所示的方案中,对于数据内存粒度还是指令内存粒度,内存标记信息的最高位用来识别标记内存的类型,比如用于存储指令(代码)或数据的,或者为代码指针或者数据指针等,例如,用0表示数据而用1表示指令(或代码)。内存标记信息的剩余位数用于定义标记内存粒度。比如,如果内存标记信息的剩余位数为1位(对应标记宽度为1,下同),则标记内存粒度可以有两种,这两种粒度可以定义为任意的两种大小,比如4字节(byte)和8字节,或者8字节和16字节等。如果内存标记信息的剩余位数为2位,则可以有4种粒度可选。以此类推,如果内存标记信息的剩余位数为5位,则可以有32种粒度可以选择。如图7所示,在使用5位标识标记内存粒度的情况下,内存标记粒度可以从4字节到2^33字节不等。

在本公开的实施例中,在系统中对于内存标记可以通过一条或多条用于标记内存的指令进行操作的,例如,这些用于标记内存的指令包括用于生成标记、存储标记、读取标记、赋予标记、访存指令、修改标记等操作的指令,这些指令在不同的指令集(ISA)中可以根据相应的ISA的规范进行构建,这里不再赘述。

根据本公开的至少一个实施例提供了一种处理装置,图8示出了该处理装置的示意图。如图8所示,该处理装置800包括第一获取单元801、第二获取单元802、第一确定单元803和第一操作单元804。

第一获取单元801配置为获取访存指令对应的第一内存标记信息,其中,第一内存标记信息包括第一内存标记,第一内存标记对应于存储访存指令的第一存储地址在内存空间中的第一存储位置。

第二获取单元802配置为获取访存指令包括的目标地址对应的第二内存标记信息,其中,第二内存标记信息包括第二内存标记,第二内存标记对应于目标地址在内存空间中的第二存储位置。

第一确定单元803配置为基于第一内存标记信息和第二内存标记信息,确定第一内存标记和第二内存标记是否匹配;

第一操作单元804配置为响应于第一内存标记和第二内存标记匹配,允许访存指令继续执行,或者响应于第一内存标记和第二内存标记不匹配,进入异常处理程序。

例如,在至少一个示例中,在上述处理装置中,第一确定单元包括内存标记提取子单元和比较子单元。内存标记提取子单元配置为从第一内存标记信息中提取第一内存标记以及从第二内存标记信息中提取第二内存标记;比较子单元配置为比较第一内存标记和第二内存标记,以确定第一内存标记和第二内存标记是否匹配。

例如,在至少一个示例中,在上述处理装置中,内存标记提取子单元包括标记检查模块和提取模块。标记检查模块配置为获取第一内存标记或第二内存标记对应的标记宽度信息;提取模块配置为根据标记宽度信息,从第一内存标记信息中提取部分数据位以得到第一内存标记,以及从第二内存标记信息中提取部分数据位以得到第二内存标记。

例如,在至少一个示例中,标记检查模块进一步配置为,获取第一内存标记信息或第二内存标记信息对应的标记存储位置,根据标记存储位置获取标记宽度信息。例如,标记存储位置位于内存空间中被选择专用于存储内存标记信息的存储页、存储段,或者位于独立于内存空间的存储装置。

或者,标记检查模块进一步配置为,从访存指令的第一存储地址或目标地址本身中的冗余位获取标记宽度信息。

或者,标记检查模块进一步配置为,从内存空间中与第一存储地址或目标地址相邻的存储地址获取标记宽度信息。

或者,标记检查模块进一步配置为,从第一寄存器中获取标记宽度信息,其中,标记宽度信息由系统设置于第一寄存器中。例如,该第一寄存器为前述安全寄存器(SEQ寄存器)。

在至少一个示例中,标记检查模块进一步配置为,在获取第一内存标记或第二内存标记对应的标记宽度信息的同时获取内存空间中的标记内存粒度信息。例如,标记宽度信息和标记内存粒度信息一体存储。例如,标记元数据包括标记宽度信息和标记内存粒度信息,通过标记元数据可以获得标记宽度信息和/或标记内存粒度信息。

在至少一个示例中,比较子单元进一步配置为确定第一内存标记和第二内存标记是否相同,或者确定第一内存标记和第二内存标记是否位于同一取值范围。例如,对应于第一内存标记和第二内存标记是否位于同一取值范围的情形,第一内存标记和第二内存标记各自的高n位根据当前系统的用户设置,n为正整数。

本公开的一些实施例还提供了一种处理装置,该处理装置包括处理单元和存储器,存储器上存储有一个或多个计算机程序模块;该一个或多个计算机程序模块被配置为由所述处理单元执行时实现如本公开任一实施例所述的访存方法。

本公开的一些实施例还提供了一种非瞬时可读存储介质,其中,所述非瞬时可读存储介质上存储有计算机指令,其中,所述计算机指令被处理器执行时实现如本公开任一实施例所述的访存方法。

例如,该处理单元为中央处理器(CPU)、数字信号处理器(DSP)等。例如,该非瞬时可读存储介质实现为存储器,例如易失性存储器和/或非易失性存储器。上述实施例中存储器可以为易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓存等。非易失性存储器例如可以包括只读存储器(ROM)、硬盘、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器、闪存等。

该存储器中还可以存储各种应用程序(代码、指令)和各种数据以及应用程序使用和/或产生的各种数据等,在一些示例中,还可以存储有数据或指令对应的内存标记信息(以及内存标记)。

本公开的一些实施例还提供了一种电子装置,该电子装置包括上述计算机装置,该计算机装置包括上述处理装置或者可执行上述访存方法。

图9为本公开至少一个实施例提供的一种电子装置的示意框图。本公开实施例中的电子装置可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。

图9示出的电子装置1000仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。例如,如图9所示,在一些示例中,电子装置1000包括处理装置,该处理装置可以包括上述任一实施例的处理装置,其可以根据存储在只读存储器(ROM)1002中的程序或者从存储装置1008加载到随机访问存储器(RAM)1003中的程序而执行各种适当的动作和处理。在RAM 1003中,还存储有计算机系统操作所需的各种程序和数据。处理器1001、ROM1002以及RAM 1003通过总线1004被此相连。输入/输出(I/O)接口1005也连接至总线1004。

例如,以下部件可以连接至I/O接口1005:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置1006;包括诸如液晶显示器(LCD)、扬声器、振动器等的输出装置1007;包括例如磁带、硬盘等的存储装置1008;例如还可以包括诸如LAN卡、调制解调器等的网络接口卡的通信装置1009。通信装置1009可以允许电子装置1000与其他设备进行无线或有线通信以交换数据,经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至I/O接口1005。可拆卸存储介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储装置1008。

虽然图9示出了包括各种装置的电子装置1000,但是应理解的是,并不要求实施或包括所有示出的装置。可以替代地实施或包括更多或更少的装置。

例如,该电子装置1000还可以进一步包括外设接口(图中未示出)等。该外设接口可以为各种类型的接口,例如为USB接口、闪电(lighting)接口等。该通信装置1009可以通过无线通信来与网络和其他设备进行通信,该网络例如为因特网、内部网和/或诸如蜂窝电话网络之类的无线网络、无线局域网(LAN)和/或城域网(MAN)。无线通信可以使用多种通信标准、协议和技术中的任何一种,包括但不局限于全球移动通信系统(GSM)、增强型数据GSM环境(EDGE)、宽带码分多址(W-CDMA)、码分多址(CDMA)、时分多址(TDMA)、蓝牙、Wi-Fi(例如基于IEEE 802.11a、IEEE 802.11b、IEEE 802.11g和/或IEEE 802.11n标准)、基于因特网协议的语音传输(VoIP)、Wi-MAX,用于电子邮件、即时消息传递和/或短消息服务(SMS)的协议,或任何其他合适的通信协议。

例如,电子装置1000可以为手机、平板电脑、笔记本电脑、电子书、游戏机、电视机、数码相框、导航仪、家用电器、通信基站、工业控制器、服务器等任何设备,也可以为任意的数据处理装置及硬件的组合,本公开的实施例对此不作限制。

对于本公开,还有以下几点需要说明:

(1)本公开实施例附图只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。

(2)在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合以得到新的实施例。

以上仅是本公开的示范性实施方式,而非用于限制本公开的保护范围,本公开的保护范围由所附的权利要求确定。

技术分类

06120115926849