CN108351935B - 用于控制有界指针的使用的设备及方法 - Google Patents

用于控制有界指针的使用的设备及方法 Download PDF

Info

Publication number
CN108351935B
CN108351935B CN201680066821.2A CN201680066821A CN108351935B CN 108351935 B CN108351935 B CN 108351935B CN 201680066821 A CN201680066821 A CN 201680066821A CN 108351935 B CN108351935 B CN 108351935B
Authority
CN
China
Prior art keywords
boundary pointer
boundary
pointer
storage component
source
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.)
Active
Application number
CN201680066821.2A
Other languages
English (en)
Other versions
CN108351935A (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 CN108351935A publication Critical patent/CN108351935A/zh
Application granted granted Critical
Publication of CN108351935B publication Critical patent/CN108351935B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • 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/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
    • G06F21/54Monitoring 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 by adding security routines or objects to programs
    • 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/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • 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
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

提供控制边界指标的使用的设备及方法。设备具有多个边界指针储存组件,每一边界指针储存组件用以储存边界指针及指示该边界指标的允许使用的相关联的许可属性。根据本技术,相关联的许可属性包括指示是否允许边界指标进行复制操作的复制许可属性。随后,处理电路可响应于规定复制操作的至少一个指令,以利用源边界指针储存组件的源边界指针及相关联的许可属性而生成将储存在目的地边界指针储存组件中的目的地边界指针及相关联的许可属性。此外,处理电路根据源边界指针的复制许可属性是否指示源边界指标将被阻止进行复制操作,而将源边界指针储存组件标记为储存无效边界指针。这提供当在设备上执行软件时,用于禁止破坏控制流完整性的有效机制。

Description

用于控制有界指针的使用的设备及方法
技术领域
本技术涉及数据处理领域。
背景技术
一些数据处理设备可支持有界指针,其中指示特定地址的指针与指示该指针的允许地址范围的范围信息关联。例如,这样的指针可被称作“胖(fat)指针”。
面对软件的一个问题是控制流完整性(control flow integrity;CFI)。特定而言,可能尝试经由计算机程序来破坏意欲的控制流,例如通过设法滥用分支至源于缓存器中所保存数据的地址的能力。确定这样的地址时可使用先前提及的边界指针。因此,将需要提供某种边界指针,这样的边界指针具有改良针对这样的滥用的恢复力的机制。
发明内容
在一个示例性配置中,提供一种设备,该设备包括:多个边界指针储存组件,每一边界指针储存组件储存边界指针及指示边界指针的允许使用的相关联的许可属性,所述相关联的许可属性包括复制许可属性,此属性指示边界指针是否被允许进行复制操作;以及处理电路,此电路可响应于至少一个规定复制操作的指令,以利用源边界指针储存组件中的源边界指针及相关联的许可属性而生成将储存在目的地边界指针储存组件中的目的地边界指针及相关联的许可属性,以及将该源边界指针储存组件标记为储存无效边界指针,此取决于该源边界指针的复制许可属性是否指示该源边界指针将被阻止进行复制操作。
在另一示例性配置中,提供一种方法,该方法控制边界指针在设备内的使用,该设备具有:多个边界指针储存组件,每一边界指针储存组件储存边界指针及指示边界指针的允许使用的相关联的许可属性,该方法包括:在所述相关联的许可属性内提供复制许可属性,此复制许可属性指示边界指针是否被允许进行复制操作;以及响应于至少一个规定复制操作的指令,以利用源边界指针储存组件中的源边界指针及相关联的许可属性而生成将储存在目的地边界指针储存组件中的目的地边界指针及相关联的许可属性,以及将该源边界指针储存组件标记为储存无效边界指针,此取决于该源边界指针的复制许可属性是否指示该源边界指针将被阻止进行复制操作。
在又一示例性配置中,提供一种设备,包括:多个边界指针储存组件手段,每一边界指针储存组件手段用于储存边界指针及指示边界指针的允许使用的相关联的许可属性,所述相关联的许可属性包括复制许可属性,此属性指示边界指针是否被允许进行复制操作;以及处理手段,此处理手段用于响应于至少一个规定复制操作的指令,以利用源边界指针储存组件手段中的源边界指针及相关联的许可属性而生成将储存在目的地边界指针储存组件手段中的目的地边界指针及相关联的许可属性,以及用于将该源边界指针储存组件手段标记为储存无效边界指针,这取决于该源边界指针的复制许可属性是否指示该源边界指针将被阻止进行复制操作。
附图说明
本技术将通过参考其实施例仅以举例的方式进行进一步描述,这样的实施例如附图中所图示,这样的附图中:
图1是根据一个实施例的设备的框图;
图2图示指令类型的实例,如果存在设定或存取边界指针储存组件集内的指针值的尝试,则这样的指令类型的错误可能被触发,在此情况下,该指针值用于规定相关联的范围信息所指示范围的外的地址;
图3图示根据一个实施例与边界指针关联的标签位的使用;
图4是表显示根据一个实施例可提供的与边界指针关联的某些许可属性的表,这样的许可属性包括提供的可复制属性;
图5图示存储器可如何被划分为本地存储器及全局存储器;
图6图示在非信任进程具有复制边界指针的能力的情况下可能产生的控制流完整性问题;
图7是流程图,该图图示根据一个实施例的储存能力指令的执行;
图8是流程图,该图图示根据一个实施例的加载能力指令的执行;
图9是流程图,该图图示根据一个实施例的移动能力指令的执行;
图10是流程图,该图图示可如何根据一个实施例利用能力指令的“无复制”变体;以及
图11是流程图,该图图示根据一个实施例可如何处理分支指令。
具体实施方式
在参考附图论述实施例之前,本案提供以下实施例描述。
一些处理设备可支持边界指针的使用。指针自身可指向,或用于确定例如待存取数据值或待执行指令的地址。然而,指针也可具有相关联的范围信息,此信息指示使用指针时的地址允许范围。此可用于以下实例:确保利用指针确定的地址保持在某些边界内,以维持行为安全性或功能正确性。例如,对基于能力的架构的兴趣正日益提高,在这样的架构中,某些能力经定义以用于给定进程,以及如果存在执行超出定义能力的操作的尝试便可能触发错误。边界指针的范围信息可属于针对这样的架构定义的能力信息中的部分,以及在基于能力的架构内,这样的边界指针(包括其关联能力信息)可被称作能力。或者,可存在一些非基于能力的架构,这样的架构允许定义边界指针。
由此,设备可具有用于储存指针的边界指针储存组件,该指针具有指示在使用该指针时地址的允许范围的相关联的范围信息。每一边界指针储存组件可为缓存器,或通用存储器中的存储器位置,例如堆栈存储器中的位置。
某些指令可用于引用这样的边界指针储存组件,从而获取指针,该指针随后用于在存储器中得出在指令操作期间所需的地址。指针可用于直接标识存储器地址,或可用于得出存储器地址,例如通过向指针值添加偏移。
当考虑前文提及的CFI问题时,边界指针的某些特性(如上文提及的基于能力的架构中使用的特性)可将CFI问题减轻到一定程度。例如,在利用储存在边界指针储存组件中的指针得出目标地址时,相关联的范围信息可限制被分支指令视为目标的地址的范围。在基于能力的架构中,也已知提供防止一般数据被用作能力以得出分支目标地址的机制,此外,在这样的基于能力的架构中,可维持某些能力的位置可能受限制。然而,在这样的限制内,欺诈进程仍有可能操纵边界指针,以使得可经由被破坏的计算机程序而产生意欲的控制流,例如通过使控制能够被转移至意外程序地址。
因此,本文所述的技术意欲进一步改良针对这样的潜在滥用的恢复力,从而改善CFI。
发明人发现可采用一种方法以设法破坏CFI,而复制边界指针,从而允许边界指针随后再次使用。例如,此举可产生CFI问题,其中该边界指针能够用于计算目标地址,如返回地址。
边界指针可具有相关联的许可属性,以指示边界指针的允许使用。例如,许可属性可标识边界指针允许被引用用于哪种类型的操作,以及因此标识例如该指针是否可用于标识待加载或待储存的数据,标识待撷取的指令,等等。根据本文所述的技术,这样的许可属性通过添加复制许可属性而得以补充,该复制许可属性的值可用于指示关联的边界指针是否被允许进行复制操作。随后,当处理电路正在处理这样的复制操作时,可引用复制许可属性,以及可根据复制许可属性的值而采取步骤以防止产生边界指针的副本。
更特定而言,在一个实施例中,处理电路可响应于规定复制操作的至少一个指令,以利用源边界指针储存组件的源边界指针及相关联的许可属性而生成将储存在目的地边界指针储存组件中的目的地边界指针及相关联的许可属性。如果源边界指针储存组件的内容由于该进程而保持可存取,则将理解,现已产生原始源边界指针的副本。然而根据一个实施例,处理电路经进一步排列,以根据源边界指针的复制许可属性是否指示该源边界指针将被阻止进行复制操作,而将源边界指针储存组件标记为储存无效边界指针。
其结果是,将理解复制操作的预设行为可根据复制许可属性值而经修正,从而在实际上选择性地将复制进程转化为移动进程,在该进程中,源边界指针作为该进程的部分而无效化。
通过提供与某些边界指针关联的复制许可属性,可将上述功能限制于特定的所需边界指针。因此,在一个实施例中,上文提及的针对复制的限制可限制于某些边界指针,例如被视作以设法破坏CFI为目的的潜在滥用目标的边界指针,如用于生成目标地址的这样的边界指针。已发现这样的方法可显著降低欺诈进程破坏CFI的能力。
有数个方式可将源边界指针储存组件标记为无效。在一个实施例中,每一边界指针储存组件具有与其关联的有效性字段以指示该边界指针储存组件是否储存有效的边界指针,以及处理电路被配置为通过更新与源边界指针储存组件关联的有效性字段以标识该源边界指针为无效,以此将源边界指针储存组件标记为储存无效的边界指针。
在一个实施例中,现有域可用于实施有效性字段的功能。特定而言,已知,例如在某些基于能力的架构中,提供与每一边界指针储存组件关联的标签字段以标识该储存组件中储存的内容的数据类型。数据类型可由此用于标识该储存组件实际上是否储存边界指针(也即能力),或反的是否储存某种其它类型的内容,例如无法用作能力的一般数据。由此,当使用这样的标签域作为有效性字段时,标签域可设定为第一值以标识该边界指针储存组件的内容形成边界指针及相关联的许可属性,以及标签值可设定为不同于第一值的值,以标识这样的内容应被视作不同于边界指针及相关联的许可属性的数据。
由此,在复制许可属性指示源边界指针应被阻止进行复制操作的情况下,当源边界指针储存组件用于前文提及的复制操作时,可通过将标签值有效地设定为一值且该值指示该内容并非边界指针及相关联的许可属性,而将源边界指针储存组件标记为无效。此阻止源边界指针储存组件内容以后被用作边界指针(也即能力),由此确保仅保留单个边界指针副本(也即目的地边界指针储存组件中的副本)。
有数个方式可将复制许可属性值纳入考虑,从而确定在复制操作实施期间是否使源边界指针储存组件无效化。在一个实施例中,在源边界指针的复制许可属性指示该源边界指针应被阻止进行复制操作的情况下,源边界指针储存组件在复制操作实施期间将始终被标记为储存无效的边界指针。
在众多实施方式中,存储器可被划分从而形成可在多个程序线程之间共享的全局存储器(例如堆(heap)),以及为单个程序线程的使用而设的本地存储器,例如堆栈内的堆栈框架。与边界指针关联的许可属性也可用于标识边界指针是具有全局效应,还是与特定程序线程关联的本地边界指针。
在上述示例性使用情况中,源边界指针储存组件可标记为无效,无论其储存全局边界指针还是本地边界指针。当边界指针是全局边界指针时,可能必须使用某些原子数控制程序以确保源边界指针储存组件作为原子运算而被无效化。例如,在源边界指针储存组件是存储器位置及储存标记为全局(及由此与多个程序线程共享)的边界指针时,可能必须格外注意原子数。将理解有数个已知技术,这样的技术可用于确保原子运算,以及任何这样的技术皆可用于此情况。
然而,以原子方式处理某些无效运算的需要为该进程增添某些复杂性。在一替代实施例中,在复制许可属性指示源边界指针将被阻止进行复制操作的情况下,当源边界指针储存组件用于复制操作中时,并非始终将源边界指针储存组件标记为无效,而是根据边界指针是否在多个线程之间共享而评定功能。特定而言,在一个实施例中,相关联的许可属性包括指示边界指针是否在多个线程之间共享的共享属性,以及在执行规定复制操作的所述至少一个指令时,在源边界指针的复制许可属性指示该源边界指针将被阻止进行复制操作及共享属性指示该边界指针并非在多个线程之间共享的情况下,处理电路被配置为将源边界指针储存组件标记为储存无效的边界指针。由此,在本实施例中,仅在边界指针也被指示为未在多个线程之间共享的情况下发生无效化,也即,该边界指针是本地边界指针,在本案中也被称作本地能力。通过这样的方法,可避免任何潜在的原子数问题。此外,尽管可能存在有完全合法的理由复制某些全局边界指针的情况,但对于本地边界指针而言并非如此,因此,复制本地边界指针的尝试更多地可能指示潜在的CFI攻击。因此,从实际观点可见,将上述操作限制于共享属性指示边界指针并非在多个线程之间共享的情况仍可提供针对CFI攻击的显著保护。
复制操作可采用多种形式,但在一个实施例中,此使得目的地边界指针及相关联的许可属性成为源边界指针及相关联的许可属性的拷贝,也即在复制进程期间未进行修正。
尽管如此,在一替代实施例中,复制操作可使得目的地边界指针及相关联的许可属性中的至少一个成为源边界指针及相关联的许可属性的修正版本。
在一个实施例中,源边界指针可包括指针值及相关联的范围信息,以及在复制操作期间,可禁止指针值自身的修正。然而,复制操作可允许对范围信息进行某些调整,在一个实施例中,在复制操作期间,边界指针边界禁止延伸,也即范围只能缩小,而不得延伸。同样,如果在复制操作期间,发生相关联的许可属性的修正,则复制操作可禁止任何设法增加边界指针的允许使用的修正。由此,通常将出现此种情况:复制操作期间发生的任何这样的修正将使得边界指针的使用相对于与源边界指针关联的使用而进一步受限。
如先前提及的,可针对前文提及的复制许可属性以关联方式用于哪些类型的边界指针而进行选择。在一个实施例中,复制许可属性的使用可与用于确定功能指针的源边界指针相关联,例如诸如分支操作所分支至的目标地址,或返回以遵循分支操作的返回地址。
边界指针储存组件可采用缓存器及/或存储器位置的形式。在一个实施例中,源边界指针储存组件及目的地边界指针储存组件中的至少一个是边界指针缓存器。在一些情况下,源边界指针储存组件及目的地边界指针储存组件皆可由缓存器形成,但在一替代实施例中,源边界指针储存组件及目的地边界指针储存组件中的至少一个可为存储器位置。实际上,如果架构允许,则源边界指针储存组件及目的地边界指针储存组件皆有可能为存储器位置。
尽管在一个实施例中,规定复制操作且使得处理电路对源边界指针储存组件进行选择性无效化(如前文所论述)的指令可为标准的已有指令。例如,在基于能力的架构中,规定能力储存组件者可能是所谓的能力指令。然而,在一替代性实施例中,可生成这样的指令的「无复制」变体,以及上述功能可限定于执行“无复制”变体的情况。例如,在一个实施例中,至少一个使得处理电路以前文论述的方式选择性地使源边界指针储存组件无效化的指令是第一指令,该第一指令是第二指令的「无复制」变体。在这样的实施例中,在源边界指针的复制许可属性指示源边界指针将被阻止进行复制操作的情形中,处理电路可响应于第二指令的执行而实施预定操作,以阻止产生源边界指针的副本。由此,第二指令的执行仍可被配置为确保不发生复制,但所采取的动作可不同于执行第一指令(也即无复制变体)时所实施的动作。
预定操作可采用多种形式。例如,在一个实施例中,预定操作可涉及中止第二指令的执行。
在一替代实施例中,预定操作可包括通过使用与前文论述的用于使源边界指针储存组件无效化的机制类似的机制,将目的地边界指针储存组件标记为储存无效的边界指针。将理解,如果目的地边界指针储存组件被标记为无效,则此举基本导致复制操作被视为未发生。由此,此仍然是用于确保不生成副本的有效机制。
规定复制操作且使得处理电路使用前文论述机制而选择性地使源边界指针储存组件无效化的指令的类型可采用多种形式。例如,此类型可采用加载指令的形式,该加载指令用于从存储器将边界指针加载缓存器,或采用储存指令的形式,该指令用于从缓存器将边界指针储存回存储器。在另一实例中,此类型可采用移动指令的形式,该移动指令使边界指针从源缓存器移至目的地缓存器。应注意,尽管该指令被称作移动指令,但通常情况是移动指令自身不从源缓存器移除数据,以及由此在本技术的上述功能不存在的情况下有效地生成副本。
在又一实例中,指令可包括分支指令,其中源边界指针用于生成用于储存的目标地址,以作为程序计数器边界指针储存组件内的新程序计数器值。又,在上述本技术不存在的情况下,程序计数器边界指针储存组件将更新,但原始的源边界指针将仍位于源边界指针储存组件内,以及因此产生了副本。然而,经由使用前文描述的技术,可确保仅保留一个副本,即在分支指令执行之后储存在程序计数器边界指针储存组件中的副本。
在一个实施例中,分支指令是含链路分支指令,在含链路分支指令的执行期间,处理电路被配置为在链路缓存器边界指针储存组件内储存程序计数器边界指针储存组件的当前内容,以标识返回地址边界指针,以及在链路缓存器边界指针储存组件内设定复制许可属性,以指示返回地址边界指针将被阻止进行复制操作。由此,无论与程序计数器边界指针储存组件的当前内容关联的任何复制许可属性的值为何(或甚至在这样的复制许可属性并未与程序计数器边界指针储存组件关联使用的情况下),皆可确保当用返回地址边界指针填充链路缓存器边界指针储存组件时,复制许可属性经设定以指示返回地址边界指针将被阻止进行复制操作。这例如通过设法将链路缓存器的当前内容复制至不同缓存器或存储器确保无法复制返回地址。
边界指针储存组件可以多种方式构成。例如,尽管边界指针及相关联的许可属性可在单个实体储存组件内储存为连续数据区块,但在一替代实施例中,边界指针储存组件可包括第一子组件以储存边界指针及包括第二子组件以储存相关联的许可属性。此外,考虑边界指针自身,边界指针及相关联的范围信息无需实体储存在同一位置,因此,范围信息可单独储存至指针值自身。
现将通过参考图式来描述特定实施例。
图1示意地图示数据处理设备2的实例,该数据处理设备包括处理管线4以用于处理指令。在此实例中,处理管线4包括数个管线级,这样的管线级包括撷取级6、译码级8、发出级10、执行级12及写回级14,但将理解,可提供其它类型或组合的级。例如,一些实施例中可包括用于执行缓存器更名的更名级。待处理指令从一级移至另一级,且在指令在一个级搁置时,另一指令可在管线4中的一不同级搁置。
撷取级6从级别1(L1)指令缓存器20中撷取指令。撷取级6通常可依序从连续的指令地址撷取指令。然而,撷取级也可具有分支预测器22以用于预测分支指令结果,以及如果预测采用分支,则撷取级6可从(非顺序)分支目标地址撷取指令,或如果预测不采用该分支,则可从下一顺序地址撷取指令。分支预测器22可包括一个或多个分支历史表以用于储存信息,该信息用于预测某些分支是否可能被采用。例如,分支历史表可包括计数器以用于追踪先前执行的分支的实际结果,或用于表示对分支进行的预测的置信度。分支预测器22也可包括分支目标地址缓存器(branch target address cache;BTAC)24,以用于快取分支指令的先前目标地址,从而在随后遇到相同分支指令时可预测这样的地址。
所撷取的指令被传递至译码级8,此级译码指令以生成译码指令。译码指令可包括控制信息,以用于控制执行级12执行适当的处理操作。对于从缓存器20撷取的更复杂的指令,译码级8可将彼等指令映像至多个译码指令,这样的映像可被称为微操作(μops或uops)。由此,从L1指令缓存器20撷取的指令与如管线中随后级可见的指令之间可能没有一对一关系。一般而言,本申请案中对“指令”的引用应理解为包括微操作。
译码指令被传递至发出级10,该级确定执行指令所需的操作数是否可用,以及在操作数可用时发出用于执行的指令。一些实施例可支持依序处理,从而指令按一次序被发出以用于执行,该次序对应于从L1指令缓存器20撷取指令的程序次序。其它实施例可支持无序执行,从而指令可以不同于程序次序的一次序被发出至执行级12。无序处理可用于改良效能,因为当等候操作数时停顿较早指令,可首先执行程序次序中其操作数可用的随后指令。
发出级10将指令发出至执行级12,在该级处,指令经执行以实现多个数据处理操作。例如,执行级可包括数个执行单元30、32、34,包括用于实现对整数值的算法或逻辑运算的算法/逻辑单元(arithmetic/logic unit;ALU)30、用于实现以浮点形式表示的值的操作的浮点(floating-point;FP)单元32及用于实现载入操作或储存操作的加载/储存单元34,这样的加载操作用于将数据值从级别1(L1)数据缓存器36加载至缓存器40,这样的储存操作用于将数据值从缓存器40储存至L1数据缓存器36。将理解,这样的仅为可能提供的执行单元种类的一些实例,以及也可提供众多其它种类。为实现处理操作,执行级12可从缓存器40组读取数据值。随后,执行指令的结果可通过写回级14而写回缓存器40。
L1指令缓存器20及L1数据缓存器36可为缓存器阶层的部分,该阶层包括多个缓存器级别。例如,也可提供级别2(L2)缓存器44,以及能够可选地提供更多级别的缓存器。在此实例中,L1指令缓存器20与L1数据缓存器36之间共享L2缓存器44,但其它实例则可具有单独的L2指令及数据缓存器。当待撷取指令并非在L1指令缓存器20中时,可从L2缓存器44中撷取指令,以及同样地,如果指令并非在L2缓存器44中,则可从主存储器50中撷取指令。同样地,响应于加载指令,如果数据不在L1数据缓存器36中,可从L2缓存器44中撷取数据,以及若需要可从存储器50撷取数据。任何已知方案可用于管理缓存器阶层。
由管线4用于指示程序指令及数据值的地址可为虚拟地址,但至少主存储器50及可选地至少一些级别的缓存器阶层也可经实体寻址。因此,变换旁看缓冲器(translationlookaside buffer;TLB)52可经提供用于将管线4所用的虚拟地址转化至用于存取缓存器或存储器的实体地址。例如,TLB 52可包括数个条目,每一条目规定虚拟地址空间的一对应页的虚拟页地址及对应实体页地址,虚拟页地址应映像至该实体页地址,从而将对应页内的虚拟地址转化至实体地址。例如,虚拟及实体页地址可对应于对应虚拟及实体地址中的最高有效部分,当映像虚拟地址至实体地址时,剩余最低有效的部分保持不变。除了地址转化信息的外,每一TLB条目也可包括一些信息,该信息规定存取许可,如指示在管线4的某些模式下是否可存取地址的某些页。在一些实施例中,TLB条目也可定义地址对应页的其它性质,如定义哪些级别的缓存器阶层响应于读取或写入操作而更新(例如缓存器是否应在写回或直写模式下操作)的缓存器策略信息,或定义在对应页中对地址的数据存取是否可由存储器系统重新定序(与管线4所发出的数据存取次序相对)的信息。
尽管图1图示单个级别TLB 52,但将理解,可提供TLB阶层从而级别1(L1)TLB 52可包括TLB条目以用于转化数个最近存取页中的地址,以及可提供级别2(L2)TLB以用于储存数目更大页的条目。当L1TLB中不存在所需条目时,可从L2TLB中撷取条目,或从该阶层中其它TLB撷取。如果待存取页的所需条目不在任何TLB中,则可执行页表查询以在存储器50中存取页表。任何已知TLB管理方案可用于本技术。
此外将理解,一些系统可支持多个级别的地址转换,从而例如第一TLB(或TLB阶层)可用于将虚拟地址转化至中间地址,以及通过使用一个或多个更多TLB的第二地址转换级别可随后将中间地址转化至用于存取缓存器或存储器的实体地址。此可用于在例如第一地址转换级别可由操作系统管理及第二地址转换级别可由超管理器管理的时支持虚拟化。
如图1所示,设备2可具有一组边界指针缓存器60。尽管该边界指针缓存器组在图1中图示为实体独立于通用数据缓存器40组,但在一个实施例中,同一实体储存器可用于提供通用数据缓存器及边界指针缓存器。
每一边界指针缓存器60包括可用于确定待存取数据值地址的指针值62,以及在使用对应指针62时规定地址允许范围的范围信息64。边界指针缓存器60也可包括限制信息66(本案中也被称作许可信息),此信息可定义针对指针使用的一个或多个限制/许可。例如,限制66可用于限制可使用指针62的指令的种类,或可使用指针的管线4模式。因此,范围信息64及限制信息66可被视作定义其中允许使用指针62的能力。当尝试使用超出定义能力的指针62时,可触发错误。范围信息64例如可用于确保指针保持在某些已知边界内且不杂散至存储器地址空间的其它本地,这样的本地可能含有敏感或安全信息。在一个实施例中,当同一实体储存器同时用于通用数据缓存器及边界指针缓存器时,则在一个实施例中,指针值62可例如储存在用于对应通用缓存器的同一储存位置内。
图2图示指令类型实例,这样的指令的允许范围用于防止对数据或指令的无授权存取。如图2上半图所示,特定边界指针缓存器PR1包括给定指针值62及范围信息64,在此实例中,该边界指针缓存器PR1通过使用下边界地址68与上边界地址69而规定,该下边界地址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集的外,当正在从级别1指令缓存器20撷取指令时,程序计数器能力(program countercapability;PCC)缓存器80也可用于在撷取级6提供类似功能。特定而言,程序计数器指针可储存在域82中,PCC 80也提供范围信息84及任何适当的限制信息86,类似于边界指针储存组件60集中每一指针配有的范围及限制信息。
图3示意地图示标签位如何与个别数据区块关联使用于标识彼等数据区块表示能力(也即边界指针及关联的限制信息)还是表示正常数据。特定而言,存储器地址空间110将储存一系列数据区块115,这样的数据区块典型地将具有规定大小。仅以说明为目的,假定在此实例中每一数据区块包括128个位。与每一数据区块115相关联,提供标签字段120,该标签字段在一个实例中是被称作标签位的单个位域,该域经设定以标识关联数据区块表示能力,以及被清除以指示关联数据区块表示正常数据,由此不能被视作能力。将理解,与设定或清除状态关联的实际值可取决于实施例而变化,但仅以说明方式,在一个实施例中,如果标签位具有值1,则指示关联数据区块是一能力,以及如果该标签位具有值0,则指示关联数据区块含有正常数据。
当能力加载边界指针缓存器60中的一个(在本案中也被称作能力寄存器)时,如图3中所示能力寄存器100,随后标签位利用能力信息而移动。因此,当能力加载能力寄存器100时,指针102、范围信息104及限制信息106(下文被称作许可信息)将被加载能力寄存器。另外,与该能力寄存器关联,或作为缓存器内的特定位域,标签位108将被设定以标识这样的内容表示一能力。同样地,当一能力储存回至存储器时,有关标签位120将经设定以关联其中储存有能力的数据区块。以此方法,有可能区分能力与正常数据,由此确保正常数据不能用作能力。
图4是表130,该表显示多个许可,这样的许可能规定位于能力的许可域106内。行135列出多个许可,行140随后标识每一许可的含义。在图4中可见,多个许可能经设定以标识能力中规定的指针是否可用于标识地址,通用数据或能力将从该地址被加载或被储存至该地址中。执行许可也可用于标识能力中规定的指针是否可用于标识一地址,指令将从该地址被撷取。另外,全局许可能用于指示能力是否具有全局范围,或反的是否被视作仅与程序线程关联的本地能力,该能力被分配至该程序线程。另外,在一个实施例中,提供「储存本地」许可以标识能力中规定的指针值是否可用于标识非全局能力的储存地址。如果经设定,则全局与本地能力皆可通过使用该指针而储存,然而如果被清除,则仅可通过使用该指针储存全局能力。
此外,对于下文描述实施例而言,提供额外许可(本案中被称为“可复制”许可)以标识该能力是否可进行复制操作。复制操作可采取多种形式,以及在一个实施例中不仅包括产生绝对复制能力的操作,而也包括导致待产生的能力的变异版本的操作。在一个实施例中,能力复制将受限,以使得范围及许可皆不由于复制进程而扩大。此外,如设定若可复制域,则此指示可复制该能力,而如果未设定,则此指示不能复制该能力。
“可复制”许可是本案中提及的“复制许可属性”的一实例。将理解,许可能以不同方式表示,前提是该许可能够在允许复制与不允许复制的能力之间进行区分。例如,可改为提供“不可复制”许可作为复制许可属性的实例,该许可在设定时将指示该能力不得复制,以及在该许可被清除时将指示该能力可被复制。
如前文提及,一旦程序线程已经分配能力,则在允许修正该能力(及特定而言该能力中规定的许可)的程度上,在一个实施例中仅限允许例如通过清除有关许可位而减少许可,但不允许扩大许可。因此,如果程序线程已经分配有已设定数据加载许可,但未设定指令执行许可的能力,则线程有可能清除加载许可,但线程将无法设定执行许可。
设备可用的存储器地址空间可被视作划分为本地存储器150及全局存储器160,如图5中示意地图示。本地存储器150可包括一个或多个堆栈,这样的堆栈中的堆栈框架可分配至个别程序线程,以允许彼等程序线程储存本地数据(也即特定于该线程的资料)。全局存储器160可例如包括堆,以及提供可储存多个程序线程之间共享的数据的本地。
图6是流程图,该图图示在非信任实体以一方式复制能力,该方式允许保留该副本以由该非信任实体随后处理时,控制流完整性(Control Flow Integrity;CFI)问题可如何发生。特定而言,假定信任实体1 200执行进程A210,在该执行期间,执行分支指令,此举使得指令流分支至非信任实体2205的进程B 215内的目标地址,如分支路径212所指示。假定由进程A210执行的分支指令是含链路分支指令,以及因此在执行分支时,利用当前程序计数器值生成返回地址,该返回地址储存在进程B 215可用的能力链路寄存器内。在适时情况下,一旦进程B已完成,则将从能力链路寄存器存取返回地址,以及处理将从路径217上返回进程A 210。
上文列出正常、预期行为,此后信任实体200内的处理继续进行,且如图6所示,在与“预期流”部分关联,随后将执行进程C 220,以及将发生在路径222、227上的类似分支及返回动作,从而在非信任实体205上调用进程D 225。
由于在非信任实体205上操作的进程仅意欲使用返回地址以将处理返回至信任实体,预计无需在非信任实体上执行进程以只得在其正常处理期间复制返回地址。然而,例如如果进程B 215包括将能力链路寄存器内容储存至存储器位置的步骤,则该副本有可能以这样的方式保存:该方式允许该副本被进程D存取。此举在图6的剩余部分中以具体实例的方式示意地图示。
特定而言,假定本地存储器150包括堆栈230,且进程A 210及进程B 215的执行期间,进程A及进程B皆在堆栈230上分配有关联的堆栈框架235、240。通常,堆栈框架从堆栈顶部分配,以及当个别进程完成时,堆栈上的数据被无效化,从而释放堆栈上将分配至随后的进程的空间。
假定在此实例中,进程B 215在某点将其能力链路寄存器的内容储存至其堆栈框架240,从而使返回地址245被置于堆栈框架上。返回地址在堆栈框架上的此初始储存可为进程B中某破坏活动(或事实上可合法完成的破坏活动)的直接结果,例如由于导致能力链路寄存器的内容需要暂时储存在堆栈框架240上的异常炼。
如果返回地址信息仅保存在堆栈框架边界内,则将最终在适当时弹出离开堆栈,例如在信息需要加载回能力链路寄存器中时。此外,如果数据在进程B完成时仍保存在堆栈框架上,则该数据通常将在堆栈框架去分配时无效化。
然而,如果进程B将返回地址信息245复制至朝向堆栈230底部的位置250,则返回地址信息可能将继续存留达一显著时段。例如,往往发生以下情况:不使用堆栈230整体,以及因此朝向堆栈底部的地址不会被定期无效化及重写。
此可发生对意欲程序流的潜在破坏,如图6的左下角所示。特定而言,尽管进程为进程A 210及进程B 215预期的进程,以及执行继续进行至进程C 220,从而在路径222上的分支到达进程D 225,但进程D可能够避免返回执行至信任实体200内的预期位置,因为已在进程B中存取储存在位置250中朝向堆栈230底部的返回地址。特定而言,如果该返回地址信息复制为由进程D使用的能力链路寄存器,则进程D可在路径260上返回至进程A,因此违反CFI。
图6仅图示复制能力(capability)的能量(ability)可如何导致违反CFI的一个极具体实例,以及将理解,有众多其它示例性情境,在这样的情境中,特定能力副本的产生可允许非信任实体改变控制流。
在一个实施例中,如下文将更详细地论述,诸如图4中图示的可复制属性的新复制许可属性用于通过在某些环境中阻止能力副本的生成而禁止这样的动作。
图7图示这样的方法可如何与储存能力指令关联使用,储存能力指令是规定将从能力寄存器储存至存储器的能力的指令。特定而言,将假定在此实例中,储存能力指令规定整数n及t,这样的整数用于标识两个能力寄存器,如将参考图7中方块305而更详细地论述。
特定而言,一旦在步骤300确定当前指令是储存能力指令,就在步骤305用储存在能力寄存器C中的能力的内容填充变量ct,缓存器C也即由整数t标识的能力寄存器。将储存至存储器的是此能力的内容。此外,用储存在能力寄存器C中的能力填充变量cn,该能力提供指针,该指针用于计算将储存至的存储器的地址。
随后,步骤310图示在一个实施例中可执行的标准查核,但该查核是可选的,因此在另一个实施例中可省略。特定而言,查核ct是否清除全局许可(也即标识为本地能力)及cn是否清除储存本地许可(也即不能用于储存本地能力)。如果这样的条件皆为真,则进程前进至步骤315,在该步骤中生成错误。特定而言,在彼等条件下,源于cn中指目标存储器地址不能用于储存ct,因为ct被标识为本地能力。
然而,假定步骤310中标识的条件都未满足,则储存可由此继续进行,进程继续进行至步骤320(或在不执行可选步骤310的情况下直接从步骤305进行至步骤320,因为例如如果不使用「储存本地」许可则可出现此情况)。
在步骤320中,变量ct标识的能力通过使用变量cn内含有的指针而储存至存储器,以标识将要储存至其中的存储器地址。
在步骤325中,确定变量ct是否清除可复制许可,也即标识不能复制ct。在一个实施例中,此为步骤325中唯一执行的查核,以及如果可复制许可未清除,则进程仅在步骤340结束。然而,如果可复制许可清除,则形成变量ct的部分的标签位更新以将该标签位标记为假,也即标签位已清除。随后,在步骤335中,在步骤330中更新的变量ct写回至能力寄存器C内。由于变量ct中的标签位已清除,将理解,此意味着源能力寄存器C得以有效地无效化,因为通过清除标签位,此指示这样的内容不能用作能力。因此,此时唯一的有效能力副本是已储存至存储器的一个。随后进程在步骤340结束。
在一个实施例中,当在步骤325中评定可复制许可的状态时,全局许可也被评价从而确定能力是否标记为具有全局范围,或是否为一本地能力。在一个实施例中,只有当ct清除可复制许可及指示能力是本地能力时,进程才将继续进行至步骤330,以及在所有其它情况下,将不遵循任何到达步骤340的路径。因此,在可复制许可指示禁止复制的情况中,源能力的选择性无效化仅限能力被标记为本地能力的情况。实际上,已发现,尽管有某些合法原因使全局能力被复制,但复制本地能力的合法利益则将不太可能存在,以及实际上诸如用于标识目标地址(如返回地址)的彼等本地能力的某些本地能力通常不应需要被复制。因此,复制这样的能力的任何这样的尝试可指示破坏CFI的尝试。
此外,如下文例如针对加载能力指令参考图8而将论述,如果功能不仅应用于本地能力而也应用于全局能力,则可能发生某些原子数问题,在此情况下,更新操作的序列需要以原子方式执行,从而确保正确操作。原子数在图7的实例中不是问题,因为针对源能力执行的读取-修正-写入功能(如步骤305、330,以及335所实施)是针对当前程序线程所使用的能力寄存器执行的。
图8是流程图,该图图示根据一个实施例如何处理加载能力指令。在步骤400中,确定当前指令是否是加载能力指令,以及如果是加载能力指令,则进程继续进行至步骤405。与图7中论述的储存能力指令一样,假定加载能力指令规定整数n及t。在步骤405中,初始化变量ct,例如通过设定至零值而初始化。此变量将在适当时用于保存加载能力寄存器中的能力。此外,用储存在能力寄存器C中的能力内容填充变量cn,储存在该能力中的该指针用于计算将从其中向外加载的地址。
在步骤410中,能力随后从计算得出的地址加载存储器,以及用于更新变量ct,从而变量ct因此含有加载的能力。
在步骤415中,确定ct是否清除可复制许可,从而指示不能复制。与图7的步骤325一样,可额外可选地评定ct是否清除全局许可,从而在可复制许可清除的情况下,如果额外地全局许可被清除,则仅遵循「是」路径。
假定遵循“是”路径,则在步骤420中,又一变量「ct_NO_TAG」设定等于ct,以产生变量ct的另一副本。随后,在步骤425中,变量ct_NO_TAG中的标签位被标记为假,此后,在步骤430中,变量ct_NO_TAG在先前在步骤410中用于加载的地址处被写入存储器。此通过将存储器中保存的能力的副本标记为不再是一能力,而使该副本无效化。
在步骤435中,变量ct写回至能力寄存器C内,此后,进程在步骤440结束。如果自步骤415起遵循“否”路径,则步骤420至430被绕过,以及进程直接继续进行至步骤435。
将理解,尽管步骤420、425、430提供一个机制以用于更新存储器中的能力,从而清除标签域,但在替代性实施例中,可使用不同机制。例如,某些实施例可提供更直接的机制以用于清除存储器中的标签字段,无需生成单独的变量ct_NO_TAG,随后将该变量写回存储器。
如果步骤415受限,以使得在可复制许可清除且全局许可清除的情况下仅遵循“是”路径,从而标识该能力是本地能力,则将不会发生与步骤410、420、425及430中实施的读取-修正-写入操作关联的原子数问题。然而,如果每当可复制许可清除时都遵循自步骤415起的“是”路径,且无论能力是本地还是全局的,则可能需要额外步骤来确保以原子方式发生读取-修正-写入操作,从而针对可共享该能力的任何其它线程而确保正确操作。将理解,有数个已知机制用于以原子方式处理操作,以及彼等方法中任何方法皆可使用于确保针对储存在存储器中的能力而执行的读取-修正-写入操作的原子数。
图7图示一实例,其中源边界指针储存组件是缓存器,以及目的地边界指针储存组件是存储器位置,而图8图示一情况,其中源边界指针储存组件是存储器位置,以及目的地边界指针储存组件是能力寄存器。此外,在该两个情况下,当能力进行储存操作或加载操作时,在无能力变异情况下进行直接复制。
图9图示一实例,其中源边界指针储存组件及目的地边界指针储存组件都是能力寄存器。特定而言,图9图示根据一个实施例是如何处理移动能力指令的。尽管指令被称作移动指令,但移动指令的默认操作将导致源缓存器内容被转移至目的地缓存器,且并不采取有效步骤以移除源缓存器的内容。因此,此是实施复制操作的指令的另一实例,在此情况下,上述技术可用于确保在某些情况下可保证执行指令之后将仅剩余一个副本。
在步骤500中,确定当前指令是否是移动能力指令,以及如果是移动能力指令,则进程继续进行至步骤505。假定在此实例中,移动能力指令规定整数s及d,这样的整数可分别指示源及目的地。在步骤505中,利用储存在能力寄存器C中的能力填充变量cs。此外,变量cd经设定等于cs。
在步骤510中,确定cs是否清除可复制许可。可选地,如先前针对图7的步骤325及图8的步骤415所论述,也可确定cs是否清除全局许可,从而指示该能力是本地能力。如果步骤510中规定的条件得到满足,则进程继续进行至步骤515,此处cs中的标签位被标记为假,此后在步骤520中,变量cs被写入能力寄存器C。通过将源能力寄存器内容标记为不再与能力相关,此使得源能力得以无效化。在步骤525中,变量cd被写入能力寄存器C内,此后,进程在步骤530中结束。如果自步骤510起遵循“否”路径,则步骤515及520被绕过,以及进程直接继续进行至步骤525。
当处理这样的移动指令时,针对源能力执行的读取-修正-写入操作(如步骤505、515、520所实施)是原子安全的,因为这样的操作针对能力寄存器而执行,该缓存器的使用由当前程序线程控制。因此,即使步骤510不包括将源能力无效化限定于将源能力标记为本地能力的情况的可选步骤,也不会发生原子数问题。
图9中图示的一般进程也适用于在源及目的地能力寄存器上操作的任何其它种类的能力指令,且该进程规定复制操作形式,该复制操作是否真产生复制物,或在储存在目的地能力寄存器中的能力是储存在源能力寄存器中的能力的修正版本时,该复制操作是否包括某变异。因为目的地能力寄存器的内容直接源于源能力寄存器的内容,因此这被视作表示一份副本,以及因此,图9的进程可用于选择性地使源能力寄存器无效。就步骤505而言,将理解,如果指令相对于源能力而执行某变异,则变量cd将不设定等于cs,而是将对变量cs执行某变异操作,且将所得结果储存为变量cd。
为充分说明,参考图7、图8及图9所论述的进程也可以伪码表示,例如表示如下:
//储存能力指令
StoreCapability(integer n,integer t)
Capability ct=C;
Capability cn=C;
if(ct.local&&!cn.store_local)
fault
//将能力储存至存储器
MemC(cn,ct);
//条件性地清除缓存器标签
if(ct.local&&ct.no_copy)
ct.tag=FALSE;
C=ct
//加载能力指令
LoadCapability(integer n,integer t)
Capability ct;
Capability cn=C
//从存储器加载能力
ct=MemC(cn);
//条件性地清除存储器标签
if(ct.local&&ct.no_copy)
Capability ct_no_tag=ct;
ct_no_tag.tag=FALSE;
MemC(cn,ct_no_tag);//针对第一MemC操作自动执行
C=ct
//在缓存器之间移动能力
MoveCapability(integer d,integer s)
Capability cs=C;
Capability cd=cs;
//条件性地清除源缓存器标签
if(cs.local&&cs.no_copy)
cs.tag=FALSE;
C=cs;
C=cd;
在上述示例性伪码中,假定全局许可事实上是“本地”许可,该许可经设定以指示该能力是本地能力,以及被清除以指示该能力是全局能力。此外,在此情况下,可复制许可属性事实上是“no_copy”许可属性,此许可属性经设定以标识该复制是被禁止的,以及被清除以指示允许该复制。
将理解,上述示例性伪码仅提供一个具体实例,且如需要上述进程可通过替代性伪码表示。例如,在不使用/支持“储存本地”许可的实施例中,伪码可因此被修正。作为另一实例,“no_copy”许可能替换为“可复制”许可,以及伪码可相应变更。
在一个实施例中,上述功能可针对规定复制操作的标准能力指令而应用,这样的能力指令被配置为对诸如彼等储存在能力寄存器60中的能力的能力而操作,而非对诸如储存在缓存器40上的通用数据而操作。然而,在替代性实施例中,可引入这样的能力指令的“no_copy”版本,前述处理是在执行能力指令的no_copy变体时实施的处理。尽管此将导致不同指令的数目增大,但可产生一些效能优势,因为上述机制仅需在执行指令的no_copy变体时实施,以及当执行标准能力指令时,该处理可略得以简化。
图10概略性图示可如何使用能力指令的两个变体。在步骤550中,确定有关能力是否标记为不可复制。如果并未标记,则可在步骤555中如常执行复制操作,无论规定复制操作的能力指令是正常能力指令还是no_copy变体。
然而,如果有关能力标记为不可复制(可选地通过能力是否标记为本地能力而额外地证明资格),随后自步骤550起遵循「是」路径,以及后续处理须确保不产生副本。如果在步骤560中,确定能力指令的no_copy变体正在执行,则进程继续进行至步骤565,其中图6、图7或图8的前述进程得以实施,使得源能力上的标签被清除。因此,通过实施这样的进程,复制操作得以有效地修正,从而实施真移动,源能力不以有效形式保持。
如果在步骤560中执行的能力指令并非no_copy变体,则遵循“否”路径至步骤570。步骤570中采取的确切步骤可根据实施方式而不同,前提是这样的步骤维持由自步骤550起遵循的“是”路径而产生的“不得复制”要求。例如,在一个实施例中,在此情况的下可能发生异常中止,因为可假定使用标准能力指令执行针对标记为不可复制的能力的复制操作是不正确的。在替代实施例中,进程可以复制操作的标准步骤继续进行,但采取额外措施维持不可复制要求。这例如可通过清除目的地能力上的标签域而实现,此举将有效地使副本无效化,以及将情境恢复至在执行复制操作之前存在的情境。此在处理加载操作时可提供尤其精致的解决方案,因为在功能并非限定于能力是本地能力的情况的实施例中,此举免除了对存储器所需的原子数步骤的需求。特定而言,因为已加载缓存器的副本被无效化,因此无需与保存在存储器中的副本有关的步骤。
图11是流程图,该图图示根据一个实施例可如何处理分支指令,分支指令也是一种指令,该指令由于针对程序计数器实施的更新而有效实施复制操作。在步骤600中,确定是否已经接收分支指令,以及如果如此,则在步骤605中确定该分支指令是否规定源能力。如果分支指令规定源能力(该源能力的指针将因此用于得出目标地址),随后将自步骤605起遵循“是”路径。如果并非如此,则分支指令是直接分支,在此处参考分支指令中直接规定的偏移量而计算目标地址,以及因此自步骤605起遵循“否”路径。
假定遵循“是”路径,则在步骤610中,通过使用源能力中保存的指针而计算地址,此后,在步骤615中确定源能力是否标记为不可复制。同样,如前文所论述,此确定也可限定于源能力被标记为本地能力的情况。例如,可需要保存一些功能指针/返回地址以用于本地线程(本地,以及在至少某些情况中为不可复制),以及与其它线程共享其它指针/返回地址。
假定自步骤615起遵循“是”路径,则在步骤620中清除源能力上的标签,而绕过步骤620。通过在步骤620中清除源能力上的标签,此举确保一旦程序计数器能力寄存器已通过使用由源能力计算得出的目标地址信息而更新时,将仅有一个源能力副本。
如果自步骤605起遵循“否”路径,则通过使用当前程序计数器及分支指令中规定的立即值来计算目标地址,如步骤625所示。
在步骤630中,确定分支指令是否是含链路分支指令。如果不是,则目标地址可仅于步骤640中储存在程序计数器能力寄存器中,以及无需更多步骤。然而,如果分支指令是含链路分支指令,则当前PCC内容将用于规定返回地址,以及特定而言,在步骤635中,当前PCC内容将储存在能力链路寄存器(capability link register;CLR)中。能力链路寄存器的内容因而规定返回地址,该返回地址在适当时用于遵循所分支至的进程实施而返回至原始执行流。在一个实施例中,如步骤635中所指示,此时清除CLR中的可复制许可,从而确保不可复制返回地址信息。
在步骤635之后,进程继续进行至步骤640,此处目标地址储存在PCC中。
利用上述实施例,将理解,在所有情况下,或在限定于能力标记为本地能力的一个实施例中,使用额外复制许可属性以将某些能力标记为不可复制允许复制操作的行为得到修正。特定而言,在这样的环境下复制操作可有效地转变为真移动操作,在此情况下,可确保在遵循复制操作的实施时,仅有一个能力副本仍存在。此可显著改良针对违反CFI的企图的稳健性。
在本申请案中,词语“被配置为”用于意味着设备的组件具有配置,该配置能执行所定义的操作。在此上下文中,“配置”意味着硬件或软件的互连布置或方式。例如,设备可具有专用硬件,该硬件提供定义操作,或处理器或其它处理装置可经程序化以执行该功能。“被配置为”并非暗示设备组件需以任何方式变更从而提供定义的操作。
尽管本发明的说明性实施例已在本案中通过参考附图进行详细描述,但将理解,本发明并非限定于彼等精确实施例,以及熟习该项技术者在不背离本发明范围及精神的情况下可在彼等实施例中实现多种变更、增添及润饰,如所附的申请专利范围所定义。例如,可在不背离本发明的范围的前提下,由独立权利要求的特征组成以下从属权利要求的特征的多种组合。

Claims (18)

1.一种用于数据处理的设备,包括:
多个边界指针储存组件,每个边界指针储存组件储存边界指针及相关联的许可属性,这样的相关联的许可属性指示所述边界指针的允许使用,所述相关联的许可属性包括复制许可属性和共享属性,所述复制许可属性指示所述边界指针是否被允许进行复制操作,所述共享属性指示所述边界指针是否在多个线程之间共享;以及
处理电路,所述处理电路可响应于规定所述复制操作的至少一个指令以利用源边界指针储存组件的源边界指针及相关联的许可属性而生成目的地边界指针及相关联的许可属性,并且所述目的地边界指针以及相关联的许可属性将储存在目的地边界指针储存组件中,并且在所述源边界指针的所述复制许可属性具有指示所述源边界指针将被阻止进行所述复制操作的第一值并且所述共享属性指示所述边界指针并非在多个线程之间共享时将所述源边界指针储存组件标记为储存无效的边界指针,而当所述复制许可属性具有指示所述源边界指针将被允许进行所述复制操作的第二值或当所述共享属性指示所述边界指针在多个线程之间共享时,所述处理电路被配置为将所述源边界指针储存组件保持为储存有效的边界指针;其中
每个边界指针储存组件具有与该组件关联的有效性字段,以指示所述边界指针储存组件是否储存有效的边界指针,并且所述处理电路被配置为通过更新与所述源边界指针储存组件关联的所述有效性字段,而将所述源边界指针储存组件标记为储存无效的边界指针,以标识所述源边界指针为无效。
2.如权利要求1所述的设备,其中所述有效性字段是标签字段,所述标签字段标识所述关联的边界指针储存组件的内容的数据类型,当所述标签域具有第一值时,所述内容形成边界指针及相关联的许可属性,以及当所述标签值具有不同于所述第一值的其它值时,所述内容被视作不同于边界指针及相关联的许可属性的数据。
3.如权利要求1所述的设备,其中:
所述源边界指针包括指针值及相关联的范围信息,且在所述复制操作期间禁止所述指针值的修正。
4.如权利要求3所述的设备,其中所述源边界指针用于确定功能指针。
5.如权利要求1-2中的任一项所述的设备,其中所述复制操作使得所述目的地边界指针及相关联的许可属性成为所述源边界指针及相关联的许可属性的复制物。
6.如权利要求1-2中的任一项所述的设备,其中所述复制操作使得所述目的地边界指针及相关联的许可属性中的至少一个成为所述源边界指针及相关联的许可属性的修正版本。
7.如权利要求6所述的设备,其中在所述复制操作期间,禁止对所述边界指针的边界扩大。
8.如权利要求7所述的设备,其中在所述复制操作期间,禁止进行相关联的许可属性的修正以增多所述边界指针的允许使用。
9.如权利要求1-2中的任一项所述的设备,其中所述源边界指针储存组件及所述目的地边界指针储存组件中的至少一个是边界指针缓存器。
10.如权利要求1-2中的任一项所述的设备,其中所述源边界指针储存组件及所述目的地边界指针储存组件中的至少一个是存储器位置。
11.如权利要求1-2中的任一项所述的设备,其中所述至少一个指令包括第一指令,所述第一指令是第二指令的无复制变体,并且所述处理电路响应于所述第二指令在下述情况中的执行而实施预定操作以阻止产生所述源边界指针的副本:在所述情况中,所述源边界指针的所述复制许可属性指示所述源边界指针将被阻止进行所述复制操作。
12.如权利要求11所述的设备,其中所述预定操作包括中止所述第二指令的执行。
13.如权利要求11所述的设备,其中所述预定操作包括将所述目的地边界指针储存组件标记为储存无效的边界指针。
14.如权利要求1-2中的任一项所述的设备,其中:
所述至少一个指令包括分支指令,以及所述源边界指针用于生成目标地址,以储存为程序计数器边界指针储存组件内的新程序计数器值。
15.如权利要求14所述的设备,其中所述分支指令是含链路分支指令,在所述含链路分支指令执行期间,所述处理电路被配置为将所述程序计数器边界指针储存组件的当前内容储存至链路缓存器边界指针储存组件内,以标识返回地址边界指针,以及被配置为在所述链路缓存器边界指针储存组件内设定所述复制许可属性,以指示所述返回地址边界指针将被阻止进行所述复制操作。
16.如权利要求1-2中的任一项所述的设备,其中每个边界指针储存组件包括第一子组件以储存所述边界指针,以及包括第二子组件以储存相关联的许可属性。
17.一种控制边界指针在设备内的使用的方法,所述设备具有多个边界指针储存组件,每个边界指针储存组件储存边界指针及相关联的许可属性,相关联的许可属性可指示所述边界指针允许使用,所述方法包括以下步骤:
在所述相关联的许可属性内提供复制许可属性,所述复制许可属性指示所述边界指针是否被允许进行复制操作;
在所述相关联的许可属性内提供共享属性,所述共享属性指示所述边界指针是否在多个线程之间共享;
响应于至少一个指令以利用源边界指针储存组件的源边界指针及相关联的许可属性而生成目的地边界指针及相关联的许可属性,所述至少一个指令规定所述复制操作,以及所述目的地边界指针及相关联的许可属性将储存在目的地边界指针储存组件中,并且在所述源边界指针的所述复制许可属性具有指示所述源边界指针将被阻止进行所述复制操作的第一值并且所述共享属性指示所述边界指针并非在多个线程之间共享时将所述源边界指针储存组件标记为储存无效的边界指针,而当所述复制许可属性具有指示所述源边界指针将被允许进行所述复制操作的第二值或当所述共享属性指示所述边界指针在多个线程之间共享时,将所述源边界指针储存组件保持为储存有效的边界指针;
向边界指针储存组件提供与该组件关联的有效性字段,以指示所述边界指针储存组件是否储存有效的边界指针;以及
通过更新与所述源边界指针储存组件关联的所述有效性字段,而将所述源边界指针储存组件标记为储存无效的边界指针,以标识所述源边界指针为无效。
18.一种用于数据处理的设备,包括:
多个边界指针储存组件装置,每个边界指针储存组件装置用于储存边界指针及相关联的许可属性,这样的相关联的许可属性指示所述边界指针的允许使用,所述相关联的许可属性包括复制许可属性和共享属性,所述复制许可属性指示所述边界指针是否被允许进行复制操作,所述共享属性指示所述边界指针是否在多个线程之间共享;以及
处理装置,用于响应于至少一个指令以利用源边界指针储存组件装置的源边界指针及相关联的许可属性而生成目的地边界指针及相关联的许可属性,所述至少一个指令规定所述复制操作,以及所述目的地边界指针及相关联的许可属性将储存在目的地边界指针储存组件装置中,并且所述处理装置用于在所述源边界指针的所述复制许可属性具有指示所述源边界指针将被阻止进行所述复制操作的第一值并且所述共享属性指示所述边界指针并非在多个线程之间共享时将所述源边界指针储存组件装置标记为储存无效的边界指针,而当所述复制许可属性具有指示所述源边界指针将被允许进行所述复制操作的第二值或当所述共享属性指示所述边界指针在多个线程之间共享时,所述处理装置被配置为将所述源边界指针储存组件装置保持为储存有效的边界指针;其中
每个边界指针储存组件装置具有与该组件装置关联的有效性字段,以指示所述边界指针储存组件装置是否储存有效的边界指针,并且所述处理装置被配置为通过更新与所述源边界指针储存组件装置关联的所述有效性字段,而将所述源边界指针储存组件装置标记为储存无效的边界指针,以标识所述源边界指针为无效。
CN201680066821.2A 2015-11-12 2016-09-30 用于控制有界指针的使用的设备及方法 Active CN108351935B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1519996.1A GB2544315B (en) 2015-11-12 2015-11-12 An apparatus and method for controlling use of bounded pointers
GB1519996.1 2015-11-12
PCT/GB2016/053044 WO2017081438A1 (en) 2015-11-12 2016-09-30 An apparatus and method for controlling use of bounded pointers

Publications (2)

Publication Number Publication Date
CN108351935A CN108351935A (zh) 2018-07-31
CN108351935B true CN108351935B (zh) 2023-07-14

Family

ID=55132704

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680066821.2A Active CN108351935B (zh) 2015-11-12 2016-09-30 用于控制有界指针的使用的设备及方法

Country Status (9)

Country Link
US (1) US10650136B2 (zh)
EP (1) EP3374919B1 (zh)
JP (1) JP6913681B2 (zh)
KR (1) KR102548226B1 (zh)
CN (1) CN108351935B (zh)
GB (1) GB2544315B (zh)
IL (1) IL258891B (zh)
TW (1) TWI725059B (zh)
WO (1) WO2017081438A1 (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2562102B (en) * 2017-05-05 2019-09-04 Advanced Risc Mach Ltd An apparatus and method for managing use of capabilities
GB2563010B (en) * 2017-05-25 2019-12-25 Advanced Risc Mach Ltd An apparatus and method for managing a capability domain
GB2563009B (en) 2017-05-25 2019-12-25 Advanced Risc Mach Ltd An apparatus and method for interpreting permissions associated with a capability
GB2563580B (en) * 2017-06-15 2019-09-25 Advanced Risc Mach Ltd An apparatus and method for controlling a change in instruction set
US10416963B2 (en) * 2017-06-19 2019-09-17 Arm Limited Bounds checking
GB2564130B (en) * 2017-07-04 2020-10-07 Advanced Risc Mach Ltd An apparatus and method for controlling execution of instructions
US10387335B2 (en) * 2017-09-28 2019-08-20 Hewlett Packard Enterprise Development Lp Memory system and handles to master capabilities
GB2570692B (en) * 2018-02-02 2020-09-09 Advanced Risc Mach Ltd Controlling guard tag checking in memory accesses
GB2592069B (en) * 2020-02-17 2022-04-27 Advanced Risc Mach Ltd Address calculating instruction
US20220197678A1 (en) * 2020-12-22 2022-06-23 Intel Corporation Apparatus and method for secure instruction set execution, emulation, monitoring, and prevention

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1894673A (zh) * 2002-12-20 2007-01-10 英特尔公司 在多线程处理环境中改进的cheney扫描的执行
CN103745755A (zh) * 2014-01-06 2014-04-23 中国科学院软件研究所 一种高效且高可用的空间内存错误检测方法
CN103902251A (zh) * 2012-12-27 2014-07-02 辉达公司 指令转译中的故障检测
CN104836754A (zh) * 2015-04-03 2015-08-12 盛科网络(苏州)有限公司 利用高速Serdes实现背板自协商功能的方法及装置

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5247632A (en) * 1989-01-23 1993-09-21 Eastman Kodak Company Virtual memory management arrangement for addressing multi-dimensional arrays in a digital data processing system
US5590329A (en) * 1994-02-04 1996-12-31 Lucent Technologies Inc. Method and apparatus for detecting memory access errors
US5583988A (en) * 1994-03-09 1996-12-10 National Instruments Corporation Method and apparatus for providing runtime checking features in a compiled programming development environment
US5845331A (en) * 1994-09-28 1998-12-01 Massachusetts Institute Of Technology Memory system including guarded pointers
US7181580B2 (en) * 2003-03-27 2007-02-20 International Business Machines Corporation Secure pointers
US7856624B2 (en) * 2003-09-15 2010-12-21 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
US8271735B2 (en) * 2009-01-13 2012-09-18 Oracle America, Inc. Cache-coherency protocol with held state
US8635415B2 (en) * 2009-09-30 2014-01-21 Intel Corporation Managing and implementing metadata in central processing unit using register extensions
JP2011134202A (ja) * 2009-12-25 2011-07-07 Internatl Business Mach Corp <Ibm> メモリ管理装置、メモリ管理方法、及びメモリ管理プログラム
WO2012103253A2 (en) * 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
KR101612594B1 (ko) * 2011-01-27 2016-04-14 소프트 머신즈, 인크. 프로세서의 변환 룩 어사이드 버퍼를 이용하는 게스트 명령-네이티브 명령 레인지 기반 매핑
US8600939B2 (en) * 2011-10-24 2013-12-03 Oracle International Corporation Writable snapshots
US9189375B1 (en) * 2013-12-31 2015-11-17 Google Inc. Dynamic sandboxing

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1894673A (zh) * 2002-12-20 2007-01-10 英特尔公司 在多线程处理环境中改进的cheney扫描的执行
CN103902251A (zh) * 2012-12-27 2014-07-02 辉达公司 指令转译中的故障检测
CN103745755A (zh) * 2014-01-06 2014-04-23 中国科学院软件研究所 一种高效且高可用的空间内存错误检测方法
CN104836754A (zh) * 2015-04-03 2015-08-12 盛科网络(苏州)有限公司 利用高速Serdes实现背板自协商功能的方法及装置

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Capability Hardware Enhanced RISC Instructions:CHERI Instruction-Set Architecture;robert N M Watson ET AL;《https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-876.pdf》;20150930;正文第44,56页 *
Julián Armando González.Taxi: Defeating Code Reuse Attacks with Tagged Memory.《https://people.csail.mit.edu/hes/ROP/Publications/Julian-thesis.pdf》.2015,正文第41-46,64-80,91-94,103页. *
Taxi: Defeating Code Reuse Attacks with Tagged Memory;Julián Armando González;《https://people.csail.mit.edu/hes/ROP/Publications/Julian-thesis.pdf》;20150930;正文第41-46,64-80,91-94,103页 *

Also Published As

Publication number Publication date
IL258891A (en) 2018-06-28
WO2017081438A1 (en) 2017-05-18
EP3374919B1 (en) 2019-10-23
TWI725059B (zh) 2021-04-21
JP6913681B2 (ja) 2021-08-04
GB2544315A (en) 2017-05-17
CN108351935A (zh) 2018-07-31
EP3374919A1 (en) 2018-09-19
KR102548226B1 (ko) 2023-06-27
KR20180082495A (ko) 2018-07-18
IL258891B (en) 2020-04-30
US10650136B2 (en) 2020-05-12
US20190012455A1 (en) 2019-01-10
GB2544315B (en) 2018-02-14
GB201519996D0 (en) 2015-12-30
TW201716995A (zh) 2017-05-16
JP2018538610A (ja) 2018-12-27

Similar Documents

Publication Publication Date Title
CN108351935B (zh) 用于控制有界指针的使用的设备及方法
US10838878B2 (en) Apparatus and method for generating signed bounded pointers
CN108292272B (zh) 用于管理有界指针的装置和方法
US11030344B2 (en) Apparatus and method for controlling use of bounded pointers
CN110622133B (zh) 用于管理能力域的设备及方法
IL270499B (en) A standard and method for interpreting capability-related credentials
JP2023038361A (ja) 命令セット内の変更を制御する装置及び方法
US20230409494A1 (en) Technique for constraining access to memory using capabilities
TW202318210A (zh) 用於處理密封能力之技術
JP2024517627A (ja) ケイパビリティを使用してメモリへのアクセスを制約するための技法
JP2024538674A (ja) 封止されたケイパビリティを操作するための技法
TW202319913A (zh) 用於使用能力限制對記憶體存取之技術
TW202340955A (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