CN111837111A - 用于存储有界指针的装置和方法 - Google Patents

用于存储有界指针的装置和方法 Download PDF

Info

Publication number
CN111837111A
CN111837111A CN201980018648.2A CN201980018648A CN111837111A CN 111837111 A CN111837111 A CN 111837111A CN 201980018648 A CN201980018648 A CN 201980018648A CN 111837111 A CN111837111 A CN 111837111A
Authority
CN
China
Prior art keywords
range
pointer
address
write
bounded
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201980018648.2A
Other languages
English (en)
Other versions
CN111837111B (zh
Inventor
李·道格拉斯·史密斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
ARM Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ARM Ltd filed Critical ARM Ltd
Publication of CN111837111A publication Critical patent/CN111837111A/zh
Application granted granted Critical
Publication of CN111837111B publication Critical patent/CN111837111B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1408Protection against unauthorised use of memory or access to memory by using cryptography
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • G06F12/1441Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • G06F21/79Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/35Indirect addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Human Computer Interaction (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)
  • Read Only Memory (AREA)

Abstract

提供了用于存储有界指针的装置和方法。一种示例装置包括:存储设备,包括用于存储有界指针的存储元件,每个有界指针包括指针值以及至少包括范围信息的相关联属性;以及处理电路,用于将有界指针存储在所选择的存储元件中。该存储包括:将有界指针的指针值存储在所选择的存储元件中;将有界指针的范围信息存储在所选择的存储元件中,使得范围信息指示有界指针的读取范围和有界指针的写入范围两者,该写入范围与读取范围不同。读取范围包括在使用有界指针时允许读取的至少一个存储器地址,并且写入范围包括在使用有界指针时允许写入的至少一个存储器地址。

Description

用于存储有界指针的装置和方法
技术领域
所提出的技术涉及数据处理的领域。
背景技术
一些数据处理装置可以支持有界指针,其中,指示特定地址的指针与指示可允许地址范围的范围信息相关联,在该可允许地址范围中该指针被解除引用。例如,这种指针可以被称为“宽指针(fat pointer)”。
除了范围信息之外,这种有界指针还可以具有其他相关联的属性,其定义对指针的使用的一个或多个限制/权限。这种具有权限的有界指针通常称为“能力(capabilities)”,并且通过对如何使用由边界指针指定的指针值施加约束,使用此类有界指针可以提供强大的安全性。
期望改善这种有界指针的通用性。
发明内容
在一个示例配置中,提供了一种装置,包括:存储设备,包括用于存储有界指针的存储元件,每个有界指针包括指针值以及至少包括范围信息的相关联属性;以及处理电路,用于将有界指针存储在所选择的存储元件中,所述存储包括:将有界指针的指针值存储在所选择的存储元件中;将有界指针的范围信息存储在所选择的存储元件中,使得范围信息指示有界指针的读取范围和有界指针的写入范围两者,该写入范围与读取范围不同,其中:读取范围包括在使用有界指针时允许读取的至少一个存储器地址;以及写入范围包括在使用有界指针时允许写入的至少一个存储器地址。
在另一示例配置中,提供了一种在存储设备的存储元件中存储有界指针的方法,该方法包括:存储有界指针的指针值;以及存储有界指针的范围信息,使得该范围信息指示有界指针的读取范围和有界指针的写入范围两者,该写入范围与读取范围不同,其中:读取范围包括在使用有界指针时允许读取的至少一个存储器地址;以及写入范围包括在使用有界指针时允许写入的至少一个存储器地址。
在又一示例配置中,提供了一种设备,包括:存储装置,包括用于存储有界指针的存储元件装置,每个有界指针包括指针值以及至少包括范围信息的相关联属性;以及处理装置,用于将有界指针存储在所选择的存储元件装置中,所述存储包括:将有界指针的指针值存储在所选择的存储元件装置中;将有界指针的范围信息存储在所选择的存储元件装置中,使得范围信息指示有界指针的读取范围和有界指针的写入范围两者,该写入范围与读取范围不同,其中:读取范围包括在使用有界指针时允许读取的至少一个存储器地址;以及写入范围包括在使用有界指针时允许写入的至少一个存储器地址。
附图说明
将参考附图所示的示例仅通过说明来进一步描述本技术,在附图中:
图1是根据一个示例布置的装置的框图;
图2示出了这样的指令类型的示例,针对该指令类型如果尝试设置或访问一组有界指针存储元件内的指针值,其中,该指针值用于指定在相关联的范围信息所指示的范围之外的地址,则可能会触发错误;
图3示出了根据一个示例布置的对与有界指针相关联的标签位的使用;
图4是示意性地示出签名操作以及相应授权操作的图示,签名操作可以用于将指针签名添加到有界指针或能力,并且相应授权操作可以随后用于确保所述有界指针或能力的指针字段的指针认证码未被意外或恶意更改;
图5A和图5B示意性地示出了根据示例的有界指针;
图6是概述根据本公开的示例的方法的流程图;
图7至图9示出了本公开的特定示例。
具体实施方式
一些处理装置可以支持使用有界指针。例如,指针本身可以指向或用于确定要访问的数据值或要执行的指令的地址。然而,指针还可以具有相关联的范围信息,该范围信息指示使用指针时的可允许地址范围。例如,这可用于确保从指针确定的地址保持在一定界限内,以维护行为的安全性或功能正确性。例如,对于基于能力的架构的兴趣日益增加,在该架构中,为给定处理定义了某些能力,并且如果尝试执行在所定义的能力之外的操作,则会触发错误。有界指针的范围信息可以是为这种架构定义的能力信息的一部分,并且在基于能力的架构内,这样的有界指针(包括其相关联的能力信息)可以称为能力。
因此,一种装置可以具有存储元件,用于存储具有相关联范围信息的指针,该相关联范围信息指示在使用指针时的可允许地址范围。每个有界指针存储元件可以是寄存器,或者通用存储器中的存储器位置,例如,堆栈存储器上的位置。
某些指令可以用于引用这种有界指针存储元件以便获得指针,然后该指针用于导出在指令的操作期间所需的存储器地址。指针可以直接用于标识存储器地址,或者可以用于导出存储器地址,例如通过对指针值添加偏移量。
本公开的示例旨在通过根据对该指针的特定使用来应用不同的范围信息以改善有界指针的通用性。具体地,与给定指针相关联的读取范围可以和与该指针相关联的写入范围不同。例如,这允许指针能够指向的第一存储地址范围是只读范围,数据无法写入该范围。可以允许对指针能够指向的第二存储器地址范围进行读取和写入。第三存储器地址范围可以是只写范围,不允许对其进行读取。在本文讨论的一些示例中,应用这样的范围的子集,使得例如应用只读范围并且应用读取和写入范围,但未应用只写范围。类似地,在其他示例中,应用读取和写入范围和只写范围,但未应用只读范围。
如上所述,一些示例装置包括:存储设备,包括用于存储有界指针的存储元件,每个有界指针包括指针值以及至少包括范围信息的相关联属性;以及处理电路,用于将有界指针存储在所选择的存储元件中。存储的步骤可以包括将有界指针的指针值存储在存储元件中,并将有界指针的范围信息存储在存储元件中,使得范围信息指示有界指针的读取范围和有界指针的写入范围两者,该写入范围与读取范围不同。读取范围是在使用有界指针时允许读取的存储器地址范围,并且写入范围是在使用有界指针时允许写入的存储器地址范围。
因此,对于给定指针,范围信息能够表示与读取范围不同的写入范围。这相对于比较系统提高了指针的通用性,在比较系统中,仅单个范围被应用于有界指针,而在该范围内未应用进一步的粒度。下文将更详细地提供这种通用性的示例。例如,本技术通过将有界指针可有效指向的给定存储器地址范围包括在有界指针的读取范围而不包括在写入范围内,可以将这些地址有效地指定为只读。因此,写入范围可以是读取范围的适当子集,即读取范围的子集不等于读取范围。这在这样的示例中特别有用,其中例如在初始设置操作期间一次性定义了一些数据,此后不希望修改该数据。将此类数据指定为只读防止数据被意外或恶意更改。因此,相对于不能将数据指定为只读的比较系统,本示例提供了改进的强健性(robustness)和安全性。
替代地或附加地,通过将指针可有效指向的给定存储器地址范围包括在写入范围而不包括在读取范围内,那些地址可被指定为只写。例如,读取范围可以是写入范围的适当子集。这在需要提供机密性的示例中特别有用。例如,在两个应用彼此通信的情况下,可能希望防止一个这样的应用读取给定存储器地址范围,但是该范围对于另一个这样的应用是可读的,同时仍允许写入那些地址。
可能期望减小有界指针的大小以便避免或减少与维护有界指针相关联的存储需求。在这种情况下,期望通过高效的编码和/或压缩来减小表示范围信息所需的大小。在实现此目的的一种示例方式中,范围信息包括主要信息和次要信息。主要信息定义主要范围,主要范围是读取范围和写入范围之一,并且从基地址扩展到限制地址。次要信息使得可以基于主要范围和次要信息来确定次要范围,次要范围是读取范围和写入范围中的另一个。相对于其中独立地表示读取范围和写入范围的方法,这样的示例可以减小表示范围信息所需的大小,从而减小有界指针的大小。
在一个这样的示例中,主要信息包括主要范围的基地址以及主要范围的限制地址和主要范围的大小之一。因此,主要信息明确限定主要范围的范围。
在一些示例中,主要范围的限制地址是次要范围的限制地址,使得主要范围和次要范围共享限制地址,但是可以具有不同的基地址。在应用此约束的示例中,次要信息可能不独立地表示次要范围的限制地址,因为此类信息对于所存储的主要范围的限制地址将是冗余的。相反,在一些示例中,主要范围的基地址是次要范围的次要范围基地址,使得主要范围和次要范围共享基地址,但是可以具有不同的限制地址。在应用此约束的示例中,次要信息可能不独立地表示次要范围的基地址,因为此类信息对于所存储的主要范围的基地址将是冗余的。在这些示例中,可以通过不包括这样的冗余信息来减少存储范围信息所需的存储器。
在一些示例中,次要信息标识如何从主要范围的基地址和限制地址确定次要范围基地址和次要范围限制地址中的至少一个。例如,在主要范围和次要范围共享基地址的情况下,次要信息可以定义次要范围的限制地址,但不定义其基地址。类似地,在主要范围和次要范围共享限制地址的情况下,辅助信息可以定义次要范围的基地址,但不定义其限制地址。
在一些系统中,期望预定义主要范围和次要范围之间的差异。例如,有时可能期望有界指针的范围的开始处的给定数量的字节为只读,例如因为这些字节包括不被修改的密码数据。在一些这样的示例中,次要信息是指示次要范围不包括主要范围的预定部分的标志。因此该标志可被设置以指示指针的范围的开始处的给定数量的字节为只读,或未被设置以指示指针的整个范围可以写入和读取。对该标志(可以是单个位)的使用提供了一种特别高效的用于提供从第一范围定义第二范围所需的信息的机制。在一个示例布置中,在经由有界指针的初始写入之前,未设置该标志。然后,可以在初始写入之后设置该标志。这允许初始写入来写入要从后续写入中排除的预定义部分,以便初始化该部分,此后不允许进一步写入。在基于能力的系统的某些示例中,能力可降低但不能增强。因此,在这样的示例中,一旦标志被设置,就不能被取消设置。
在其他示例中,次要信息包括指示次要范围的限制地址不受主要范围的限制地址约束的标志。例如,主要范围和次要范围可以共享基地址,而主要范围具有限制地址,但次要地址没有。在主要范围是写入范围并且次要范围是读取范围的情况下,这允许写入被限制于给定范围,同时允许对基地址上的任何存储器地址进行读取,但受到系统内的其他约束。例如,在指针与应用相关联的情况下,可能期望能够读取存储器堆栈内的任何存储器地址,同时仅允许写入堆栈帧内的存储器地址。在一些示例中,读取范围可有效地受其他系统机制的限制,例如通过禁止对与给定应用相关联的堆栈外部的存储器地址的任何访问。
现在将讨论一些更具体的示例。下面参考图1至图9更详细地描述这些示例。
在一个示例中,有界指针的指针值标识对象的地址空间内的存储器地址。所述地址空间内的位置存储标识数据结构的指针,该数据结构标识可用于所述对象的方法。指针可以例如是有界指针。这种数据结构的示例是所述对象所属的对象类的虚拟方法表。读取范围包括所述指向数据结构的指针,并且写入范围不包括所述指向数据结构的指针。这允许指针是只读的,使得它不能被改变以免意外(例如由于软件错误)或恶意(例如试图执行除属于所述对象的类定义的方法以外的方法)地重定向到不期望的存储器地址。
在另一示例中,有界指针的指针值标识对象的地址空间内的存储器地址,并且所述地址空间的一部分包括对象的元数据。例如,有界指针的属性可以包括用于认证有界指针的签名,例如密码签名,然后元数据可以包括在生成所述签名时使用的盐值(saltvalue)。读取范围包括具有该元数据的所述部分,并且写入范围不包括具有该元数据的所述部分。因此,可以使元数据(例如密码盐)为只读,从而降低其意外或恶意破坏的可能性。在一些示例中,所述元数据包括指向另外的元数据、或允许标识这种元数据的其他数据的指针。例如,所述元数据可以是指向前述密码盐的指针。
在一个这样的示例中,分配器将地址空间分配给对象,并保留对地址空间的写入访问。分配器可例如由在处理器电路上执行的软件来实现。当分配器确定释放被分配给对象的地址空间时,分配器被布置为覆写该盐值。因此,在地址空间被释放之后尝试使用该盐来验证指向该对象的指针将失败,从而提供了对释放后使用攻击的抗性。
然后有界指针的范围信息可包括:定义读取范围的读取范围数据;以及指示写入范围不包括具有元数据的地址空间的所述部分的排除数据。与上面讨论的其他示例类似,这提供了在初始写入之后对元数据的意外或故意恶意修改的抗性。
包含元数据的地址空间的所述部分可以具有预定义大小。例如,元数据可以是大小为8字节的密码盐。因此,次要范围信息可以包括例如单个位的标志,该标志指示与该盐相对应的8个字节是否被排除在写入范围之外,从而高效地表示该信息。
在另一示例中,有界指针的指针值标识应用的堆栈帧内的存储器地址,该堆栈帧位于堆栈内。在该示例中,读取范围包括堆栈帧和堆栈的另一部分,并且写入范围被约束于堆栈的堆栈帧,并且不包括堆栈的该另一部分。因此,有界指针所对应的给定应用可被允许读取例如整个堆栈,同时被允许写入堆栈帧,但被禁止在堆栈帧之外进行写入。
在一个这样的示例中,范围信息指示堆栈帧的基地址和堆栈帧的限制地址。范围信息包括指示堆栈帧的限制地址不是读取范围的限制地址的标志。因此可以例如通过单个位来高效地表示读取范围不应受堆栈帧的范围约束的事实。读取范围可以通过其他系统机制(例如防止与应用相关联的指针访问堆栈上的任何存储器地址的机制)而约束于堆栈的范围。
现在将参考附图描述具体示例。
图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仅示出了对应于读取和写入两者的单个范围,而不是不同的读取和写入范围。如图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将与存储该能力的数据块相关联地设置。通过这种方法,可以区分能力和普通数据,从而确保普通数据不能被用作能力。
图4是示意性地示出签名操作以及相应授权操作的图,签名操作可以用于将未签名能力转换为签名能力,并且相应授权操作可以随后用于将签名能力转换回未签名能力。提供未签名能力150(也称为未签名有界指针)作为签名操作的输入操作数,能力150包括指针部分155和属性部分160。在指针部分155内指定指针值,并且在属性部分160内指定范围信息,以及在未签名能力内提供了指示允许使用指针值的各种权限信息。例如,权限信息可以标识允许哪种类型的操作来引用指针,并因此标识例如是否可以指针来标识要加载或存储的数据、标识要获取的指令等。此外,如前所述,提供标记位165,其被设置以标识相关联的信息块表示能力。能力的大小可以取决于实施方式而变化,但是与先前描述的示例一致,其中能力包括128位,则在一个实施方式中,指针部分155可以包括64位,并且属性部分160也可以包括64位。
用于将未签名能力转换为签名能力的密码签名功能170接收多个输入,这些输入用于导出将被添加以形成签名能力的签名。具体地,功能170可以访问密码签名密钥,并且此外可以访问盐值。盐值可采取多种形式,但在一个示例中表示上下文信息,该上下文信息仅将可用于这样的一项或多项任务,其将合理地需要取消签名能力,并因此应能够成功地关于签名能力来执行授权操作。上下文信息可以采取多种形式,但在一个示例中例如可以是堆栈位置,该堆栈位置仅对于将合理地需要授权签名能力的一项或多项任务是已知的。
此外,功能170接收存储在指针部分155内的指针值的至少一部分。在一个实施方式中,预期指针值将包括一定数量的唯一指针位,而其余的最高有效位是唯一指针位的符号扩展版本(因此为全1或全0,取决于唯一指针位的最高有效位)、或唯一指针位的零扩展版本(即全0)。在一个示例中,在指针值的一定数量的最高有效位中的该本质上冗余的信息被用作位置,一旦生成签名在将其插入该位置,从而使签名能够被并入签名能力而不会丢失任何信息。在替代示例中,该过程可以被布置为将签名插入能力的另一部分中,例如属性部分160的多个位中。在又一示例实施方式中,可能的情况是在未签名能力编码内有足够的未使用位,这些未使用位可以在签名能力内使用以保持签名值。
在图4所示的示例中,假设签名被插入到指针部分155的高位,并且具体地插入在将包含全1或全0的部分中。在图4所示的示例中,情况是指针值的整体仍被用作签名功能170的输入,并且使用该指针值、密码签名密钥和盐值来执行密码签名功能以生成签名,在本文中也称为散列。任何合适的密码签名功能都可以用于此目的。
在替代示例中,该过程可以布置为使得仅唯一指针位被用作密码签名功能170的输入,而不是整个指针值。无论采用哪种方法,如果签名将被添加在签名能力内的指针值的上部中,则所描述示例的过程将执行检查以确保指针是“规范的”,使得签名字段(即将用签名覆写的指针值部分)包含唯一指针位的符号扩展或零扩展版本。这然后将确保有效签名过程(用于创建签名能力)然后有效授权过程(用于创建签名能力的未签名版本)将提供与原始未签名能力150相对应的结果未签名版本。存在可以执行此检查的多种方法。例如,在一个实施方式中,在签名之前执行检查以确保该条件为真(true)。替代地,可以将签名过程之后的测试认证合并在功能170内,以便将原始能力与授权能力(即在认证签名能力之后创建的能力)进行比较。
如图4所示,一旦创建签名,则将其插入签名能力175的部分176的节179中。唯一指针位然后保留在部分176的节177中。在权限部分180内,提供签名字段182,其被设置以标识能力175是签名能力,此外标记位185被保持在设置状态以指示相关联的128位数据表示能力。通过提供单独的签名字段182,这使得某些所请求的操作能够根据提供给它们的输入能力是未签名能力还是签名能力而不同地表现。这例如使得装置能够防止针对签名能力执行某些动作,从而提供进一步增强的安全性。
如图4的下部所示,可以调用授权功能190以试图取消签名能力175。首先,标识唯一指针位177,然后进行符号扩展操作192以生成在执行签名功能170时使用的原始指针值。如果原始指针值以零扩展格式表示,则在步骤192将替代地执行零扩展操作。此外,如果仅唯一指针位已被用作签名功能170的输入,则在步骤192不需要符号扩展或零扩展操作,而是可以将唯一指针位直接提供给授权签名生成功能195。
如图4所示,授权签名生成功能195还可以访问密码签名密钥和盐值。应当理解,除非授权签名生成功能195能够访问与密码签名功能170所使用的相同的盐值(即相同的上下文信息条目),否则将极不可能生成与插入在签名能力的部分179中的签名相匹配的授权签名。
由授权签名生成功能195使用相关的指针位、密码签名密钥和盐值生成的授权签名然后被输入到比较块198,在此将其与保存在签名能力的部分179中的签名进行比较。在匹配的情况下,则认为已经通过授权,并且生成签名能力175的未签名版本。否则,标识失败情况,从而采取预定动作。
假设通过了授权检查,则通过从部分179中去除签名,并用部分177中的唯一指针位的符号扩展(或零扩展,取决于实施方式)版本替换签名,来创建未签名能力,以便重新创建初始指针值。此外,清除签名信息182以标识该能力现在未签名。
签名字段182可以采用多种形式。根据一种方法,提供专用单位签名字段,其中第一值指示能力是未签名的并且第二值指示能力是已签名的。在此示例中,假定当该值设置为逻辑1值时,这表明能力已签名,而如果将其清除为逻辑0值,这表明能力是未签名的。然而,将理解,在不同的实施方式中,签名字段182内的逻辑0值和逻辑1值的含义可以颠倒。
根据其他方法,未提供专用单位签名字段。在一些这样的方法中,如下所述,签名被插入到指针的高位中,其通常包含全1或全0。因此,可以根据所有高位是否都具有相同的值来推断指针是否被签名。
图5A和图5B示意性地示出了根据本公开的示例的有界指针505、510。
图5A所示的指针505包括例如以上关于图2所述的指针值515。指针505还包括范围和权限信息520。范围和权限信息520编码指针505可有效指向的存储器地址以用于读取和写入两者。可以将读取范围定义为与写入范围不同或相同。
范围和权限信息520包括定义主要范围525的数据,该主要范围是读取范围和写入范围之一。例如,主要范围可以表示为基地址和限制地址,或者基地址和范围大小。范围和权限信息520还包括可以从其确定次要范围的次要信息530。次要范围是读取范围和写入范围中的另一个。在一些示例中,次要信息530以与主要范围的表示类似的方式表示次要范围,例如基地址和限制地址。在其他示例中,次要信息530未明确定义次要范围,而是包括可以基于其从主要范围导出次要范围的数据,例如,如本文其他地方更详细描述的。
图5B所示的指针510包括与指针505的指针值515类似的指针值535。指针510包括范围信息540,其例如以与指针505的范围和权限信息520相似的方式定义读取和写入范围。指针510包括单独的权限字段545。权限字段545定义应用于指针510的权限或限制,例如,如上面参考图1更详细描述的。
图6是概述根据本公开的示例的方法600的流程图。
在框605,分配器(即存储器分配器)为对象分配地址空间。地址空间可以例如是连续的存储器地址范围。
在框610,分配器创建能力,即有界指针。创建能力包括确定预期的读取和写入范围,并在此基础上指定主要和次要范围信息和权限。可以基于对象和/或与对象相关联的应用的特定特性来确定读取和写入范围,其特定示例在下面更详细地说明。
在框615,分配器向将使用该对象的应用返回能力。在本示例中,能力初始地允许跨能力可有效指向的整个存储器地址范围进行读取和写入两者。例如,在一些示例中,次要信息是标志,该标志在被设置时指示不能写入读取范围的特定部分。因此可以在未设置该标志的情况下创建能力,使得写入范围未以这种方式被限制。
在框620,应用写入读取范围的前述特定部分。例如,应用可写入旨在一旦写入就不会更改的数据,例如密码盐。在该写入之后,应用减小能力以将读取范围的特定部分限制为只读。例如,在次要信息是如上所述的初始未设置标志的情况下,该减小可包括设置标志。在一个这样的示例中,标志在未设置时具有二进制值0,并且在设置时具有二进制值1,使得设置标志包括写入1以覆写0。在一个示例中,硬件(例如执行方法600的处理器的架构)确保能力可以在需要时减小而从不增强。换句话说,硬件允许减小主要范围和/或次要范围,但从不扩展。
在框625,进行随后的读取和写入操作。这些操作基于编码在主要范围信息和次要范围信息中的读取和写入范围进行控制,使得例如跨能力可有效指向的整个存储器地址范围允许读取,但在只读范围不允许写入。
现在将参考图7描述技术600的一种特定应用的示例。
在该示例中,有界指针705包括指针值710以及范围和权限信息715,如以上关于图5A所述。范围信息715允许指针705被用于在与对象720相对应的存储器地址内创建地址。换句话说,指针可用于为与对象720相对应的存储器地址范围内的存储器地址有效地创建地址标识符710。
可以根据基地址C.BASE 725和限制地址C.LIMIT 730来定义与对象720相对应的存储器地址范围。基地址725是对应于对象720的第一地址,并且限制地址730是超出对象720的末端的字节的地址。
密码盐735存储在与对象720相对应的存储空间开始处的存储地址范围内,基于此指针705用签名740进行签名。上面参考图4描述了这种指针签名的示例。在对指针705进行签名之后,可以使用盐735对指针705进行授权。
范围和权限信息715被设置为定义读取和写入范围745、750,使得对于读取和写入操作两者,指针705可用于在对象720的存储器空间内以及盐735的外部创建存储地址(由图7中的实线表示)。范围和权限信息715还被设置为使得针对读取操作而非写入操作,指针705可用于在包含盐735的地址范围内创建存储器地址(由图7中的虚线表示)。换句话说,盐735为只读。这通过提供对意外或恶意修改盐的抗性来提高可靠性,这种意外或恶意修改将导致尝试使用盐735来授权签名有界指针705失败。
例如,盐可具有预定义大小。例如,在ARMv8.3架构中实现指针705的情况下,盐可以具有8个字节的预定义大小。范围和权限信息715然后可以通过基地址725和限制地址730的明确定义、以及指示是否应从写入区域中排除前8个字节的标志来表示读取和写入范围。
在一些示例中,初始地使用范围和权限信息715来创建指针705,使得指针可以写入与对象720相对应的整个存储器范围。换句话说,没有该范围的部分初始为只读。指针705用于写入盐735,然后范围和权限信息715被设置以减小写入范围,使得盐735变为只读。例如,在盐具有预定大小并且范围和权限信息715包括指示是否应从写入区域中排除盐的标志的情况下,标志可初始地未设置,然后在盐的初始写入之后进行设置。
替代地或附加地,当对应于对象720的存储器空间被释放时,分配器(不受指针705的范围和权限信息715约束)覆写与盐735相对应的存储器地址。例如,地址可以用零覆写。然后授权指针705的后续尝试将失败,因为盐将不再具有在对有界指针进行签名时使用的值。这提供了对释放后使用攻击的抗性,在释放后使用攻击中,在释放与对象720相对应的存储器空间之后,恶意实体尝试访问先前与盐735相对应的存储器空间。
现在将参考图8描述技术600的另一特定应用的示例。
在该示例中,有界指针805包括指针值810以及范围和权限信息815,如以上关于图5A所述。指针与应用相关联,并且指向包括堆栈帧825的堆栈820内的存储器地址。
范围信息815编码写入范围基址(base)等于堆栈帧基址830,并编码写入范围限制等于堆栈帧限制835,从而将写入范围定义为覆盖堆栈帧825的范围。范围信息815进一步包括读取范围是否受到写入范围限制的限制的指示,例如标志。因此,当该标志未设置时,针对堆栈帧825内的存储器地址允许进行读取和写入,但针对堆栈帧之外的存储器地址禁止进行读取和写入。相反,当该标志被设置时,读取范围的基址等于写入范围的基址(即堆栈帧基址830),但没有具体的读取限制。因此针对堆栈帧825外部的堆栈820的存储器地址允许读取。
在一些示例中,尽管范围和权限信息815未具体定义读取范围限制,但其他系统机制(例如在处理器或系统架构中定义)防止指针805被用于访问堆栈820外部的存储器位置。因此,指针805的有效读取范围等于堆栈820的范围。
将理解,本示例因此可用于允许应用读取其堆栈的整体(由虚线箭头表示),但是仅写入其堆栈帧(由实线箭头表示)。这通过具有不同的读取和写入范围的单个有界指针805来实现。与其中定义单独的有界指针进行读取和写入的方法相比,这在存储和处理能力方面显著地更高效。
现在将参考图9描述技术600的另一特定应用的示例。
在该示例中,有界指针905包括指针值910以及范围和权限信息915,如以上关于图5A所述。范围信息915允许指针905指向与对象920相对应的存储器地址。换句话说,指针值910可以有效地用于在与对象920相对应的存储器地址范围内创建存储器地址。
可以根据基地址C.BASE 925和限制地址C.LIMIT 930来定义与对象920相对应的存储器地址范围。基地址925是对应于对象920的第一地址,并且限制地址930是超出对象920的末端的字节的地址。
指向虚拟方法表或v表940的指针935存储在与对象920相对应的存储器空间的起始处。如本领域技术人员将理解的,v表940是可用于对象920的方法的表。例如,v表940可以是指向可以在其中对象920是实例的一类对象上操作的每种方法的指针的表。
范围和权限信息915被设置以定义读取和写入范围945、950,使得针对读取和写入操作两者,指针905可用于在对象920的存储器空间内以及在v表指针935外部创建存储器地址(由图9中的实线表示)。范围和权限信息915还被设置为使得针对读取操作而非写入操作,指针905可用于在与v指针935相关联的范围内创建存储器地址(由图9中的虚线表示)。换句话说,v表指针935为只读。这通过提供对v表指针的修改的抗性而提高了可靠性。这提高了对恶意攻击的恢复力,在恶意攻击中,v表指针被修改为指向除v表940之外的存储器地址,例如导致执行除v表940之外的方法。
v表指针935可以具有预定义大小。在这样的示例中,范围和权限信息可以包括对读取范围的范围的明确定义,以及指示是否应从写入范围排除预定义大小的区域的标志,其方式与以上关于图7所述相似。在利用这种标志的一些示例中,标志初始地未设置,使得指针905可用于执行v表指针935的初始写入。在初始写入之后,可以按照与上面关于图7所述类似的方式来设置标志。
通过使用上述技术,将理解,单个有界指针可以表示不同的读取和写入范围。这可以在广泛的应用中提高可靠性和安全性,例如期望经由指针可访问的至少一些数据一旦在初始写入中被写入,则后续不再修改。本文所述的方法允许此类数据在初始写入之后为只读。
本文描述的方法可以在硬件和/或软件中执行。这样的硬件可以是通用处理器或者更特定的单元,例如专用集成电路或现场可编程门阵列。
尽管本文已经参考附图详细描述了本发明的说明性实施例,但应理解,本发明不限于那些确切的实施例,并且本领域技术人员可以在其中进行各种改变、增加和修改,而不脱离所附权利要求所限定的本发明的范围和精神。例如,在不脱离本发明的范围的情况下,可以将从属权利要求的特征与独立权利要求的特征进行各种组合。

Claims (20)

1.一种装置,包括:
存储设备,包括用于存储有界指针的存储元件,每个有界指针包括指针值以及至少包括范围信息的相关联属性;以及
处理电路,用于将有界指针存储在所选择的存储元件中,所述存储包括:
将所述有界指针的指针值存储在所选择的存储元件中;
将所述有界指针的范围信息存储在所选择的存储元件中,使得所述范围信息指示所述有界指针的读取范围和所述有界指针的写入范围两者,所述写入范围与所述读取范围不同,其中:
所述读取范围包括在使用所述有界指针时允许读取的至少一个存储器地址;以及
所述写入范围包括在使用所述有界指针时允许写入的至少一个存储器地址。
2.根据权利要求1所述的装置,其中:
所述写入范围是所述读取范围的适当子集;或者
所述读取范围是所述写入范围的适当子集。
3.根据权利要求1或2所述的装置,其中,所述范围信息包括:
主要信息,所述主要信息定义主要范围,所述主要范围是所述读取范围和所述写入范围中的一者并且从基地址扩展到限制地址;以及
次要信息,所述次要信息使得能够基于所述主要范围和所述次要信息来确定次要范围,所述次要范围是所述读取范围和所述写入范围中的另一者。
4.根据权利要求3所述的装置,其中,所述主要信息包括所述主要范围的所述基地址和下列项之一:
所述主要范围的所述限制地址;以及
所述主要范围的大小。
5.根据权利要求3或4所述的装置,其中,
所述主要范围的所述限制地址是所述次要范围的次要范围限制地址;或者
所述主要范围的所述基地址是所述次要范围的次要范围基地址。
6.根据权利要求3至5中任一项所述的装置,其中:
所述次要信息标识如何从所述主要范围的所述基地址和所述限制地址确定次要范围基地址和次要范围限制地址中的至少一者。
7.根据权利要求6所述的装置,其中,所述次要信息是标志,该标志在被设置时指示所述次要范围不包括所述主要范围的预定义部分。
8.根据权利要求7所述的装置,其中:
在初始写入从所述有界指针导出的地址之前,所述标志未被设置;并且
所述处理电路被布置为在所述初始写入之后设置所述标志。
9.根据权利要求6所述的装置,其中,所述次要信息包括标志,该标志指示所述次要范围的限制地址不受所述主要范围的限制地址约束。
10.根据任一前述权利要求所述的装置,其中:
所述有界指针的所述指针值标识对象的地址空间内的存储器地址,所述地址空间内的位置存储标识数据结构的指针,所述数据结构标识所述对象可用的方法;
所述读取范围包括指向所述数据结构的所述指针;并且
所述写入范围不包括指向所述数据结构的所述指针。
11.根据权利要求10所述的装置,其中,所述数据结构是所述对象所属的对象类别的虚拟方法表。
12.根据权利要求1至9中任一项所述的装置,其中:
所述有界指针的所述指针值标识对象的地址空间内的存储器地址;
所述地址空间的一部分包括所述对象的元数据;
所述读取范围包括具有所述元数据的所述部分;并且
所述写入范围不包括具有所述元数据的所述部分。
13.根据权利要求12所述的装置,其中:
所述有界指针的所述属性包括用于认证所述有界指针的签名;以及
所述元数据包括在生成所述签名时使用的盐值。
14.根据权利要求13所述的装置,还包括:
分配器,用于将所述地址空间分配给所述对象,所述分配器保持对所述地址空间的写入访问;并且
当所述分配器确定释放被分配给所述对象的地址空间时,所述分配器被布置为覆写所述盐值。
15.根据权利要求12至14中任一项所述的装置,其中,所述有界指针的所述范围信息包括:
读取范围数据,限定所述读取范围;以及
排除数据,指示所述写入范围不包括所述地址空间的包含所述元数据的所述部分。
16.根据权利要求12至15中的任一项所述的装置,其中,所述地址空间的包含所述元数据的所述部分具有预定义大小。
17.根据权利要求1至9中的任一项所述的装置,其中:
所述有界指针的所述指针值标识应用的堆栈帧内的存储器地址,所述堆栈帧位于堆栈内;
所述读取范围包括所述堆栈帧以及所述堆栈的另一部分,
所述写入范围限于所述堆栈的所述堆栈帧,并且不包括所述堆栈的所述另一部分。
18.根据权利要求17所述的装置,其中:
所述范围信息指示所述堆栈帧的基地址和所述堆栈帧的限制地址;以及
所述范围信息包括标志,所述标志指示所述堆栈帧的所述限制地址不是所述读取范围的限制地址。
19.一种在存储设备的存储元件中存储有界指针的方法,所述方法包括:
存储所述有界指针的指针值;以及
存储所述有界指针的范围信息,使得所述范围信息指示所述有界指针的读取范围和所述有界指针的写入范围两者,所述写入范围与所述读取范围不同,其中:
所述读取范围包括在使用所述有界指针时允许读取的至少一个存储器地址;以及
所述写入范围包括在使用所述有界指针时允许写入的至少一个存储器地址。
20.一种设备,包括:
存储装置,包括用于存储有界指针的存储元件装置,每个有界指针包括指针值以及至少包括范围信息的相关联属性;以及
处理装置,用于将有界指针存储在所选择的存储元件装置中,所述存储包括:
将所述有界指针的指针值存储在所选择的存储元件装置中;
将所述有界指针的范围信息存储在所选择的存储元件装置中,使得所述范围信息指示所述有界指针的读取范围和所述有界指针的写入范围两者,所述写入范围与所述读取范围不同,其中:
所述读取范围包括在使用所述有界指针时允许读取的至少一个存储器地址;以及
所述写入范围包括在使用所述有界指针时允许写入的至少一个存储器地址。
CN201980018648.2A 2018-03-19 2019-02-11 用于存储有界指针的装置和方法 Active CN111837111B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1804363.8 2018-03-19
GB1804363.8A GB2572151B (en) 2018-03-19 2018-03-19 An apparatus and method for storing bounded pointers
PCT/GB2019/050352 WO2019180401A1 (en) 2018-03-19 2019-02-11 An apparatus and method for storing bounded pointers

Publications (2)

Publication Number Publication Date
CN111837111A true CN111837111A (zh) 2020-10-27
CN111837111B CN111837111B (zh) 2024-08-16

Family

ID=62017703

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980018648.2A Active CN111837111B (zh) 2018-03-19 2019-02-11 用于存储有界指针的装置和方法

Country Status (6)

Country Link
US (1) US11249912B2 (zh)
JP (1) JP7304359B2 (zh)
KR (1) KR20200130836A (zh)
CN (1) CN111837111B (zh)
GB (1) GB2572151B (zh)
WO (1) WO2019180401A1 (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3819775A1 (en) * 2019-11-06 2021-05-12 Microsoft Technology Licensing, LLC Confidential computing mechanism
EP3819774B1 (en) 2019-11-06 2022-05-25 Microsoft Technology Licensing, LLC Confidential computing mechanism
GB2591788B (en) * 2020-02-06 2022-06-01 Advanced Risc Mach Ltd Saving and restoring registers
GB2592069B (en) * 2020-02-17 2022-04-27 Advanced Risc Mach Ltd Address calculating instruction
US11429590B2 (en) 2020-10-15 2022-08-30 International Business Machines Corporation Protecting against invalid memory references
GB2600715B (en) * 2020-11-05 2023-01-18 Advanced Risc Mach Ltd Technique for constraining access to memory using capabilities
US20210117341A1 (en) * 2020-12-26 2021-04-22 Intel Corporation Cache line slot level encryption based on context information
US11966331B2 (en) 2020-12-30 2024-04-23 International Business Machines Corporation Dedicated bound information register file for protecting against out-of-bounds memory references
US11983532B2 (en) 2020-12-30 2024-05-14 International Business Machines Corporation Optimize bound information accesses in buffer protection
GB2606355B (en) * 2021-05-04 2023-09-13 Advanced Risc Mach Ltd Technique for constraining access to memory using capabilities
US20230195614A1 (en) * 2021-12-21 2023-06-22 Intel Corporation Circuitry and methods for implementing non-redundant metadata storage addressed by bounded capabilities

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017009598A1 (en) * 2015-07-10 2017-01-19 Arm Limited Apparatus and method for executing instruction using range information associated with a pointer
TW201729082A (zh) * 2016-02-12 2017-08-16 Arm股份有限公司 用於產生有簽名的有界指標之設備及方法
GB2549511A (en) * 2016-04-20 2017-10-25 Advanced Risc Mach Ltd An apparatus and method for performing operations on capability metadata

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62160554A (ja) * 1986-01-10 1987-07-16 Hitachi Ltd メモリの不正アクセス防止装置
JP2001051904A (ja) * 1999-08-11 2001-02-23 Hitachi Ltd 不揮発性半導体メモリを用いた外部記憶装置
US7856538B2 (en) * 2005-12-12 2010-12-21 Systex, Inc. Methods, systems and computer readable medium for detecting memory overflow conditions
US20150227414A1 (en) * 2012-08-31 2015-08-13 Pradeep Varma Systems And Methods Of Memory And Access Management
US9436847B2 (en) * 2014-09-26 2016-09-06 Intel Corporation Cryptographic pointer address encoding

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017009598A1 (en) * 2015-07-10 2017-01-19 Arm Limited Apparatus and method for executing instruction using range information associated with a pointer
CN107735775A (zh) * 2015-07-10 2018-02-23 Arm 有限公司 用于使用与指针相关联的范围信息来执行指令的装置和方法
TW201729082A (zh) * 2016-02-12 2017-08-16 Arm股份有限公司 用於產生有簽名的有界指標之設備及方法
GB2549511A (en) * 2016-04-20 2017-10-25 Advanced Risc Mach Ltd An apparatus and method for performing operations on capability metadata

Also Published As

Publication number Publication date
GB2572151B (en) 2020-07-08
CN111837111B (zh) 2024-08-16
KR20200130836A (ko) 2020-11-20
US11249912B2 (en) 2022-02-15
WO2019180401A1 (en) 2019-09-26
JP7304359B2 (ja) 2023-07-06
JP2021517687A (ja) 2021-07-26
US20210026773A1 (en) 2021-01-28
GB201804363D0 (en) 2018-05-02
GB2572151A (en) 2019-09-25

Similar Documents

Publication Publication Date Title
CN111837111B (zh) 用于存储有界指针的装置和方法
KR102617102B1 (ko) 서명 바운디드 포인터를 생성하기 위한 장치 및 방법
US11630920B2 (en) Memory tagging for side-channel defense, memory safety, and sandboxing
KR102649092B1 (ko) 바운디드 포인터의 사용을 제어하기 위한 장치 및 방법
CN112149145A (zh) 基于不变指针的数据加密
JP7280196B2 (ja) 機能ドメインを管理するための装置及び方法
EP3841477B1 (en) An apparatus and method for controlling use of bounded pointers
KR20200011438A (ko) 자격과 관련된 허가들을 해석하는 장치 및 방법
CN117222990A (zh) 用于使用能力约束对存储器的访问的技术
CN112585590B (zh) 用于存储器访问控制的方法和装置
CN112334884B (zh) 用于控制对有界指针的使用的装置和方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant