CN108463826A - 用于在环转变期间保护栈的处理器扩展 - Google Patents
用于在环转变期间保护栈的处理器扩展 Download PDFInfo
- Publication number
- CN108463826A CN108463826A CN201780005757.1A CN201780005757A CN108463826A CN 108463826 A CN108463826 A CN 108463826A CN 201780005757 A CN201780005757 A CN 201780005757A CN 108463826 A CN108463826 A CN 108463826A
- Authority
- CN
- China
- Prior art keywords
- ssp
- shadow stack
- grade
- processor
- prerogative grade
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring 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/54—Monitoring 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
- G06F12/1491—Protection against unauthorised use of memory or access to memory by checking the subject access rights in a hierarchical protection system, e.g. privilege levels, memory rings
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/062—Securing storage systems
- G06F3/0622—Securing storage systems in relation to access
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0637—Permissions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1052—Security improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2141—Access rights, e.g. capability lists, access control lists, access tables, access matrices
Abstract
提供了用于在环转变期间保护栈的处理器扩展的处理器实现的技术。在一个实施例中,处理器包括多个寄存器以及处理器核,该处理器核可操作地耦合至该多个寄存器。多个寄存器用于存储在特权等级转变中使用的数据。多个寄存器中的每个寄存器与特权等级相关联。接收用于将当前活动应用的第一特权等级改变为第二特权等级的指示符。考虑到第二特权等级,选择存储在多个寄存器中的寄存器中的影子栈指针(SSP)。该寄存器与第二特权等级相关联。通过使用SSP,标识用于由处理器在第二特权等级使用的影子栈。
Description
技术领域
本公开的实施例一般涉及微处理器,并且更具体地但非限制地涉及用于在环转变期间保护栈的处理器扩展。
背景技术
面向返回的编程(ROP)是计算机安全利用技术,其中攻击者使用软件控制来执行攻击者选择的指令序列。在ROP攻击中,攻击者可将被称作“小配件(gadget)”的序列链接在一起。每个小配件可表示一条或一些指令的集合,跟随其后的是从过程指令的返回。攻击者可分析代码以定位或标识期望的小配件,该代码诸如应用、系统级代码、驱动程序、库等。在一些情况下,攻击者可能能够标识充足的小配件,从而能够将各种不同的恶意动作串在一起,并执行这些恶意动作。
附图说明
通过下文给出的具体实施方式并通过本公开各种实施例的附图,将更完整地理解本公开。然而,不应当认为这些附图将本公开限制为特定实施例,而是这些附图仅用于说明和理解。
图1图示出根据一个实施例的用于支持用于在环转变期间保护栈的处理器扩展的处理设备的框图。
图2图示出根据一个实施例的用于支持用于在环转变期间保护栈的处理器扩展的包括存储器的系统。
图3图示出根据一个实施例的用于作为中断递送的部分的切换栈的包括图2的存储器的系统。
图4图示出根据一个实施例的用于作为任务切换的部分的切换栈的包括图2的存储器的系统。
图5图示出根据一个实施例的在特权转移时切换栈的方法的流程图。
图6A是图示出根据一个实施例的处理器的微架构的框图。
图6B是图示出根据一个实施例的有序流水线以及寄存器重命名级、乱序发布/执行流水线的框图。
图7是图示出根据一种实现方式的计算机系统的框图。
图8是图示出系统的框图,在该系统中可使用本公开的实施例。
图9是图示出系统的框图,在该系统中可使用本公开的实施例。
图10是图示出系统的框图,在该系统中可使用本公开的实施例。
图11是图示出芯片上系统(SoC)的框图,在该芯片上系统中可使用本公开的实施例。
图12是图示出SoC设计的框图,在该SoC设计中可使用本公开的实施例。
图13图示出示出计算机系统的框图,在该计算机系统中可使用本公开的实施例。
具体实施方式
本文中公开了用于在环转变期间保护栈的处理器扩展的技术。在许多情况下,诸如x86架构之类的指令集架构(ISA)在硬件平台级提供至少四个不同的特权等级。这些特权等级用于通过保护资源免受由较不受信任实体的直接访问来提高与硬件平台相关联的操作系统(例如,内核)的可靠性。在一些实施例中,这些特权等级的范围从最受信任的特权等级环0(例如,管理程序模式)到环3或无特权等级(例如,应用或用户模式)。特权等级中的每一个需要被预先分配和储存的一些资源以供在从一个特权等级到另一个特权等级的环转变时的后续使用。
在许多情况下,计算机系统处理器通常具有控制计算机系统中的应用指令执行的当前特权等级。处理器可改变其当前特权等级以控制应用对系统资源的可访问性,该系统资源诸如系统寄存器、系统指令、系统存储器等。在执行应用时,处理器利用与该处理器相关联的数据栈。该数据栈存储数据(例如,传递到子例程的参数和其他数据等)和用于引导所执行的指令的控制流的控制信息。典型地,该控制信息可包括用于一个或多个先前执行的过程调用的一个或多个返回地址。这些返回地址是当所调用的过程结束并返回时所调用的过程将要返回控制流的地方。
在ROP攻击中,攻击者通常试图得到对数据栈的控制以劫持程序控制流。例如,攻击者可执行对存储在数据栈中的过程的返回地址的未经授权的栈修改。该未经授权的栈修改用于将当前进程的控制流转移至任意存储器位置,以实现攻击者的意图。可趋向于使数据栈更易于受到ROP和其他类型的控制流颠覆攻击的一个因素是,栈通常存储数据和控制信息两者(例如,数据和返回地址通常在同一栈上被混合在一起),并且因此数据栈需要是可由软件写入的。可趋向于使数据栈更易于受到此类攻击的其他因素是,数据栈的切换一般被执行为无特权的操作或者当前进程可消耗如来自可被篡改而不被检测到的位置的数据栈位置之类的信息。例如,响应于一些事件(例如,中断/异常),处理器可将对在无特权用户级处执行的指令序列的控制转移到管理程序特权等级,以访问处置该事件所需要的资源。由于允许栈指针和/或控制流信息(例如,返回地址)被修改(例如,以指向恶意软件/攻击者控制的存储器)的所利用的缺陷,以上所讨论的这些因素可趋向于增加对控制流颠覆攻击的系统暴露。
本公开的实施例提供用于在特权转移时保护栈免于某种类型的控制流颠覆攻击的技术。在一些实施例中,提供数个影子栈以帮助保护数据栈上的控制信息免于篡改企图,并且以帮助增加计算机安全性。影子栈是与数据栈分离的第二栈,并且被用于存储和保护来自数据栈的在控制转移操作中使用的信息。例如,影子栈可被用于存储控制信息而不是数据(例如,不是用户级应用程序将需要能够写入和修改的存储在栈上的类型的参数和其他数据)。
在一些实施例中,影子栈仅可由某些指令写入,这些指令诸如执行控制转移操作和流(例如,中断/异常递送)的“CALL(调用)”(其为使用数据栈的过程调用机制的示例)和“FAR CALL(远调用)”(其为实现微分支跳转指令和宏分支跳转指令两者的分支指令的示例)。在此类情况下,影子栈可能不可由其他软件通过其他指令发起的存储写入,该其他指令诸如在单个操作中转移多个字节的“MOV”,以及用于将上下文状态存储到存储器并将该上下文状态从存储器恢复为处理器的寄存器的“XSAVE”。此写入保护通过在页表中将用于影子栈的存储器标记为影子栈存储器来实现,使得由软件使用如“MOV”、“XSAVE”等指令来发起的存储不完成和出错。同样地,当诸如“CALL”之类的指令生成旨在用于影子栈存储器的存储指令时,它们使用特定的存储操作,使得它们仅在对其执行该存储的存储器在页表中被标记为影子栈存储器时完成。否则,错误发生。
在一些实施例中,影子栈可任选地被配置成用于单独地以无特权用户级模式(例如,环3特权等级)或以有特权的或管理程序特权等级模式(环0、环1、或环2特权等级)的操作。为了支持在特权从源特权等级切换到新的特权等级时切换影子栈,本文中所描述的技术提供了寄存器,其中每个寄存器与某个特权等级相关联。在一些实施例中,系统软件(例如,系统内核或操作系统)将影子栈指针(SSP)加载到每个寄存器中。然后,处理器可以经由与特定的新的特权等级相关联的寄存器来访问SSP,以标识在该等级将被使用的影子栈。在操作时,一旦处理器为新的特权等级选择SSP,则该处理器进行检查,以验证被编程到寄存器中的SSP对于由处理器在新的等级使用是有效的。如果该检查是成功的,则该处理器将在新的特权等级的影子栈设置为忙碌的,并将用于源特权等级的返回地址信息推至影子栈上。此后,本公开的实施例确保然后在影子栈被标记为不忙碌的之前验证处理器返回到源特权等级的任何转变。此验证包括确保被推至影子栈上的源特权等级的返回地址匹配与数据栈相关联的当前地址。为了执行此验证,处理器使用特定的加载操作(例如,“shadowStackPop(影子栈弹出)”或具有影子栈语义的加载),使得如果该加载操作不是用于在页表中被标记为影子栈存储器的存储器则此加载不完成而出错。因此,任何用于将影子栈指针指向非影子栈存储器的尝试将被检测并被阻止。
在其他实施例中,本文中所描述的技术可被使用,例如,用于保护作为中断/异常递送的部分或作为从在源特权等级的当前任务到在新的特权等级的新任务的任务切换的部分的影子栈切换,用于利用影子栈来执行快速系统调用(例如,用户模式特权转变到具有硬件权限的完全控制的模式),用于保护影子栈免受诸如从较少特权的进程到较多特权的进程的攻击之类的跨线程攻击,以及用于在环转变期间保护影子栈免受由攻击者采用的其他类型的未经授权的栈修改。
图1图示出根据一个实施例的用于支持用于在环转变期间保护栈的处理器扩展的处理设备的框图。处理设备100一般可被称为“处理器”或“CPU”。本文中的“处理器”或“CPU”将指代能够执行对算术、逻辑或I/O操作进行编码的指令的设备。在一个说明性示例中,处理器可以包括算术逻辑单元(ALU)、控制单元以及多个寄存器。在进一步的方面中,处理器可以包括一个或多个处理核,并且因此,处理器可以是通常能够处理单个指令流水线的单核处理器,或可以是可以同时处理多个指令流水线的多核处理器。在另一方面中,处理器可以实现为单个集成电路、两个或更多个集成电路,或可以是多芯片模块(例如,其中,各个微处理器管芯被包括在单个集成电路封装中,并且因此,这些微处理器管芯共享单个插槽)的组件。
如图1中所示,处理设备100可包括各种组件。在一个实施例中,处理设备100可包括一个或多个处理器核110和存储器控制器单元120以及其他组件,如所示地彼此耦合。处理设备100还可包括通信组件(未示出),其可用于处理设备100的各组件之间的点对点通信。处理设备100可用在包括但不限于台式计算机、平板计算机、膝上型计算机、上网本、笔记本计算机、个人数字助理(PDA)、服务器、工作站、蜂窝电话、移动计算设备、智能电话、互联网设备或任何其他类型的计算设备的计算系统(未示出)中。在另一实施例中,处理设备100可用在芯片上系统(SoC)系统中。在一个实施例中,SoC可包括处理设备100和存储器。用于一个此类系统的存储器是DRAM存储器。DRAM存储器可以位于与处理器和其他系统组件相同的芯片上。另外,诸如存储器控制器或图形控制器的其他逻辑块也可以位于芯片上。
(多个)处理器核110可执行用于处理设备100的指令。这些指令可包括但不限于:用于取出指令的预取逻辑、用于解码指令的解码逻辑、用于执行指令的执行逻辑等等。计算系统可以代表基于可从美国加利福尼亚州圣克拉拉市的公司获得的族处理器和/或微处理器的处理系统,不过也可使用其他系统(包括具有其他微处理器的计算设备、工程工作站、机顶盒等)。在一个实施例中,样本计算系统可执行操作系统、嵌入式软件和/或图形用户界面的版本。因此,本公开的各实施例不限于硬件电路和软件的任何特定组合。
在说明性示例中,处理核110可以具有包括处理器逻辑和电路的微架构。具有不同微架构的多个处理器核可共享公共指令集的至少一部分。例如,类似的寄存器架构在不同的微架构中可使用各种技术以不同方法来实现,包括专用物理寄存器、使用寄存器重命名机制(诸如,使用寄存器别名表(RAT)、重排序缓冲器(ROB)、以及引退寄存器堆)的一个或多个动态分配物理寄存器。
存储器控制器120可执行使得处理设备100能够访问包括易失性存储器和/或非易失性存储器的存储器(未示出)并与之进行通信的功能。在一些实施例中,存储器控制器120可以位于与处理设备100相关联的处理器管芯上,而存储器位于处理器管芯外。在一些实施例中,处理设备100包括用于高速缓存指令和/或数据的高速缓存单元130。高速缓存单元130包括但不限于:第一级(L1)132、第二级(L2)134和末级高速缓存(LLC)136,或处理设备100内的高速缓存存储器的任何其他配置。在一些实施例中,L1高速缓存132和L2高速缓存134可以将数据传输到LLC 136,并且从LLC 136传输数据。在一个实施例中,存储器控制器120可被连接至LLC 136,以在高速缓存单元130与存储器之间传输数据。如所示,高速缓存单元130可被集成到处理核110中。高速缓存单元130可存储被处理设备100的一个或多个组件利用的数据(例如,包括指令)。
在一些实施例中,处理设备100可执行一个或多个用户级应用140(例如,用户级多线程应用)。此类用户级应用140可由安装在处理设备100处的系统软件(未示出)执行。系统软件的示例包括但不限于,一个或多个操作系统、虚拟机监视器(VMM)、管理程序等及其组合。如本文中所公开的,用户级应用140可使用指令(例如,指令150)来控制处理设备100。指令150可表示提供给处理核110以供执行的宏指令、汇编语言指令或机器层级指令。
在一些实施例中,处理核110可操作以执行如由指令150所指定的调用过程指令152的实施例和从过程返回指令154的实施例。调用过程指令152通常将被简单称为调用指令,并且从过程返回指令154通常将被简单称为返回指令。调用指令和返回指令可代表处理设备100用于在某个特权等级执行的特定指令集的指令或控制信号。在操作期间,处理核110可接收调用指令152。例如,可从与用户级应用140相关联的正在调用子例程、例程、中断处理程序等的调用过程接收调用指令152。在一些实施例中,当函数或过程已经被调用时,返回指令154的地址可被推至存储在存储器中的数据栈上。
如果调用指令152引起处理设备100的当前特权等级的改变,则处理设备100执行从当前栈到为新的特权等级定义的栈的栈切换。例如,调用指令152可使得处理设备100改变当前特权等级,以访问在当前特权等级不可访问的某些系统资源。在一些实施例中,存储在存储器中的一个或多个影子栈用于帮助保护数据栈免受篡改和/或用于帮助增加计算机安全性。存储在(多个)影子栈上的信息可代表与返回指令154相关的返回地址相关信息(例如,实际返回地址、用于验证返回地址的信息、其他返回地址信息)。
为了标识用于特定特权等级的当前影子栈,处理设备100包括数个影子栈寄存器170,其中每个寄存器与某个特权等级相关联。作为说明性示例,处理设备100可包括被称为IA32_PLx_SSP的四(4)个寄存器,其中x代表特权等级(例如,0、1、2、或3)。在一些实施例中,影子栈寄存器170可以是模型专用寄存器(MSR)或通用寄存器(GPR)。在其他实施例中,各种类型的结构可以用作寄存器170,只要它们能够如本文中所描述地存储并提供数据。
在处理设备100启动时,与设备100相关联的系统软件可将栈指针(SSP)175编程到影子栈寄存器170中的每一个中。栈指针(SSP)175可操作以标识用于由寄存器标识的特权等级的特定的影子栈。例如,SSP 175可以是存储器中指向影子栈顶部的线性地址。在一个实施例中,处理设备100可包括影子栈保护逻辑180,该影子栈保护逻辑180用于控制在环转变期间经由影子栈寄存器170对影子栈的访问。影子栈保护逻辑还可实施:如果对其执行旨在用于影子栈的加载或存储的地址在页表中未被标记为是影子栈类型,则此加载和存储可能出错。此影子栈保护逻辑还可阻止由软件通过诸如“MOV”和“XSAVE”之类的指令发起的存储进行的到影子栈存储器的存储。在一些实施例中,影子栈保护逻辑180还可包括任选的可配置影子栈模式185。影子栈模式185可以是被配置成用于交替地启用和禁用处理设备100对影子栈的使用的位指示符。替代地,影子栈可以任选地总是被启用,并且影子栈模式185可以任选地被省略。交替地,可以存在对应于特权等级中的每一个的影子栈模式。
图2图示出根据一个实施例的用于支持用于在环转变期间保护栈的处理器扩展的包括存储器201的系统200。在此示例中,存储器201存储一个或多个数据栈,诸如数据栈203。数据栈有时被称为调用栈、数据栈、或仅称为栈。数据栈203可代表栈类型数据结构,该栈类型数据结构可操作以存储数据205和用于引导所执行的指令的控制流的控制信息207两者。典型地,存在用于与处理设备100相关联的每个特权等级的数据栈203。由此,当处理设备100切换特权等级时,处理设备也像其针对影子栈进行的如本公开中所描述的那样来切换数据栈203。每个数据栈的数据205可代表可以被推至数据栈201上的各种各样的不同类型的数据中的任一者(例如,被传递至子例程的参数和其他数据等)。通常,控制信息207可包括用于一个或多个先前执行的过程调用的一个或多个返回地址。这些返回地址可代表当所调用的过程结束并返回时所调用的过程将要返回控制流的地方的指令地址。
如图2中所示,存储器201还包括多个影子栈209。影子栈209用于帮助保护数据栈203免受某种类型的控制流攻击。影子栈209可表示与数据栈203分离的附加的栈类型数据结构。在一些实施例中,影子栈209可用于存储与所执行指令的控制信息207而非数据205相关联的信息。在一个说明性示例中,影子栈209可存储代码段(CS)描述符(诸如CS 240)和指令指针(EIP)(诸如EIP 250),该代码段描述符指定存储器201中正在被执行的代码段,该指令指针可标识与数据栈203中的指令相关的返回地址和其他信息。在一些实施例中,用于创建影子栈的存储器在页表中可被标记为是影子栈存储器类型,使得如果到影子栈的加载和存储不是到影子栈类型的存储器,则该到影子栈的加载和存储出错。类似地,如果使不旨在用于影子栈的存储到被标记为影子栈存储器的存储器,则该不旨在用于影子栈的存储出错。
虽然系统200可包括多个影子栈209,但一次仅可选择一个影子栈作为当前影子栈210。就此而言,影子栈209可单独地以无特权用户级模式(例如,环3特权等级)或以有特权的或管理程序特权等级模式(环0、环1、或环2特权等级)操作。在一些实施例中,多个影子栈209中的每一个包括可操作以标识该影子栈顶部的影子栈指针(SSP),诸如SSP 220。例如,SSP 220可以是存储器201中指向当前影子栈顶部的线性地址。如上所述,SSP 220可被存储在与特定特权等级相关联的影子栈寄存器170中的一个中。
如所示,系统200还可包括来自图1的处理设备100。在一些实施例中,处理设备100可具有控制系统200中的应用的执行的当前特权等级。在某种情况下,处理设备100可将其当前特权等级改变为新的特权等级,以控制应用对系统200的资源的可访问性。例如,响应于诸如所调用的过程、中断/异常处理程序之类的某些类型的操作,或者响应于其他类型的操作,处理设备100可改变其当前特权等级。在一些实施例中,处理设备100可采用影子栈保护逻辑180,以在特权等级转变期间保护栈。
在特权等级转变的一个示例中,处理设备100可从用户模式中的当前特权等级(CPL)(例如,CPL3)转变为管理程序模式中的新的特权等级(例如,CPL<3)。例如,可由调用通过请求改变到更高特权等级的调用门(call gate)来发起此类型的特权等级转变,或者可通过调用中断/异常处理程序来发起此类型的特权等级转变。响应于用户模式到管理程序模式的特权等级转变,处理设备100检查影子栈209是否在新的特权等级针对处理设备100被启用。例如,处理设备100可检查影子栈模式185指示符的设置,以确定影子栈209启用还是禁用。如果影子栈209被启用,则与用户模式相关联的当前SSP被保存到影子栈寄存器170中的一个。之后,使用存储在与新的特权等级相关联的寄存器中的SSP(诸如SSP220)来建立针对管理程序模式的新的影子栈210。在一些实施例中,用户模式SSP被保存到影子栈寄存器中,使得在必要时管理程序模式中的处理设备100在再次返回到用户模式之前可以修改用户模式SSP,诸如进行影子栈展开以将条目从栈移除和其他类型的修整(fix up)。
一旦处理设备100从与新的特权等级相关联的寄存器检取到SSP 220,则处理设备100自动地执行若干检查,以通过使用影子栈保护逻辑180中的某种逻辑来验证被编程在寄存器中的SSP,该影子栈保护逻辑180中的某种逻辑诸如验证和设置忙碌逻辑225。自动检查包括但不限于验证:被编程在寄存器中的SSP 220正在指向管理程序影子栈(例如,影子栈210)的顶部;由SSP 220标识的影子栈可以被用于与处理设备100相关联的平台硬件的当前模式;以及影子栈未被加载到任何其他处理线程上。这些检查可被用于阻止某些攻击,诸如其中攻击者可将两个不同处理器线程上的寄存器指向同一影子栈以通过在第二处理器上作出调用来操纵在一个处理器上消耗的返回地址的跨线程。
为了执行用于验证SSP 220的检查,处理设备100的系统软件(例如,内核或OS)标识在由该SSP指向的影子栈210的顶部处的令牌230。在一些实施例中,处理设备100可(例如,原子地)从由SSP 220指定的地址加载令牌230(例如,其中8个字节)。在一个实施例中,令牌230的加载锁定该令牌和/或位置(例如,高速缓存行),以阻止该令牌由另一处理器核或处理设备复制或修改。在一个实施例中,该令牌的加载由处理设备100使用特定的影子栈操作来完成,使得如果对其执行加载或存储的地址在页表中不是被标记为影子栈存储器的存储器则引起错误。
令牌230包括用于验证被编程在寄存器中的SSP 220的多个位。在一些实施例中,处理设备100分析该多个位,以标识设置位、忙碌指示符、标志指示符以及其他相关信息,该设置位表示令牌230的线性地址,该忙碌指示符可以是被设置为指示影子栈210是否已经被加载到任何逻辑处理器上的值(例如,1或0)的令牌的判定位,该标志指示符可以是被设置为指示影子栈210是否用于在某种位模式(例如,32位或64位)中使用的值(例如,1或0)的令牌的另一判定位。
根据验证逻辑225,处理设备100检查忙碌指示符是否未被设置(例如0),指示影子栈210尚未被加载到任何逻辑处理器上。处理设备100还检查系统200的硬件平台是否正在以匹配由标志指示符表示的位模式的模式操作。例如,基于该标志指示符,处理设备100可确定影子栈210用于在32位或64位的机器上使用。然后,处理设备100可检查例如与硬件平台相关联的平台寄存器,以验证该平台处于对应的操作模式(例如,32位或64位)。处理设备100还检查记录在令牌230中的线性地址是否匹配SSP 220的线性地址。
用于匹配线性地址的该检查验证寄存器170正在指向有效影子栈的顶部,因为影子栈上的8个字节位置的线性地址将不在影子栈上的这8个字节的内容中出现,除了当由系统软件创建以初始化令牌203时。由此,令牌230形成指示影子栈指针被存储在寄存器170中之后正在指向有效影子栈的顶部的指示符。在一些实施例中,取决于处理设备100处于32位操作模式还是64位操作模式,处理设备100实施将影子栈对齐到4个字节或8个字节,并且因此,影子栈指针220的较低的2位总是为0并且可以用于保存令牌230的忙碌指示符和标志。如果以上检查中的全部产生正确的指示,则令牌的忙碌指示符可被设置为用于指示由SSP220指向的影子栈在以新的特权等级使用中的值(例如,1)。应当注意,在这些检查正在被执行的同时,包含令牌230的存储器位置(例如高速缓存行)由处理设备100锁定,使得它不能被修改(例如,由另一逻辑处理器设置忙碌)。设置忙碌位之后,处理器100释放在该存储器位置上的锁定。利用在该令牌上保持的锁定来进行这些检查操作确保没有检查时间到使用时间(time-of-check-to-time-of-use)问题。否则,如果以上检查中的任何一个失败,则处理设备100可生成可以被传输例如到与处理设备100相关联的操作系统的错误或警报。在一些实施例中,如果错误被生成,则包含令牌230的存储器位置上的锁定被释放而不修改该位置的内容。
当从管理程序模式返回到用户模式特权等级(诸如CPL 0/1/2->CPL 3模式转变)时,处理设备100通过使用诸如验证和清除忙碌逻辑225之类的某种逻辑来执行若干检查。可例如由中断返回(IRET)指令或将待执行的下一地址移动到CPU的指令指针的“FAR RET(远返回)”指令或其他类型的返回指令来发起此类型的特权等级转变。
作为到用户模式特权等级的返回转变的部分,处理设备100如由验证和清除忙碌逻辑235引导地检查令牌230中的忙碌指示符是否被设置和记录在该令牌中的线性地址是否匹配SSP 220的地址以及SSP 220是否正在指向8字节对齐的地址。如果以上检查中的全部产生正确的指示,则处理设备100通过清除令牌230中的忙碌指示符来将令牌230标记为“空闲的(free)”。应当注意,使用锁定的加载从由SSP 220指向的存储器地址加载令牌,使得位置(例如,高速缓存行)被锁定而免于随后的修改。如果验证成功,则忙碌位被清除并且锁定被释放。如果验证不成功,则锁定被释放而不修改该位置的内容。此后,处理设备100从与那个特权等级相关联的适当的影子栈寄存器170检取用于用户模式的SSP。否则,处理设备100可生成指示令牌230无效的错误。
在特权等级转变的另一示例中,处理设备100可从当前管理程序模式特权等级转变到新的更高的管理程序模式,诸如CPL2->CPL1、CPL1->CPL0或CPL2->CPL0模式转变。例如,可由调用通过请求改变到更高特权等级的调用门来发起此类型的特权等级转变,或者可通过调用中断/异常处理程序来发起此类型的特权等级转变。在此类转变时,处理设备100从用于新的特权等级的影子栈寄存器170中的一个恰当的影子栈寄存器选择用于该等级的SSP 220。一旦处理设备100从与新的特权等级相关联的寄存器检取到SSP 220,则处理设备100执行若干检查,以验证被编程在该寄存器中的SSP。
在一些实施例中,如以上所描述,处理设备100通过使用验证和设置忙碌逻辑225来执行检查。如果该检查是成功的,则处理设备100通过设置令牌230中的忙碌指示符来将影子栈210标记为忙碌的。然后,处理设备100将标识存储器201中的正在被执行的代码段的CS 240选择器(例如,代码段选择器)、标识返回地址信息的EIP 250和与当前特权等级相关联的SSP 260推至新的特权等级的影子栈上。在一些实施例中,处理设备100可将线性指令指针(LIP)(其为EIP加上代码段基址)替代EIP 250推至新的特权等级的影子栈上。这可被完成,以检测在调用和从该调用返回之间改变代码段基址的任何尝试。
当从新的管理程序模式返回到先前的管理程序模式时,处理设备100确保此类返回将到作出先前调用来自的同一地址。例如,处理设备100验证来自影子栈210的CS 240和EIP 250(或LIP)匹配数据栈203上的对应值。如果存在匹配,则处理设备100将CS 240、EIP250和SSP 260移除或弹出影子栈210外,以建立在新的特权等级使用的新的SSP。在一些实施例中,使用特定的影子栈存储和加载操作来完成推入和弹出操作,使得如果该操作将到在页表中未被标记为影子栈存储器的存储器则该操作引起错误。
作为转变的部分,处理设备100如由验证和清除忙碌逻辑235引导地检查SSP 220指向的影子栈的令牌230中的忙碌指示符是否被设置以及记录在令牌230中的线性地址是否匹配SSP 220的地址。如果以上检查中的全部产生正确的指示,则处理设备100通过清除令牌230中的忙碌指示符来将令牌230标记为“空闲的”。
在特权等级转变的又一示例中,可以是基于处理设备100从用户模式到最受信任特权等级的模式转变,诸如CPL3->CPL0模式转变。例如,可使用设计为调用系统函数调用的某种指令(如SYSCALL或SYSENTER)来发起此种类型的特权等级转变,其中系统调用中的一些不使用栈来执行系统调用操作。在此类转变中,处理设备100将当前SSP保存在与用户模式相关联的寄存器中,并通过在对应的寄存器中检取SSP来切换到与CPL0特权等级相关联的影子栈。由于处理设备100可正在执行系统关键操作所以它不验证SSP,但是它仍将影子栈集合中的影子栈的其中之一选择为用于新的特权等级的当前SSP。例如,此种类型的特权等级转变可例如由不使用栈来执行系统调用操作的快速系统调用发起。在一些实施例中,如果系统调用需要使用栈来作出调用,则它可被配置成用于使用由处理设备100提供的新的指令来执行将影子栈验证和标记为忙碌的,诸如在验证和设置忙碌逻辑225中所采用的。对被选择、但先前未被验证和设置忙碌的影子栈完成验证和设置忙碌逻辑225的该操作。
当从最受信任特权等级返回到先前的用户模式(诸如CPL0->CPL3模式转变)时,处理设备100通过访问存储在对应于用户模式特权等级的寄存器中的SSP来恢复用户模式影子栈。例如,可由系统返回或退出指令(例如,SYSRET或SYSEXIT)来发起此种类型的特权等级转变。在返回到CPL3之前,如果系统调用使用了由处理设备100提供的新的指令来将影子栈验证和标记为忙碌的,则由处理设备100提供用于将影子栈验证和标记为空闲的互补指令,诸如在验证和清除忙碌逻辑235中所采用的。
图3图示出根据一个实施例的用于作为中断或异常递送的部分的切换栈的包括图2的存储器201的系统300。在一些实施例中,本公开提供了用于在某些中断的递送和执行期间通过使用中断影子栈指针表310替代影子栈寄存器170来补足影子栈切换的技术,该中断影子栈指针表310用于选择用于特权等级的影子栈指针,此中断或异常处理程序将在该特权等级被执行。处理设备110的系统软件可将表310的地址编程到寄存器中,该寄存器诸如中断SSP表地址寄存器320。表310用于存储由处理设备100在如以上相关于系统200所描述的环转变期间标识的SSP 220或者用于如果中断或异常被配置成对新的影子栈操作则在甚至没有环转变的情况下引起栈切换。就此,使用被配置成用于中断描述符表(IDT)中的那个中断的选择器330从中断影子栈表310中的影子栈指针的其中之一选择新的影子栈。
在操作中,当异常或中断发生时,处理设备100可利用到旨在处理此类事件的某个代码序列的控制转移来响应。此代码序列典型地以管理程序模式运行。此特殊代码序列或例程的地址由处理设备100从中断描述符表(IDT)使用专用于发生了的异常类型的到该IDT中的索引(例如,一个索引可对应于页错误,而另一个对应于溢出异常)来检取。此IDT条目可进一步具有到中断影子栈表310中的索引,使得当此索引值是非零时其指示即使在递送该中断或异常不需要特权改变的情况下也必须针对该中断或异常执行影子栈切换。处理设备100可使用与IDT相关联的索引来索引中断影子栈指针表310,以标识存储SSP 220的条目。例如,中断影子栈指针表310中的条目还可专用于发生了的异常类型。然后,SSP 220可由处理设备100在与中断相关联的新的特权等级使用。在SSP的选择之后,处理器设备100调用某种逻辑(例如,验证和设置忙碌逻辑225),以确保存储在中断影子栈表310中的SSP 220指向用于该操作模式的有效影子栈的顶部,并确保该影子栈不是忙碌的。
图4图示出根据一个实施例的用于作为任务切换的部分的切换栈的包括图2的存储器201的系统400。在任务切换操作中,处理设备100可执行引起从当前正在运行的任务到新任务的任务切换的控制转移指令。在一些实施例中,任务可表示处理设备100可以分派、执行或挂起的工作单元。作为示例,该任务可用于执行以下一者或多者:程序、任务或进程、操作系统服务实用程序、中断或异常处理程序、或者内核或执行实用程序。在一个方面中,当调用过程指令被执行时,或者当中断或异常发生时,或者在其他情况下,可执行任务切换。
当处理设备100执行从当前任务到新任务的任务切换时,该设备100将当前任务的状态信息保存在存储器201中对应于当前任务的被称作任务状态段(TSS)(诸如当前TSS420)的数据结构中,并且新任务427的状态信息可从对应于该新任务427的另一TSS(例如,新TSS 425)加载或检取。此状态信息可包括但不限于用于执行任务切换所需要的信息,诸如栈和指令指针以及I/O映射基址。
TSS表示在架构兼容计算机上的存储器中的可用于存储关于任务的信息的硬件管理的数据结构。例如,TSS包括处理设备100执行任务切换所需要的信息,诸如栈指针。用于不同任务的每个TSS可包括到用于不同特权等级的不同栈(例如,用于存储控制信息和数据两者的数据栈)的栈指针。当由于任务切换操作而作出特权等级改变时,该栈指针用于标识适当的栈。例如,任务切换操作可包括将在当前特权等级的当前任务切换到在新的特权等级的新任务。
在一些实施例中,如本文中所描述的影子栈可用于在从当前任务到新任务的特权等级转变期间保护数据栈。如上所述,影子栈是与数据栈分离的存储和保护来自数据栈的在控制转移操作中使用的信息的第二栈。在一个实施例中,诸如影子栈指针430之类的影子栈选择信息可被存储在某些架构兼容计算机中的TSS结构中。
参考图4,操作中的处理设备100通过标识与新任务相关联的TSS 420来响应于从当前任务到新任务的任务切换。就此,例如,可由调用指令、中断/异常或以其他方式发起任务切换。在一些实施例中,处理设备100检取存储在TSS 420中的SSP 430。SSP 430标识与新任务一起使用的影子栈410。
在一些实施例中,如以上所描述,处理设备100通过使用验证和设置忙碌逻辑225执行检查来验证SSP 430。如果该检查是成功的,则处理设备100通过设置令牌440中的忙碌指示符来将影子栈210标记为忙碌的。然后,处理设备100将标识正在被执行的当前任务的代码段的CS 450指针、标识与当前任务有关的返回地址信息的EIP 460以及与当前任务的当前特权等级相关联的SSP 470推至新的影子栈上。
当从新任务返回到先前任务时,处理设备100确保此类返回会到先前任务的同一地址。例如,处理设备100验证来自影子栈410的CS 450和EIP 460匹配与先前任务相关联的TSS中的对应值。如果存在匹配,则处理设备100将CS 450、EIP 460和SSP 470移除或弹出影子栈410外,以建立在先前任务中使用的当前SSP。作为到先前任务的返回转变的部分,处理设备100如由验证和清除忙碌逻辑235引导地检查令牌440中的忙碌指示符是否被设置以及令牌440的线性地址是否匹配SSP 430的地址。如果以上检查中的全部产生正确的指示,则处理设备100通过清除令牌440中的忙碌指示符来将令牌440标记为“空闲的”。
图5图示出根据一个实施例的在特权转移时或者当由于中断SSP表中的非零索引的选择或由于任务切换引起了栈切换时的切换栈的方法500的流程图。方法500可由可包括硬件(例如,电路、专用逻辑、可编程逻辑、微代码等)、软件(诸如,在处理设备上运行的指令)、固件或其组合的处理逻辑来执行。在一个实施例中,如由影子栈保护逻辑180引导的图1中的处理设备100可执行方法500。尽管以特定顺序或次序示出,但是这些过程的次序可被修改,除非另行指出。因此,所图示的实现方式应被理解成仅作为示例,并且所图示的过程可按不同次序来执行,并且一些过程可被并行地执行。另外,在各实施例中可以省略一个或多个过程。因此,在每一实现方式中不要求所有过程。其他过程流程是可能的。
方法500在框510处开始,在框510处,接收用于将当前活动应用的当前特权等级(CPL)改变为新的特权等级的指令。在框520中,考虑新的特权等级选择存储在多个寄存器中的一个寄存器中的影子栈指针(SSP)。在框530处,使用该SSP来标识用于由处理器在新的特权等级使用的影子栈。取决于CPL的改变由调用过程指令发起还是由返回指令发起,方法500在框535处分叉。如果改变由调用过程指令发起,则方法500行进至框540。否则,方法500行进至框570。
在框540中,验证与新的特权等级相关联的影子栈。如果影子栈是有效的,则在框550中将该影子栈标记为忙碌的。然后,在框560中,与指令相关的地址指针被推至该影子栈上。在一些实施例中,诸如在CPL3->CPL0/1/2转变(例如,用户到管理程序的转变)时,框560中返回地址指针的推入可被省略。在此类情况下,如果转变是从CPL3->CPL0/1/2,则可将CPL3SSP保存到用户模式寄存器。如果影子栈不是有效的,则在框545处生成错误。
在框570中,作出关于存储在影子栈上的地址指针是否匹配与指令相关的返回地址的确定。在一些实施例中,诸如在CPL0/1/2->CPL3转变(例如,管理程序到用户模式的转变)时,框570中返回地址指针的匹配可被省略。在此类情况下,如果转变是从CPL0/1/2->CPL3,则可从用户模式寄存器检取先前保存的CPL3的SSP。如果影子栈上的地址指针与数据栈上的地址指针匹配,则在框580中将地址指针弹出影子栈之外。另外,可在框580中将用于较低管理程序特权的SSP从较高管理程序特权的影子栈弹出,以建立用于较低管理程序特权的SSP。在框590中,然后将影子栈标记为不忙碌的或以其他方式空闲的。如果地址指针不匹配,则在框575处生成错误。
图6A是图示出根据本公开的一个实施例的用于处理器600的微架构的框图,该处理器600实现用于在环转变期间保护栈的处理器扩展的技术。具体地,处理器600描绘根据本公开的至少一个实施例的要被包括在处理器中的有序架构核以及寄存器重命名逻辑、乱序发布/执行逻辑。
处理器600包括前端单元630,该前端单元630耦合至执行引擎单元650,前端单元630和执行引擎单元650两者耦合至存储器单元670。处理器600可包括精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或者混合或替代核类型。作为又一选项,处理器600可包括专用核,诸如例如,网络或通信核、压缩引擎、图形核,等等。在一个实施例中,处理器600可以是多核处理器或者可以是多处理器系统的部分。
前端单元630包括耦合至指令高速缓存单元634的分支预测单元632,该指令高速缓存单元634耦合至指令转换后备缓冲器(TLB)636,该指令转换后备缓冲器636耦合至指令取出单元638,指令取出单元638耦合至解码单元640。解码单元640(也称为解码器)可解码指令,并生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。可使用各种不同的机制来实现解码器640。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。指令高速缓存单元634进一步耦合至存储器单元670。解码单元640耦合至执行引擎单元650中的重命名/分配器单元652。
执行引擎单元650包括重命名/分配器单元652,该重命名/分配器单元652耦合至引退单元654和一个或多个调度器单元的集合656。(多个)调度器单元656表示任意数量的不同调度器,包括预留站(RS)、中央指令窗口等。(多个)调度器单元656耦合至(多个)物理寄存器堆单元658。物理寄存器堆单元658中的每一个表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型(诸如:标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点等)、状态(诸如,指令指针是将要执行的下一个指令的地址)等。(多个)物理寄存器堆单元658与引退单元654重叠以图示出可以用来实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器和(多个)引退寄存器堆;使用寄存器映射和寄存器池;等等)。执行引擎单元650可包括例如管理功能单元的功率功能的功率管理单元(PMU)690。
通常,架构寄存器从处理器外部或从编程者的视角来看是可见的。这些寄存器不限于任何已知的特定电路类型。各种不同类型的寄存器可适用,只要它们能够存储并提供如本文中所描述的数据。合适寄存器的示例包括但不限于,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、以及专用物理寄存器和动态分配物理寄存器的组合,等等。引退单元654和(多个)物理寄存器堆单元658耦合至(多个)执行集群660。(多个)执行集群660包括一个或多个执行单元662的集合以及一个或多个存储器访问单元664的集合。执行单元662可执行各种操作(例如,移位、加法、减法、乘法)并可对多种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。
尽管一些实施例可以包括专用于特定功能或功能集合的数个执行单元,但是其他实施例可仅包括一个执行单元或全都执行所有功能的多个执行单元。(多个)调度器单元656、(多个)物理寄存器堆单元658、(多个)执行集群660被示出为可能是复数个,因为某些实施例为某些数据/操作类型创建了分开的流水线(例如,均具有各自调度器单元、物理寄存器堆单元和/或执行集群的标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,并且在分开的存储器访问流水线的情况下某些实施例被实现为其中仅该流水线的执行集群具有(多个)存储器访问单元664)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序发布/执行。
存储器访问单元664的集合耦合至存储器单元670,该存储器单元670可包括数据预取器680、数据TLB单元672、数据高速缓存单元(DCU)674、第二级(L2)高速缓存单元676,仅举数例。在一些实施例中,DCU 674也被称为第一级数据高速缓存(L1高速缓存)。DCU 674可处置多个未决的高速缓存未命中,并继续服务传入的存储和加载。它还支持维护高速缓存一致性。数据TLB单元672是用于通过映射虚拟和物理地址空间来改善虚拟地址转换速度的高速缓存。在一个示例性实施例中,存储器访问单元664可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合至存储器单元670中的数据TLB单元672。L2高速缓存单元676可耦合至一个或多个其他级别的高速缓存,并最终耦合至主存储器。
在一个实施例中,数据预取器680通过自动地预测程序将消耗哪些数据来推测性地将数据加载/预取到DCU 674。预取可以指在存储在存储器层级结构(例如,较低等级的高速缓存或存储器)的一个存储器位置中的数据被处理器实际要求之前,将该数据传送至更靠近(例如,产生更少访问等待时间)处理器的较高等级的存储器位置。更具体地,预取可以指在处理器发布对正在被返回的特定数据的需求之前数据从较低级别高速缓存/存储器中的一个到数据高速缓存和/或预取缓冲器的早期检取。
在一个实现方式中,根据图6所描述,处理器600可以与参考本公开的实现方式描述的用于支持处理设备中的用于在环转变期间保护栈的处理器扩展的处理设备100相同。
处理器600可以支持一个或多个指令集(例如,x86指令集(具有增加有更新版本的一些扩展)、加利福尼亚州桑尼威尔的MIPS技术公司的MIPS指令集、加利福尼亚州桑尼威尔的ARM控股公司的ARM指令集(具有可选附加扩展,诸如NEON))。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,该各种方式包括时分多线程化、同时多线程化(其中单个物理核为物理核正在同时多线程化的线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后的诸如 超线程化技术中的同时多线程化)。
尽管在乱序执行的上下文中描述寄存器重命名,但应当理解,寄存器重命名可在有序架构中被使用。尽管处理器的所图示的实施例也包括分开的指令和数据高速缓存单元以及共享的L2高速缓存单元,但替代实施例可具有用于指令和数据两者的单个内部高速缓存,诸如例如,第一级(L1)内部高速缓存或多个等级的内部高速缓存。在一些实施例中,系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。替代地,所有高速缓存都可在核和/或处理器的外部。
图6B是图示出根据本公开的一些实施例的由图6A的处理器600实现的有序流水线以及寄存器重命名级、乱序发布/执行流水线的框图。图6B中的实线框图示出有序流水线,而虚线框图示出寄存器重命名、乱序发布/执行流水线。在图6B中,处理器流水线601包括取出级602、长度解码级604、解码级606、分配级608、重命名级610、调度(也被称为分派或发布)级612、寄存器读取/存储器读取级614、执行级616、写回/存储器写入级618、异常处置级622和提交级624。在一些实施例中,级602-624的排序可不同于所图示的排序,并且不限于图6B中所示的特定排序。
图7图示出根据本公开的一个实施例的用于处理器700的微架构的框图,处理器700包括用于实现用于在环转变期间保护栈的处理器扩展的技术的逻辑电路。在一些实施例中,根据一个实施例的指令可被实现为对具有字节尺寸、字尺寸、双字尺寸、四字尺寸等并具有诸如单精度和双精度整数和浮点数据类型之类的数据类型的数据元素执行操作。在一个实施例中,有序前端701是处理器700的部分,该有序前端701取出将要被执行的指令并准备这些指令以供稍后在处理器流水线中使用。
前端701可包括若干单元。在一个实施例中,指令预取器726从存储器取出指令,并将指令馈送至指令解码器728,指令解码器728随后解码或解释指令。例如,在一个实施例中,解码器将所接收到的指令解码为机器可以执行的被称为“微指令”或“微操作”(也称为微op或uop)的一个或多个操作。在其他实施例中,解码器将指令解析为由微架构使用以执行根据一个实施例的操作的操作码和对应的数据及控制字段。在一个实施例中,追踪高速缓存730接受经解码的微操作,并将它们组装为微操作队列734中的程序有序序列或踪迹,以用于执行。当追踪高速缓存730遇到复杂指令时,微代码ROM 732提供完成操作所需的微操作。
一些指令被转换为单个微操作,而其他指令需要若干个微操作以完成整个操作。在一个实施例中,如果需要超过四个微操作来完成指令,则解码器728访问微代码ROM 732以进行该指令。对于一个实施例,指令可被解码为少量的微操作以用于在指令解码器728处进行处理。在另一实施例中,如果需要数个微操作来完成操作,则可将指令存储在微代码ROM 732内。追踪高速缓存730参考进入点可编程逻辑阵列(PLA)来确定正确的微指令指针,以从微代码ROM 732读取微代码序列以完成根据一个实施例的一条或多条指令。在微代码ROM 732完成对于指令的微操作序列化之后,机器的前端701恢复从追踪高速缓存730提取微操作。
乱序执行引擎703是将指令准备好用于执行的地方。乱序执行逻辑具有数个缓冲器,用于将指令流平滑并且重排序,以优化指令流进入流水线后的性能,并调度指令流以供执行。分配器逻辑分配每个微操作需要的机器缓冲器和资源,以用于执行。寄存器重命名逻辑将逻辑寄存器重命名为寄存器堆中的条目。在指令调度器(存储器调度器、快速调度器702、慢速/通用浮点调度器704、以及简单浮点调度器706)之前,分配器也将每个微操作的条目分配在两个微操作队列中的一个之中,一个微操作队列用于存储器操作,另一个微操作队列用于非存储器操作。微操作调度器702、704、706基于对它们的依赖输入寄存器操作数源的准备就绪以及微操作完成它们的操作所需的执行资源的可用性来确定微操作何时准备好用于执行。一个实施例的快速调度器702可以在主时钟周期的每半个上进行调度,而其他调度器仅可以在每个主处理器时钟周期上调度一次。调度器对分配端口进行仲裁以调度用于执行的微操作。
寄存器堆708、710位于调度器702、704、706以及执行块711中的执行单元712、714、716、718、720、722、724之间。存在分别用于整数和浮点操作的分开的寄存器堆708、710。一个实施例的每个寄存器堆708、710也包括旁路网络,该旁路网络可将刚完成的还没有被写入寄存器堆的结果旁路或转发给新的依赖微操作。整数寄存器堆708和浮点寄存器堆710也能够彼此传递数据。对于一个实施例,整数寄存器堆708被划分为两个分开的寄存器堆,一个寄存器堆用于低阶的32位数据,第二个寄存器堆用于高阶的32位数据。一个实施例的浮点寄存器堆710具有128位宽度的条目,因为浮点指令通常具有从64至128位宽度的操作数。
执行块711包括执行单元712、714、716、718、720、722、724,在这些执行单元712、714、716、718、720、722、724中实际执行指令。该区块包括寄存器堆708、710,寄存器堆708、710存储微指令需要执行的整数和浮点数据操作数值。一个实施例的处理器700由以下数个执行单元所组成:地址生成单元(AGU)712、AGU 714、快速ALU 716、快速ALU 718、慢速ALU720、浮点ALU 722、浮点移动单元724。对于一个实施例,浮点执行块722、724执行浮点、MMX、SIMD、SSE或其他操作。一个实施例的浮点ALU 722包括64位除64位浮点除法器,用于执行除法、平方根、以及余数微操作。对于本公开的实施例,涉及浮点值的指令可利用浮点硬件来处置。
在一个实施例中,ALU操作进入高速ALU执行单元716、718。一个实施例的快速ALU716、718可执行快速操作,有效等待时间为半个时钟周期。对于一个实施例,大多数复杂整数操作进入慢速ALU 720,因为慢速ALU 720包括用于长等待时间类型操作的整数执行硬件,诸如,乘法器、移位器、标记逻辑和分支处理。存储器加载/存储操作由AGU 712、714来执行。对于一个实施例,整数ALU 716、718、720被描述为对64位数据操作数执行整数操作。在替代实施例中,可以实现ALU 716、718、720,以支持包括16、32、128、256等的各种数据位。类似地,可以实现浮点单元722、724,以支持具有各种宽度的位的多个操作数。对于一个实施例,浮点单元722、724可结合SIMD和多媒体指令对128位宽度紧缩数据操作数进行操作。
在一个实施例中,在父加载完成执行之前,微操作调度器702、704、706就分派依赖操作。因为在处理器700中微操作被推测地调度和执行,所以处理器700也包括用于处置存储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则在流水线中会存在已带着临时错误的数据离开调度器的运行中的依赖操作。重放机制追踪使用错误数据的指令,并重新执行这些指令。仅依赖操作需要被重放,而允许独立操作完成。处理器的一个实施例的调度器和重放机制也被设计成用于捕捉用于文本串比较操作的指令序列。
根据本公开的实施例,处理器700还包括用于实现用于存储器消歧的存储地址预测的逻辑。在一个实施例中,处理器700的执行块711可包括用于实现用于根据本公开的一个实施例的用于在环转变期间保护栈的处理器扩展的技术的存储地址预测器(未示出)。
术语“寄存器”可以是指被用作标识操作数的指令的部分的板上(on-board)处理器存储位置。换言之,寄存器可以是从处理器外部(从编程者的角度来看)可用的那些处理器存储位置。然而,实施例的寄存器不限于意指特定类型的电路。相反,实施例的寄存器能够存储并提供数据,并能够执行本文中所描述的功能。本文所描述的寄存器可以由处理器中的电路使用任何数量的不同技术来实现,这些不同技术诸如专用物理寄存器、利用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器堆也包含用于紧缩数据的八个多媒体SIMD寄存器。
对于以下讨论,寄存器应被理解为设计成用于保存紧缩数据的数据寄存器,诸如,来自美国加利福尼亚州圣克拉拉市的英特尔公司的启用了MMX技术的微处理器中的64位宽MMXTM寄存器(在一些实例中,也称为“mm”寄存器)。这些MMX寄存器(可用在整数和浮点形式中)可以与伴随SIMD和SSE指令的紧缩数据元素一起操作。类似地,也可以使用涉及SSE2、SSE3、SSE4或以外的(统称为“SSEx”)技术的128位宽的XMM寄存器来保存这样的紧缩数据操作数。在一个实施例中,在存储紧缩数据和整数数据时,寄存器不需要区分这两种数据类型。在一个实施例中,整数和浮点可被包含在同一寄存器堆中,或被包含在不同的寄存器堆中。此外,在一个实施例中,浮点和整数数据可被存储在不同的寄存器中,或被存储在相同的寄存器中。
实施例可在许多不同的系统类型中实现。现在参考图8,所示的是示出了系统800的框图,在系统800中可使用本公开的实施例。如图8中所示,多处理器系统800是点对点互连系统,并包括经由点对点互连850耦合的第一处理器870和第二处理器880。尽管仅以两个处理器870和880示出,但是应当理解,本公开的实施例的范围不限于此。在其他实施例中,在给定处理器中可存在一个或多个附加处理器。在一个实施例中,多处理器系统800可实现如本文中所描述的用于在环转变期间保护栈的处理器扩展的技术。
处理器870和880被示为分别包括集成存储器控制器单元872和882。处理器870还包括作为其总线控制器单元的部分的点对点(P-P)接口876和878;类似地,第二处理器880包括P-P接口886和888。处理器870、880可经由点对点(P-P)接口850使用P-P接口电路878、888来交换信息。如图8所示,IMC 872和882将处理器耦合至相应的存储器,即存储器832和存储器834,这些存储器可以是本地附连到相应处理器的主存储器的部分。
处理器870、880可使用点对点接口电路876、894、886、898经由单独的P-P接口852、854与芯片组890交换信息。芯片组890还可经由高性能图形接口839来与高性能图形电路838交换信息。
共享高速缓存(未示出)可被包括在任一处理器中,或在两个处理器外部但仍经由P-P互连与处理器连接,使得如果将处理器置于低功率模式时,可将任一处理器或两个处理器的本地高速缓存信息存储在该共享高速缓存中。
芯片组890可经由接口896耦合至第一总线816。在一个实施例中,第一总线816可以是外围组件互连(PCI)总线或诸如PCI高速总线或另一第三代I/O互连总线之类的总线,但是本公开的范围不限于此。
如图8中所示,各种I/O设备814可连同总线桥818一起耦合至第一总线816,总线桥818将第一总线816耦合到第二总线820。在一个实施例中,第二总线820可以是低引脚数(LPC)总线。在一个实施例中,各种设备可被耦合至第二总线820,各种设备包括例如,键盘和/或鼠标822、通信设备827以及可包括指令/代码和数据830的存储单元828(诸如,盘驱动器或其他大容量存储设备)。此外,音频I/O 824可被耦合至第二总线820。注意,其他架构是可能的。例如,代替图8的点对点架构,系统可实现多分支总线或其他此类架构。
现在参考图9,所示的是系统900的框图,在系统900中本公开的一个实施例可以操作。系统900可包括耦合至图形存储器控制器中枢(GMCH)920的一个或多个处理器910、915。附加处理器915的任选性在图9中利用虚线来表示。在一个实施例中,处理器910、915支持根据本公开的实施例的用于在环转变期间保护栈的处理器扩展。
每个处理器910、915可以是如上所述的电路、集成电路、处理器和/或硅集成电路的某个版本。然而,应当注意,集成图形逻辑和集成存储器控制单元不可能出现在处理器910、915中。图9图示出GMCH 920可被耦合至存储器940,该存储器940可以是例如动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可与非易失性高速缓存相关联。
GMCH 920可以是芯片组或芯片组的部分。GMCH 920可与(多个)处理器910、915通信,并控制(多个)处理器910、915与存储器940之间的交互。GMCH 920还可担当(多个)处理器910、915和系统900的其他元件之间的加速总线接口。对于至少一个实施例,GMCH 920经由诸如前端总线(FSB)995之类的多分支总线与(多个)处理器910、915进行通信。
此外,GMCH 920被耦合至显示器945(诸如平板或触摸屏显示器)。GMCH 920可包括集成图形加速器。GMCH 920被进一步耦合至输入/输出(I/O)控制器中枢(ICH)950,该输入/输出(I/O)控制器中枢(ICH)950可用于将各种外围设备耦合至系统900。在图9的实施例中作为示例示出了外部图形设备960以及另一外围设备970,外部图形设备960可以是耦合至ICH 950的分立图形设备。
替代地,附加的或不同的处理器也可存在于系统900中。例如,(多个)附加的处理器915可包括与处理器910相同的(多个)附加的处理器、与处理器910异构的或不对称的(多个)附加的处理器、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器。在包括架构、微架构、热、功耗特征等一系列品质度量的方面,(多个)处理器910、915之间存在各种差异。这些差异可将其自身有效显示为处理器910和915之间的不对称性和异构性。对于至少一个实施例,各种处理器910和915可驻留在同一管芯封装中。
现在参考图10,所示的是系统1000的框图,在系统1000中本公开的实施例可以操作。图10图示出处理器1070和1080。在一个实施例中,处理器1070、1080可支持如以上所描述的用于在环转变期间保护栈的处理器扩展。处理器1070、1080可分别包括集成存储器以及I/O控制逻辑(“CL”)1072和1082,并且分别经由点对点(P-P)接口1078和1088之间的点对点互连1050彼此相互通信。如所示,处理器1070、1080各自通过相应P-P接口1076至1094以及1086至1098经由点对点互连1052和1054与芯片组1090通信。对于至少一个实施例,CL1072、1082可包括集成存储器控制器单元。CL 1072、1082可包括I/O控制逻辑。如所描绘,存储器1032、1034耦合至CL 1072、1082,并且I/O设备1014也耦合至控制逻辑1072、1082。传统I/O设备1015经由接口1096耦合至芯片组1090。
实施例可在许多不同的系统类型中实现。图11是根据本公开的实施例的SoC 1100的框图。虚线框是更先进的SoC的任选特征。在图11中,(多个)互连单元1112耦合至:应用处理器1120,包括一个或多个核1102A-N的集合以及(多个)共享高速缓存单元1106;系统代理单元1110;(多个)总线控制器单元1116;(多个)集成存储器控制器单元1114;一组或一个或多个媒体处理器1118,可包括集成图形逻辑1108、用于提供静态和/或视频照相功能的图像处理器1124、用于提供硬件音频加速的音频处理器1126、用于提供视频编码/解码加速的视频处理器1128;静态随机存取存储器(SRAM)单元1130;直接存储器存取(DMA)单元1132;以及用于耦合至一个或多个外部显示器的显示单元1140。在一个实施例中,存储器模块可被包括在(多个)集成存储器控制器单元1114中。在另一个实施例中,存储器模块可以被包括在可被用来访问和/或控制存储器的SoC 1100的一个或多个其他组件中。应用处理器1120可包括用于实现静默存储器指令和未命中率追踪的PMU,以优化如本文中的实施例所描述的对线程的切换策略。
存储器层级结构包括核内的一个或多个高速缓存级别、一组或一个或多个共享高速缓存单元1106、以及耦合至集成存储器控制器单元1114的集合的外部存储器(未示出)。共享高速缓存单元1106的集合可包括一个或多个中间级别的高速缓存、末级高速缓存(LLC)和/或以上各项的组合,中间级别的高速缓存诸如第二级(L2)、第三级(L3)、第四级(L4)或其他级别的高速缓存。
在一些实施例中,核1102A-N中的一个或多个核能够多线程化。系统代理1110包括协调和操作核1102A-N的那些组件。系统代理单元1110可包括例如功率控制单元(PCU)和显示单元。PCU可以是对核1102A-N以及集成图形逻辑1108的功率状态进行调节所需的逻辑和组件,或可包括这些逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核1102A-N在架构和/或指令集方面可以是同构或异构的。例如,核1102A-N中的一些可以是有序的,而另一些是乱序的。作为另一示例,核1102A-N中的两个或更多个能够执行同一指令集,而其他核仅能够执行该指令集的子集或不同的指令集。
应用处理器1120可以是通用处理器,诸如,酷睿(CoreTM)i3、i5、i7、2 Duo和Quad、至强(XeonTM)、安腾(ItaniumTM)、凌动(AtomTM)或QuarkTM处理器,这些处理器均可以从加利福尼亚州圣克拉拉市的英特尔TM公司获得。替代地,应用处理器1120可以来自另一公司,诸如ARM控股TM公司、MIPSTM等。应用处理器1120可以是专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器等等。应用处理器1120可被实现在一个或多个芯片上。应用处理器1120可以是一个或多个衬底的部分,和/或可以使用诸如例如BiCMOS、CMOS或NMOS之类的数种工艺技术中的任何技术实现在一个或多个衬底上。
图12是根据本公开的芯片上系统(SoC)设计的实施例的框图。作为特定的说明性示例,SoC 1200被包括在用户装备(UE)中。在一个实施例中,UE指可由最终用户用于通信的任何设备,诸如,手持电话、智能电话、平板、超薄笔记本、具有宽带适配器的笔记本,或任何其他类似的通信设备。UE通常连接到基站或节点,该基站或节点本质上潜在地对应于GSM网络中的移动站(MS)。
此处,SOC 1200包括2个核——1206和1207。核1206和1207可符合指令集架构,诸如,基于架构核TM的处理器、超微半导体公司(AMD)处理器、基于MIPS的处理器、基于ARM的处理器设计,或它们的客户,以及它们的被许可方或采纳方。核1206和1207被耦合至高速缓存控件1208,该高速缓存控件1208与总线接口单元1209和L2高速缓存1210相关联以与系统1200的其他部分通信。互连1210包括潜在地实现所描述公开的一个或多个方面的芯片上互连,诸如IOSF、AMBA或以上所讨论的其他互连。在一个实施例中,核1206、1207可支持如在本文中的实施例中所描述的用于在环转变期间保护栈的处理器扩展。
互连1210提供到其他组件的通信信道,其他组件诸如用于与用户身份模块(SIM)卡对接的SIM 1230、用于保存供核1206和1207执行以初始化和引导SoC 1200的引导代码的引导ROM 1235、用于与外部存储器(例如,DRAM 1260)对接的SDRAM控制器1240、用于与非易失性存储器(例如,闪存1265)对接的闪存控制器1245、用于与外围设备对接的外围控制装置1250(例如,串行外围接口)、用于显示和接收输入(例如,允许触摸的输入)的视频编解码器1220和视频接口1225、用于执行图形相关的计算的GPU 1215等等。这些接口中的任何一者可包括本文中所描述公开的多个方面。另外,系统1200图示出用于通信的外围设备,诸如蓝牙模块1270、3G调制解调器1275、GPS 1280以及Wi-Fi 1185。
图13图示出计算机系统1200的按照示例形式的机器的示意图,在该计算机系统1200内,可执行用于使机器执行本文中所讨论的方法中的任何一者或多者的一组指令。在替代实施例中,可以在LAN、内联网、外联网或互联网中将机器连接(例如,联网)到其他机器。机器可以在客户机-服务器网络环境中作为服务器或客户机设备操作,或者在对等(或分布式)网络环境中作为对等机器操作。该机器可以是个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、web设备、服务器、网络路由器、交换机或桥、或者能够执行指定由该机器执行的动作的一组指令(顺序的或以其他方式)的任何机器。此外,尽管仅图示了单个机器,但是也应当认为术语“机器”包括单独地或联合地执行一组(或多组)指令以执行本文中所讨论的方法中的任何一者或多者的机器的任何集合。
计算机系统1300包括处理设备1302、主存储器1304(例如,只读存储器(ROM)、闪存、动态随机存取存储器(DRAM)(诸如,同步DRAM(SDRAM)或DRAM(RDRAM)等)、静态存储器1306(例如,闪存、静态随机存取存储器(SRAM)等)以及数据存储设备1318,它们经由总线1330彼此通信。
处理设备1302表示一个或多个通用处理设备,诸如,微处理器、中央处理单元等等。更具体地,处理设备可以是复杂指令集计算(CISC)微处理器、精简指令集计算机(RISC)微处理器、超长指令字(VLIW)微处理器、或实现其他指令集的处理器、或实现指令集的组合的处理器。处理设备1302也可以是一个或多个专用处理设备,诸如,专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、网络处理器等等。在一个实施例中,处理设备1302可包括一个或处理核。处理设备1302被配置成执行用于执行本文中所讨论的操作和步骤的处理逻辑1326。在一个实施例中,处理设备1302与参考图1描述的实现如本公开的实施例所述的用于在环转变期间保护栈的处理器扩展的技术的处理器架构100相同。
计算机系统1300可以进一步包括通信地耦合至网络1320的网络接口设备1308。计算机系统1300还可包括视频显示单元1310(例如,液晶显示器(LCD)或阴极射线管(CRT))、字母数字输入设备1312(例如,键盘)、光标控制设备1314(例如,鼠标)、以及信号生成设备1316(例如,扬声器)。此外,计算机系统1300可包括图形处理单元1322、视频处理单元1328以及音频处理单元1332。
数据存储设备1318可包括机器可访问存储介质1324,在其上存储软件1326,软件1326实现本文中所描述的功能的方法中的任何一者或多者,诸如实现静默存储器指令和未命中率追踪以优化以上所描述的对处理设备中的线程的切换策略。在由计算机系统1300对软件1326的执行期间,软件1326也可完全或至少部分地作为指令1326驻留在主存储器1304内和/或作为处理逻辑1326驻留在处理设备1302内;该主存储器1304和处理设备1302也构成机器可访问存储介质。
机器可读存储介质1324也可被用来存储实现静默存储器指令和未命中率追踪以优化对诸如参考图1中的处理设备100所述的处理设备中的线程的切换策略的指令1326,和/或包含调用以上应用的方法的软件库。尽管在示例实施例中将机器可访问存储介质1328示出为单个介质,但是应当认为术语“机器可访问存储介质”包括存储一组或多组指令的单个介质或多个介质(例如,集中式或分布式数据库和/或相关联的高速缓存及服务器)。还应当认为术语“机器可访问存储介质”包括能够存储、编码或携带用于由机器执行并且使该机器执行本公开的方法中的任何一者或多者的一组指令的任何介质。应当相应地认为术语“机器可访问存储介质”包括但不限于:固态存储器以及光和磁介质。
下列示例涉及进一步的实施例。
示例1是一种处理器,包括:1)多个寄存器,用于存储影子栈指针(SSP),其中,每个寄存器与特权等级相关联;以及2)处理器核,可操作地耦合至多个寄存器,该处理器核用于:a)接收用于将与当前活动应用相关联的第一特权等级改变为第二特权等级的指示符;b)考虑到第二特权等级,选择存储在多个寄存器中的寄存器中的影子栈指针(SSP),其中,该寄存器与第二特权等级相关联;以及c)使用SSP来标识用于由处理器在第二特权等级使用的影子栈。
在示例2中,如示例1的所述的主题,其中,处理器核进一步用于:响应于检测到第二特权等级高于第一特权等级,验证与该第二特权等级相关联的SSP。
在示例3中,如示例1-2所述的主题,其中为了验证SSP,处理器核进一步用于:验证由该SSP标识的影子栈。
在示例4中,如示例1-3所述的主题,其中为了验证影子栈,处理器核进一步用于:a)判定与影子栈相关联的存储器位置是否被标记为影子栈存储器;b)标识与影子栈相关联的令牌;以及c)验证由SSP指向的地址匹配由令牌包括的地址。
在示例5中,如示例1-4所述的主题,其中,处理器核进一步用于:响应于检测到影子栈不是有效的,生成错误指示符。
在示例6中,如示例1-5所述的主题,其中,处理器核进一步用于,响应于检测到影子栈是有效的:a)将令牌标记为指示影子栈是忙碌的;以及b)将返回地址和与第一特权等级相关联的SSP存储在影子栈中。
在示例7中,如示例1-6所述的主题,其中,处理器核进一步用于:响应于检测到从第二特权等级返回到第一特权等级,验证存储在影子栈中的返回地址匹配存储在与当前活动应用相关联的栈中的返回地址。
在示例8中,如示例1-7所述的主题,其中,处理器核进一步用于,响应于验证返回地址:a)将与第一特权等级相关联的SSP恢复为用于当前活动应用的当前SSP;以及b)将令牌标记为指示影子栈是空闲的。
在示例9中,如示例1-8所述的主题,其中,处理器核进一步用于,响应于检测到第一特权等级是应用特权等级并且第二特权等级是管理程序特权等级:a)将用于当前活动应用的当前SSP存储在与应用特权等级相关联的寄存器中;b)选择与管理程序特权等级相关联的SSP作为当前SSP;c)判定由该SSP标识的影子栈是否用于在管理程序特权等级使用;以及d)响应于该判定,判定是否要验证该影子栈或者将与该影子栈相关联的令牌标记为忙碌的。
各实施例可具有以上所描述的结构特征的不同组合。例如,也可参照本文中所描述的方法或过程来实现以上所描述的处理器的所有任选特征,并且可在一个或多个实施例中的任何地方使用示例中的细节。
示例10是一种方法,包括:1)使用处理设备来接收用于将当前活动应用的第一特权等级改变为第二特权等级的指示符;2)考虑到第二特权等级,选择存储在多个寄存器中的寄存器中的影子栈指针(SSP),其中该寄存器与第二特权等级相关联;以及3)使用SSP来标识用于由处理设备在第二特权等级使用的影子栈。
在示例11中,如示例10所述的主题,进一步包括:响应于检测到第二特权等级高于第一特权等级,验证与该第二特权等级相关联的SSP。
在示例12中,如示例10-11所述的主题,其中,验证SSP进一步包括验证由该SSP标识的影子栈。
在示例13中,如示例10-12所述的主题,其中为了验证影子栈,进一步包括:a)判定与影子栈相关联的存储器位置是否被标记为影子栈存储器;b)标识与影子栈相关联的令牌;以及c)验证由SSP指向的地址匹配由令牌包括的地址。
在示例14中,如示例10-13所述的主题,进一步包括:响应于检测到影子栈不是有效的,生成错误指示符。
在示例15中,如示例10-14所述的主题,进一步包括,响应于检测到影子栈是有效的:a)将令牌标记为指示影子栈是忙碌的;以及a)将返回地址和与第一特权等级相关联的SSP存储在影子栈中。
在示例16中,如示例10-15所述的主题,进一步包括:响应于检测到从第二特权等级返回到第一特权等级,验证存储在影子栈中的返回地址匹配存储在与当前活动应用相关联的栈中的返回地址。
在示例17中,如示例10-16所述的主题,进一步包括,响应于验证返回地址:a)将与第一特权等级相关联的SSP恢复为用于当前活动应用的当前SSP;以及b)将令牌标记为指示影子栈是空闲的。
在示例18中,如示例10-17所述的主题,进一步包括,响应于检测到第一特权等级是应用特权等级并且第二特权等级是管理程序特权等级:a)将用于当前活动应用的当前SSP存储在与应用特权等级相关联的寄存器中;b)选择与管理程序特权等级相关联的SSP作为当前SSP;c)判定由该SSP标识的影子栈是否用于在管理程序特权等级使用;以及d)响应于该判定,判定是否要验证该影子栈或者将与该影子栈相关联的令牌标记为忙碌的。
各实施例可具有以上所描述的结构特征的不同组合。例如,也可参照本文中所描述的系统来实现以上所描述的处理器和方法的所有任选特征,并且可在一个或多个实施例中的任何地方使用示例中的细节。
示例19是一种芯片上系统(SoC),包括:1)多个寄存器,用于存储影子栈指针(SSP),其中,每个寄存器与特权等级相关联;以及2)处理器核,可操作地耦合至多个寄存器,该处理器核用于:a)接收用于将与当前活动应用相关联的第一特权等级改变为第二特权等级的指示符;b)考虑到第二特权等级,选择存储在多个寄存器中的寄存器中的影子栈指针(SSP),其中,该寄存器与第二特权等级相关联;以及c)使用SSP来标识用于由处理器在第二特权等级使用的影子栈。
在示例20中,如示例19所述的主题,其中,处理器核进一步用于:响应于检测到第二特权等级高于第一特权等级,验证与该第二特权等级相关联的SSP。
在示例21中,如示例19-20所述的主题,其中为了验证SSP,处理器核进一步用于:验证由SSP标识的影子栈。
在示例22中,如示例19-21所述的主题,其中为了验证影子栈,处理器核进一步用于:a)判定与影子栈相关联的存储器位置是否被标记为影子栈存储器;b)标识与影子栈相关联的令牌;以及c)验证由SSP指向的地址匹配由令牌包括的地址。
在示例23中,如示例19-22所述的主题,其中,处理器核进一步用于:响应于检测到影子栈不是有效的,生成错误指示符。
在示例24中,如示例19-23所述的主题,其中,处理器核进一步用于,响应于检测到影子栈是有效的:a)将令牌标记为指示影子栈是忙碌的;以及b)将返回地址和与第一特权等级相关联的SSP存储在影子栈中。
在示例25中,如示例19-24所述的主题,其中,处理器核进一步用于,响应于检测到从第二特权等级返回到第一特权等级,验证存储在影子栈中的返回地址匹配存储在与当前活动应用相关联的栈中的返回地址。
在示例26中,如示例19-25所述的主题,其中,处理器核进一步用于,响应于验证返回地址:a)将与第一特权等级相关联的SSP恢复为用于当前活动应用的当前SSP;以及b)将令牌标记为指示影子栈是空闲的。
在示例27中,如示例19-26所述的主题,其中,处理器核进一步用于,响应于检测到第一特权等级是应用特权等级并且第二特权等级是管理程序特权等级:a)将用于当前活动应用的当前SSP存储在与应用特权等级相关联的寄存器中;b)选择与管理程序特权等级相关联的SSP作为当前SSP;c)判定由该SSP标识的影子栈是否用于在管理程序特权等级使用;以及d)响应于该判定,判定是否要验证该影子栈或者将与该影子栈相关联的令牌标记为忙碌的。
各实施例可以具有以上所描述的操作特征的不同的组合。例如,以上所描述的方法的所有任选特征也可以参考非暂态计算机可读存储介质来实现。可在一个或多个实施例中的任何地方使用示例中的细节。
示例28是一种存储可执行指令的非暂态计算机可读存储介质,该可执行指令在由处理设备执行时使该处理设备用于:1)使用处理设备来接收用于将与当前活动应用相关联的第一特权等级改变为第二特权等级的指示符;2)考虑到第二特权等级,选择存储在多个寄存器中的寄存器中的影子栈指针(SSP),其中该寄存器与第二特权等级相关联;以及3)使用SSP来标识用于由处理器在第二特权等级使用的影子栈。
在示例29中,如示例28所述的主题,其中,可执行指令进一步使处理器设备用于:响应于检测到第二特权等级高于第一特权等级,验证与该第二特权等级相关联的SSP。
在示例30中,如示例28-29所述的主题,其中为了验证SSP,可执行指令进一步使处理器设备用于:验证由SSP标识的影子栈。
在示例31中,如示例28-30所述的主题,其中为了验证影子栈,可执行指令进一步使处理器设备用于:a)判定与影子栈相关联的存储器位置是否被标记为影子栈存储器;b)标识与影子栈相关联的令牌;以及c)验证由SSP指向的地址匹配由令牌包括的地址。
在示例32中,如示例28-31所述的主题,其中,可执行指令进一步使处理器设备用于:响应于检测到影子栈不是有效的,生成错误指示符。
在示例33中,如示例28-32所述的主题,其中,可执行指令进一步使处理器设备用于,响应于检测到影子栈是有效的:a)将令牌标记为指示影子栈是忙碌的;以及b)将返回地址和与第一特权等级相关联的SSP存储在影子栈中。
在示例34中,如示例28-33所述的主题,其中,可执行指令进一步使处理器设备用于:响应于检测到从第二特权等级返回到第一特权等级,验证存储在影子栈中的返回地址匹配存储在与当前活动应用相关联的栈中的返回地址。
在示例35中,如示例28-34所述的主题,其中,可执行指令进一步使处理器设备用于,响应于验证返回地址:a)将与第一特权等级相关联的SSP恢复为用于当前活动应用的当前SSP;以及b)将令牌标记为指示影子栈是空闲的。
在示例36中,如示例28-35所述的主题,其中,可执行指令进一步使处理器设备用于,响应于检测到第一特权等级是应用特权等级并且第二特权等级是管理程序特权等级:a)将用于当前活动应用的当前SSP存储在与应用特权等级相关联的寄存器中;b)选择与管理程序特权等级相关联的SSP作为当前SSP;c)判定由该SSP标识的影子栈是否用于在管理程序特权等级使用;以及d)响应于该判定,判定是否要验证该影子栈或者将与该影子栈相关联的令牌标记为忙碌的。
示例37是包括指令的非暂态计算机可读存储介质,该指令在由处理器执行时使处理器执行如示例10-18所述的方法。
各实施例可具有以上所描述的操作特征的不同的组合。例如,以上所描述的方法、系统和非暂态计算机可读存储介质的所有任选特征也可参考其他类型的结构来实现。可在一个或多个实施例中的任何地方使用示例中的细节。
示例38是一种设备,包括:1)处理器的多个功能单元;2)用于由处理器接收用于将与当前活动应用相关联的第一特权等级改变为第二特权等级的指示符的装置;3)用于考虑到第二特权等级来选择存储在多个寄存器中的寄存器中的影子栈指针(SSP)的装置,其中,该寄存器与第二特权等级相关联;以及4)用于使用SSP来标识用于由处理器在第二特权等级使用的影子栈的装置。
在示例39中,如示例38所述的主题,进一步包括如示例1-9和19-27中的任一项所述的主题。
示例40是一种系统,包括:存储器设备和包括存储器控制器单元的处理器,其中该处理器配置成用于执行如权利要求10-18中的任一项所述的方法。
在示例41中,如示例40所述的主题,进一步包括如示例1-9和19-27中的任一项所述的主题。
各实施例可具有以上所描述的操作特征的不同的组合。例如,以上所描述的方法的所有任选特征可参考处理器来实现。可在一个或多个实施例中的任何地方使用示例中的细节。
示例42是一种处理器,包括:1)多个寄存器,用于存储影子栈指针(SSP),其中,每个寄存器与特权等级相关联;以及2)处理器核,可操作地耦合至多个寄存器,该处理器核用于:a)检测与当前活动应用相关联的中断;b)考虑到该中断,选择存储在多个寄存器中的寄存器中的影子栈指针(SSP),该SSP与该中断的特权等级相关联;以及c)将SSP存储在由中断门描述符中的字段索引的存储器数据结构中,该SSP标识用于由处理器在该特权等级使用的影子栈。
各实施例可具有以上所描述的结构特征的不同组合。例如,也可参照本文中所描述的方法或过程来实现以上所描述的处理器的所有任选特征,并且可在一个或多个实施例中的任何地方使用示例中的细节。
示例43是一种方法,包括:1)使用处理设备来检测与当前活动应用相关联的中断;2)考虑到该中断,选择存储在多个寄存器中的寄存器中的影子栈指针(SSP),该SSP与该中断的特权等级相关联;以及3)将SSP存储在由中断门描述符中的字段索引的存储器数据结构中,该SSP标识用于由处理设备在该特权等级使用的影子栈。
各实施例可具有以上所描述的结构特征的不同组合。例如,也可参照本文中所描述的系统来实现以上所描述的处理器和方法的所有任选特征,并且可在一个或多个实施例中的任何地方使用示例中的细节。
示例44是一种芯片上系统(SoC),包括:1)多个寄存器,用于存储影子栈指针(SSP),其中,每个寄存器与特权等级相关联;以及2)处理器核,可操作地耦合至多个寄存器,该处理器核用于:a)检测与当前活动应用相关联的中断;b)考虑到该中断,选择存储在多个寄存器中的寄存器中的影子栈指针(SSP),该SSP与该中断的特权等级相关联;以及c)将SSP存储在由中断门描述符中的字段索引的存储器数据结构中,该SSP标识用于由处理器在该特权等级使用的影子栈。
各实施例可具有以上所描述的操作特征的不同的组合。例如,以上所描述的方法的所有任选特征也可参考非暂态计算机可读存储介质来实现。可在一个或多个实施例中的任何地方使用示例中的细节。
示例45是一种存储可执行指令的非暂态计算机可读存储介质,该可执行指令在由处理设备执行时使该处理设备用于:1)使用处理设备来检测与当前活动应用相关联的中断;2)考虑到该中断,选择存储在多个寄存器中的寄存器中的影子栈指针(SSP),该SSP与该中断的特权等级相关联;以及3)将SSP存储在由中断门描述符中的字段索引的存储器数据结构中,该SSP标识用于由处理设备在该特权等级使用的影子栈。
各实施例可具有以上所描述的操作特征的不同的组合。例如,以上所描述的方法、系统和非暂态计算机可读存储介质的所有任选特征也可参考其他类型的结构来实现。可在一个或多个实施例中的任何地方使用示例中的细节。
示例46是一种设备,包括:1)处理器的多个功能单元;2)用于由处理器检测与当前活动应用相关联的中断的装置;3)用于考虑到该中断来选择存储在多个寄存器中的寄存器中的影子栈指针(SSP)的装置,该SSP与该中断的特权等级相关联;以及4)用于将SSP存储在由中断门描述符中的字段索引的存储器数据结构中的装置,该SSP标识用于由处理设备在该特权等级使用的影子栈。
在示例47中,如示例46所述的主题,进一步包括如示例42和44中任一项所述的主题。
示例48是一种系统,包括:存储器设备和包括存储器控制器单元的处理器,其中该处理器被配置成用于执行如示例43所述的方法。
在示例49中,如示例48所述的主题,进一步包括如示例42和44中任一项所述的主题。
各实施例可具有以上所描述的操作特征的不同的组合。例如,以上所描述的方法的所有任选特征可参考处理器来实现。可在一个或多个实施例中的任何地方使用示例中的细节。
示例50是一种处理器,包括:1)存储器,具有用于存储影子栈指针(SSP)的数据结构;以及2)处理器核,可操作地耦合至存储器,该处理器核用于:a)检测用于将与当前活动应用相关联的当前任务切换到新任务的任务切换操作;b)考虑到该任务切换操作,标识与新任务相关联的数据结构;以及c)从该数据结构中选择SSP,该SSP标识用于由处理设备在与新任务相关联的特权等级使用的影子栈。
各实施例可具有以上所描述的结构特征的不同组合。例如,也可参照本文中所描述的方法或过程来实现以上所描述的处理器的所有任选特征,并且可在一个或多个实施例中的任何地方使用示例中的细节。
示例51是一种方法,包括:1)由处理设备检测用于将与当前活动应用相关联的当前任务切换到新任务的任务切换操作;2)考虑到该任务切换操作,标识与新任务相关联的数据结构;3)从该数据结构中选择SSP,该SSP标识用于由处理设备在与新任务相关联的特权等级使用的影子栈;以及将该SSP存储在与该特权等级相关联的多个寄存器中的寄存器中。
各实施例可具有以上所描述的结构特征的不同组合。例如,也可参照本文中所描述的系统来实现以上所描述的处理器和方法的所有任选特征,并且可在一个或多个实施例中的任何地方使用示例中的细节。
示例52是一种芯片上系统(SoC),包括:1)存储器,具有用于存储影子栈指针(SSP)的数据结构;以及2)处理器核,可操作地耦合至存储器,该处理器核用于:a)检测用于将与当前活动应用相关联的当前任务切换到新任务的任务切换操作;b)考虑到该任务切换操作,标识与新任务相关联的数据结构;以及c)从该数据结构中选择SSP,该SSP标识用于由处理设备在与新任务相关联的特权等级使用的影子栈。
各实施例可具有以上所描述的操作特征的不同的组合。例如,以上所描述的方法的所有任选特征也可参考非暂态计算机可读存储介质来实现。可在一个或多个实施例中的任何地方使用示例中的细节。
示例53是一种存储可执行指令的非暂态计算机可读存储介质,该可执行指令在由处理设备执行时使该处理设备用于:1)由处理设备检测用于将与当前活动应用相关联的当前任务切换到新任务的任务切换操作;2)考虑到该任务切换操作,标识与新任务相关联的数据结构;以及3)从该数据结构中选择SSP,该SSP标识用于由处理设备在与新任务相关联的特权等级使用的影子栈。
各实施例可具有以上所描述的操作特征的不同的组合。例如,以上所描述的方法、系统和非暂态计算机可读存储介质的所有任选特征也可参考其他类型的结构来实现。可在一个或多个实施例中的任何地方使用示例中的细节。
示例54是一种设备,包括:1)处理器的多个功能单元;2)用于由处理器检测用于将与当前活动应用相关联的当前任务切换到新任务的任务切换操作的装置;以及3)用于考虑到该任务切换操作来标识与新任务相关联的数据结构的装置;4)用于从该数据结构中选择SSP的装置,该SSP标识用于由处理设备在与新任务相关联的特权等级使用的影子栈。
在示例55中,如示例54所述的主题,进一步包括如示例50和52中任一项所述的主题。
示例56是一种系统,包括:存储器设备和包括存储器控制器单元的处理器,其中该处理器被配置成用于执行如示例51所述的方法。
在示例57中,如示例56所述的主题,进一步包括如示例50和52中任一项所述的主题。
尽管是参考有限数量的实施例来描述本公开的,但是本领域技术人员将从其中领会到很多的修改和变型。所附权利要求书旨在涵盖落入本公开的真实精神和范围内的所有此类修改和变型。
设计可经历从创造到仿真到制造的各阶段。表示设计的数据可用数种方式来表示该设计。首先,如仿真中有用的,可使用硬件描述语言或另一功能性描述语言来表示硬件。另外,可在设计过程的一些阶段产生具有逻辑和/或晶体管门电路的电路级模型。此外,大多数设计在一些阶段都达到表示硬件模型中各种设备的物理布置的数据水平。在使用常规半导体制造技术的情况下,表示硬件模型的数据可以是指定在用于制造集成电路的掩模的不同掩模层上存在或不存在各种特征的数据。在设计的任何表示中,数据可被存储在任何形式的机器可读介质中。存储器或磁或光存储(诸如,盘)可以是存储经由光学或电学波来传送的信息的机器可读介质,这些光学或电学波被调制或以其他方式生成以传送这些信息。当指示或承载代码或设计的电学载波被传送达到实现电信号的复制、缓冲或重新发送的程度时,即产生了新的副本。因此,通信提供商或网络提供商可在有形机器可读介质上至少临时地存储具体化本公开的实施例的技术的物品(诸如,编码在载波中的信息)。
如本文中所使用的模块指硬件、软件、和/或固件的任何组合。作为示例,模块包括与非暂态介质相关联的诸如微控制器之类的硬件,该非暂态介质用于存储适于由该微控制器执行的代码。因此,在一个实施例中,对模块的引用是指硬件,该硬件被专门配置成识别和/或执行要保存在非暂态介质上的代码。此外,在另一实施例中,模块的使用是指包括代码的非暂态介质,该代码专门适于由微控制器执行以进行预定的操作。并且如可以被推断,在又一实施例中,术语模块(在此示例中)可指微控制器和非暂态介质的组合。通常,被图示为分开的模块的边界一般不同并且潜在地重叠。例如,第一和第二模块可共享硬件、软件、固件、或它们的组合,同时潜在地保留一些独立的硬件、软件或固件。在一个实施例中,术语逻辑的使用包括诸如晶体管、寄存器之类的硬件或诸如可编程逻辑器件之类的其他硬件。
在一个实施例中,短语“被配置成”的使用指的是安排、合在一起、制造、提供销售、进口和/或设计装置、硬件、逻辑或元件以执行指定或确定的任务。在此示例中,没有操作的装置或其元件仍然“被配置成”执行指定任务,如果它被设计、耦合、和/或互连以执行所述指定任务的话。作为纯说明性示例,在操作期间,逻辑门可提供0或1。但“被配置成”向时钟提供启用信号的逻辑门不包括可提供1或0的每一潜在逻辑门。相反,该逻辑门是以在操作期间1或0的输出用于启用时钟的某种方式来耦合的逻辑门。再次注意,术语“被配置成”的使用不要求操作,而是集中于装置、硬件、和/或元件的潜在状态,其中在该潜在状态中,该装置、硬件和/或元件被设计成在该装置、硬件和/或元件正在操作时执行特定任务。
此外,在一个实施例中,短语“用于”、“能够/能够用于”和/或“能用于”的使用指的是一些装置、逻辑、硬件、和/或元件按这种方式设计来以指定方式启用对该装置、逻辑、硬件、和/或元件的使用。如以上所注意,在一个实施例中,用于、能够、或能用于的使用指的是装置、逻辑、硬件、和/或元件的潜在状态,其中该装置、逻辑、硬件、和/或元件不是正在操作,而是以此类方式被设计以便以指定方式启用对装置的使用。
如本文中所使用,值包括数字、状态、逻辑状态、或二进制逻辑状态的任何已知表示。通常,逻辑电平、逻辑值、或逻辑的值的使用也被称为1和0,这简单地表示了二进制逻辑状态。例如,1指的是高逻辑电平,0指的是低逻辑电平。在一个实施例中,诸如晶体管或闪存单元之类的存储单元能够保持单个逻辑的值或多个逻辑的值。不过,也使用了计算机系统中的值的其他表示。例如,十进制数10还可以被表示为二进制值910和十六进制字母A。因此,值包括能够被保存在计算机系统中的信息的任何表示。
而且,状态也可由值或值的部分来表示。作为示例,诸如逻辑1之类的第一值可表示默认或初始状态,而诸如逻辑0之类的第二值可表示非默认状态。此外,在一个实施例中,术语重置和置位分别指的是默认和已更新的值或状态。例如,默认值潜在地包括高逻辑值,即,重置,而已更新的值潜在地包括低逻辑值,即,置位。注意,可利用值的任何组合来表示任何数量的状态。
上述方法、硬件、软件、固件或代码的实施例可经由存储在机器可访问、机器可读、计算机可访问、或计算机可读介质上可由处理元件执行的指令或代码来实现。非暂态机器可访问/可读介质包括提供(即,存储和/或发送)诸如计算机或电子系统之类的机器可读形式的信息的任何机制。例如,非暂态机器可访问介质包括:随机存取存储器(RAM),诸如,静态RAM(SRAM)或动态RAM(DRAM);ROM;磁或光存储介质;闪存设备;电存储设备;光存储设备;声存储设备;用于保存从暂态(传播)信号(例如,载波、红外信号、数字信号)接收的信息的其他形式的存储设备;等等,这些非暂态机器可访问介质与可从其接收信息的非暂态介质相区别。
被用于对逻辑进行编程以执行本公开的实施例的指令可被存储在系统中的存储器(诸如,DRAM、高速缓存、闪存、或其他存储)内。此外,指令可经由网络或通过其他计算机可读介质来分发。因此,机器可读介质可包括用于以机器(诸如,计算机)可读形式存储或传送信息的任何机制,但不限于:软盘、光盘、紧凑盘只读存储器(CD-ROM)、磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存存储器、或在经由互联网通过电、光、声、或其他形式的传播信号(诸如,载波、红外信号、数字信号等)传送信息中所用的有形机器可读存储器。因此,计算机可读介质包括适用于存储或传送机器(例如,计算机)可读形式的电子指令或信息的任何类型的有形机器可读介质。
本说明书中通篇对“一个实施例”或“实施例”的引用意指结合该实施例描述的特定的特征、结构或特性被包括在本公开的至少一个实施例中。因此,在本说明书中通篇的不同位置出现短语“在一个实施例中”或“在实施例中”不一定都是指同一个实施例。此外,在一个或多个实施例中,能以任何合适的方式来组合特定的特征、结构或特性。
在上述说明书中,已经参考特定示例性实施例给出了具体实施方式。然而,将显而易见的是,可对这些实施例作出各种修改和改变,而不背离如所附权利要求所述的本公开的更宽泛精神和范围。因此,应当认为说明书和附图是说明性的而不是限制性的。此外,实施例和其他示例性语言的上述使用不一定是指同一实施例或同一示例,而可能是指不同和独特的实施例,也有可能是同一实施例。
Claims (32)
1.一种处理器,包括:
多个寄存器,用于存储影子栈指针(SSP),其中,每个寄存器与特权等级相关联;以及
处理器核,可操作地耦合至所述多个寄存器,所述处理器核用于:
接收用于将与当前活动应用相关联的第一特权等级改变为第二特权等级的指示符;
考虑到所述第二特权等级,选择存储在所述多个寄存器中的寄存器中的影子栈指针(SSP),其中所述寄存器与所述第二特权等级相关联;以及
使用所述SSP来标识用于由所述处理器在所述第二特权等级使用的影子栈。
2.如权利要求1所述的处理器,其中,所述处理器核进一步用于:响应于检测到所述第二特权等级高于所述第一特权等级,验证与所述第二特权等级相关联的SSP。
3.如权利要求2所述的处理器,其中,为了验证所述SSP,所述处理器核进一步用于:验证由所述SSP标识的影子栈。
4.如权利要求3所述的处理器,其中,为了验证所述影子栈,所述处理器核进一步用于:
判定与所述影子栈相关联的存储器位置是否被标记为影子栈存储器;
标识与所述影子栈相关联的令牌;以及
验证由所述SSP指向的地址匹配由所述令牌包括的地址。
5.如权利要求4所述的处理器,其中,所述处理器核进一步用于:响应于检测到所述影子栈不是有效的,生成错误指示符。
6.如权利要求4所述的处理器,其中,所述处理器核进一步用于,响应于检测到所述影子栈是有效的:
将所述令牌标记为指示所述影子栈是忙碌的;以及
将返回地址和与所述第一特权等级相关联的SSP存储在所述影子栈中。
7.如权利要求6所述的处理器,其中,所述处理器核进一步用于:响应于检测到从所述第二特权等级返回到所述第一特权等级,验证存储在所述影子栈中的所述返回地址匹配存储在与所述当前活动应用相关联的栈中的返回地址。
8.如权利要求7所述的处理器,其中,所述处理器核进一步用于,响应于验证所述返回地址:
将与所述第一特权等级相关联的SSP恢复为用于所述当前活动应用的当前SSP;以及
将所述令牌标记为指示所述影子栈是空闲的。
9.如权利要求1所述的处理器,其中,所述处理器核进一步用于,响应于检测到所述第一特权等级是应用特权等级并且所述第二特权等级是管理程序特权等级:
将用于所述当前活动应用的当前SSP存储在与所述应用特权等级相关联的寄存器中;
选择与所述管理程序特权等级相关联的SSP作为所述当前SSP;
判定由所述SSP标识的所述影子栈是否用于在所述管理程序特权等级使用;以及
响应于所述判定,判定是否要验证所述影子栈或者将与所述影子栈相关联的令牌标记为忙碌的。
10.一种方法,包括:
使用处理设备来接收用于将当前活动应用的第一特权等级改变为第二特权等级的指示符;
考虑到所述第二特权等级,选择存储在多个寄存器中的寄存器中的影子栈指针(SSP),其中所述寄存器与所述第二特权等级相关联;以及
使用所述SSP来标识用于由所述处理设备在所述第二特权等级使用的影子栈。
11.如权利要求10所述的方法,进一步包括:响应于检测到所述第二特权等级高于所述第一特权等级,验证与所述第二特权等级相关联的SSP。
12.如权利要求10所述的方法,其中,为了验证所述SSP,进一步包括:验证由所述SSP标识的影子栈。
13.如权利要求12所述的方法,其中,为了验证所述影子栈,进一步包括:
判定与所述影子栈相关联的存储器位置是否被标记为影子栈存储器;
标识与所述影子栈相关联的令牌;以及
验证由所述SSP指向的地址匹配由所述令牌包括的地址。
14.如权利要求13所述的方法,进一步包括:响应于检测到所述影子栈不是有效的,生成错误指示符。
15.如权利要求13所述的方法,进一步包括,响应于检测到所述影子栈是有效的:
将所述令牌标记为指示所述影子栈是忙碌的;以及
将返回地址和与所述第一特权等级相关联的SSP存储在所述影子栈中。
16.如权利要求15所述的方法,进一步包括:响应于检测到从所述第二特权等级返回到所述第一特权等级,验证存储在所述影子栈中的所述返回地址匹配存储在与所述当前活动应用相关联的栈中的返回地址。
17.如权利要求16所述的方法,进一步包括,响应于验证所述返回地址:
将与所述第一特权等级相关联的SSP恢复为用于所述当前活动应用的当前SSP;以及
将所述令牌标记为指示所述影子栈是空闲的。
18.如权利要求10所述的方法,进一步包括,响应于检测到所述第一特权等级是应用特权等级并且所述第二特权等级是管理程序特权等级:
将用于所述当前活动应用的当前SSP存储在与所述应用特权等级相关联的寄存器中;
选择与所述管理程序特权等级相关联的SSP作为所述当前SSP;
判定由所述SSP标识的所述影子栈是否用于在所述管理程序特权等级使用;以及
响应于所述判定,判定是否要验证所述影子栈或者将与所述影子栈相关联的令牌标记为忙碌的。
19.一种芯片上系统(SoC),包括:
多个寄存器,用于存储影子栈指针(SSP),其中,每个寄存器与特权等级相关联;以及
处理器核,可操作地耦合至所述多个寄存器,所述处理器核用于:
接收用于将与当前活动应用相关联的第一特权等级改变为第二特权等级的指示符;
考虑到所述第二特权等级,选择存储在所述多个寄存器中的寄存器中的影子栈指针(SSP),其中所述寄存器与所述第二特权等级相关联;以及
使用所述SSP来标识用于由所述处理器在所述第二特权等级使用的影子栈。
20.如权利要求19所述的SoC,其中,所述处理器核进一步用于:响应于检测到所述第二特权等级高于所述第一特权等级,验证与所述第二特权等级相关联的SSP。
21.如权利要求20所述的SoC,其中,为了验证所述SSP,所述处理器核进一步用于:验证由所述SSP标识的影子栈。
22.如权利要求21所述的SoC,其中,为了验证所述影子栈,所述处理器核进一步用于:
判定与所述影子栈相关联的存储器位置是否被标记为影子栈存储器;
标识与所述影子栈相关联的令牌;以及
验证由所述SSP指向的地址匹配由所述令牌包括的地址。
23.如权利要求22所述的SoC,其中,所述处理器核进一步用于:响应于检测到所述影子栈不是有效的,生成错误指示符。
24.如权利要求22所述的SoC,其中,所述处理器核进一步用于,响应于检测到所述影子栈是有效的:
将所述令牌标记为指示所述影子栈是忙碌的;以及
将返回地址和与所述第一特权等级相关联的SSP存储在所述影子栈中。
25.如权利要求24所述的SoC,其中,所述处理器核进一步用于:响应于检测到从所述第二特权等级返回到所述第一特权等级,验证存储在所述影子栈中的所述返回地址匹配存储在与所述当前活动应用相关联的栈中的返回地址。
26.如权利要求25所述的SoC,其中,所述处理器核进一步用于,响应于验证所述返回地址:
将与所述第一特权等级相关联的SSP恢复为用于所述当前活动应用的当前SSP;以及
将所述令牌标记为指示所述影子栈是空闲的。
27.如权利要求19所述的SoC,其中,所述处理器核进一步用于,响应于检测到所述第一特权等级是应用特权等级并且所述第二特权等级是管理程序特权等级:
将用于所述当前活动应用的当前SSP存储在与所述应用特权等级相关联的寄存器中;
选择与所述管理程序特权等级相关联的SSP作为所述当前SSP;
判定由所述SSP标识的所述影子栈是否用于在所述管理程序特权等级使用;以及
响应于所述判定,判定是否要验证所述影子栈或者将与所述影子栈相关联的令牌标记为忙碌的。
28.一种非暂态计算机可读存储介质,包括指令,所述指令在由处理器执行时使所述处理器执行如权利要求10-18所述的方法。
29.一种设备,包括:
处理器的多个功能单元;
用于由所述处理器接收用于将与当前活动应用相关联的第一特权等级改变为第二特权等级的指示符的装置;
用于考虑到所述第二特权等级来选择存储在多个寄存器中的寄存器中的影子栈指针(SSP)的装置,其中,所述寄存器与所述第二特权等级相关联;以及
用于使用所述SSP来标识用于由所述处理器在所述第二特权等级使用的影子栈的装置。
30.如权利要求29所述的设备,进一步包括如权利要求1-9和19-27中的任一项所述的主题。
31.一种系统,包括:
存储器设备和包括存储器控制器单元的处理器,其中所述处理器被配置成用于执行如权利要求10-18中的任一项所述的方法。
32.如权利要求31所述的系统,进一步包括如权利要求1-9和19-27中的任一项所述的主题。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111138083.7A CN113836523A (zh) | 2016-02-04 | 2017-01-06 | 用于在环转变期间保护栈的处理器扩展 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/016,068 | 2016-02-04 | ||
US15/016,068 US10430580B2 (en) | 2016-02-04 | 2016-02-04 | Processor extensions to protect stacks during ring transitions |
PCT/US2017/012572 WO2017136101A1 (en) | 2016-02-04 | 2017-01-06 | Processor extensions to protect stacks during ring transitions |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111138083.7A Division CN113836523A (zh) | 2016-02-04 | 2017-01-06 | 用于在环转变期间保护栈的处理器扩展 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108463826A true CN108463826A (zh) | 2018-08-28 |
CN108463826B CN108463826B (zh) | 2022-08-09 |
Family
ID=59497842
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780005757.1A Active CN108463826B (zh) | 2016-02-04 | 2017-01-06 | 用于在环转变期间保护栈的处理器扩展 |
CN202111138083.7A Pending CN113836523A (zh) | 2016-02-04 | 2017-01-06 | 用于在环转变期间保护栈的处理器扩展 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111138083.7A Pending CN113836523A (zh) | 2016-02-04 | 2017-01-06 | 用于在环转变期间保护栈的处理器扩展 |
Country Status (5)
Country | Link |
---|---|
US (4) | US10430580B2 (zh) |
CN (2) | CN108463826B (zh) |
DE (1) | DE112017000677T5 (zh) |
TW (4) | TWI796031B (zh) |
WO (1) | WO2017136101A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112580023A (zh) * | 2020-12-23 | 2021-03-30 | 海光信息技术股份有限公司 | 影子栈管理方法及装置、介质、设备 |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160381050A1 (en) | 2015-06-26 | 2016-12-29 | Intel Corporation | Processors, methods, systems, and instructions to protect shadow stacks |
US10394556B2 (en) | 2015-12-20 | 2019-08-27 | Intel Corporation | Hardware apparatuses and methods to switch shadow stack pointers |
US10430580B2 (en) | 2016-02-04 | 2019-10-01 | Intel Corporation | Processor extensions to protect stacks during ring transitions |
US20210026950A1 (en) * | 2016-03-07 | 2021-01-28 | Crowdstrike, Inc. | Hypervisor-based redirection of system calls and interrupt-based task offloading |
US10157268B2 (en) * | 2016-09-27 | 2018-12-18 | Microsoft Technology Licensing, Llc | Return flow guard using control stack identified by processor register |
US10885183B2 (en) * | 2017-09-28 | 2021-01-05 | International Business Machines Corporation | Return oriented programming attack protection |
US10185595B1 (en) * | 2018-06-04 | 2019-01-22 | Confia Systems, Inc. | Program verification using hash chains |
US10909046B2 (en) * | 2018-06-15 | 2021-02-02 | Micron Technology, Inc. | Memory access determination |
US11258861B2 (en) * | 2018-06-29 | 2022-02-22 | Intel Corporation | Secure reporting of platform state information to a remote server |
WO2020000335A1 (en) * | 2018-06-29 | 2020-01-02 | Intel Corporation | Systems and methods of restricting access to kernel memory |
US20200143043A1 (en) * | 2018-11-07 | 2020-05-07 | Raytheon Company | Edge verification and elimination control flow integrity |
KR20210034784A (ko) * | 2019-09-23 | 2021-03-31 | 삼성전자주식회사 | 솔리드 스테이트 드라이브 장치 및 그 제조 방법 |
FR3105855B1 (fr) * | 2019-12-31 | 2022-01-07 | Kalray | Processeur à distribution configurable des ressources privilégiées et exceptions aux anneaux de protection |
US11379579B2 (en) * | 2020-03-24 | 2022-07-05 | Microsoft Technology Licensing, Llc | Shadow stack violation enforcement at module granularity |
US11861364B2 (en) * | 2020-03-24 | 2024-01-02 | Microsoft Technology Licensing, Llc | Circular shadow stack in audit mode |
US11500981B2 (en) * | 2020-03-24 | 2022-11-15 | Microsoft Technology Licensing, Llc | Shadow stack enforcement range for dynamic code |
US11243769B2 (en) * | 2020-03-28 | 2022-02-08 | Intel Corporation | Shadow stack ISA extensions to support fast return and event delivery (FRED) architecture |
EP4127991A1 (en) * | 2020-04-01 | 2023-02-08 | Mobileye Vision Technologies Ltd. | Flow control integrity |
US20220283813A1 (en) * | 2021-03-02 | 2022-09-08 | Intel Corporation | Flexible return and event delivery |
US11977486B2 (en) * | 2022-04-04 | 2024-05-07 | International Business Machines Corporation | Shadow pointer directory in an inclusive hierarchical cache |
DE102022114837A1 (de) | 2022-06-13 | 2023-12-14 | Universität Leipzig, Körperschaft des öffentlichen Rechts | Verfahren und Vorrichtungen zur Sicherung von Mikrocontrollern und eingebetteten Systemen |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101114207A (zh) * | 2007-08-03 | 2008-01-30 | 东南大学 | 一种实现片上影子堆栈存储器的方法及其电路 |
CN201060485Y (zh) * | 2007-08-03 | 2008-05-14 | 东南大学 | 一种实现片上影子堆栈存储器的电路 |
US20120036299A1 (en) * | 2008-08-26 | 2012-02-09 | Atmel Corporation | Secure Information Processing |
Family Cites Families (61)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3794980A (en) | 1971-04-21 | 1974-02-26 | Cogar Corp | Apparatus and method for controlling sequential execution of instructions and nesting of subroutines in a data processor |
WO1990014629A2 (en) | 1989-05-26 | 1990-11-29 | Massachusetts Institute Of Technology | Parallel multithreaded data processing system |
JPH0752576B2 (ja) | 1990-07-19 | 1995-06-05 | 株式会社東芝 | スタックメモリ |
CA2074769C (en) | 1991-08-09 | 2001-03-20 | International Business Machines Corporation | Formula processor |
US5640582A (en) | 1992-05-21 | 1997-06-17 | Intel Corporation | Register stacking in a computer system |
US5497494A (en) | 1993-07-23 | 1996-03-05 | International Business Machines Corporation | Method for saving and restoring the state of a CPU executing code in protected mode |
US5634046A (en) * | 1994-09-30 | 1997-05-27 | Microsoft Corporation | General purpose use of a stack pointer register |
US5968169A (en) | 1995-06-07 | 1999-10-19 | Advanced Micro Devices, Inc. | Superscalar microprocessor stack structure for judging validity of predicted subroutine return addresses |
US6088786A (en) * | 1997-06-27 | 2000-07-11 | Sun Microsystems, Inc. | Method and system for coupling a stack based processor to register based functional unit |
US6128728A (en) | 1997-08-01 | 2000-10-03 | Micron Technology, Inc. | Virtual shadow registers and virtual register windows |
AU7099000A (en) | 1999-09-01 | 2001-03-26 | Intel Corporation | Branch instruction for processor |
US6757771B2 (en) | 2000-08-09 | 2004-06-29 | Advanced Micro Devices, Inc. | Stack switching mechanism in a computer system |
US6751749B2 (en) * | 2001-02-22 | 2004-06-15 | International Business Machines Corporation | Method and apparatus for computer system reliability |
US20030200342A1 (en) | 2001-07-02 | 2003-10-23 | Globespan Virata Incorporated | Communications system using rings architecture |
WO2003090074A2 (en) * | 2002-04-18 | 2003-10-30 | Advanced Micro Devices, Inc. | Initialization of a computer system including a secure execution mode-capable processor |
US7086088B2 (en) | 2002-05-15 | 2006-08-01 | Nokia, Inc. | Preventing stack buffer overflow attacks |
JP2004013556A (ja) | 2002-06-07 | 2004-01-15 | Matsushita Electric Ind Co Ltd | プロセッサ装置、コンパイル装置及びその方法 |
US6996677B2 (en) | 2002-11-25 | 2006-02-07 | Nortel Networks Limited | Method and apparatus for protecting memory stacks |
US20040168078A1 (en) | 2002-12-04 | 2004-08-26 | Brodley Carla E. | Apparatus, system and method for protecting function return address |
US7594111B2 (en) * | 2002-12-19 | 2009-09-22 | Massachusetts Institute Of Technology | Secure execution of a computer program |
FR2851349A1 (fr) | 2003-02-17 | 2004-08-20 | St Microelectronics Sa | Procede de gestion d'une pile de microprocesseur pour la sauvegarde de donnees contextuelles |
US7278030B1 (en) * | 2003-03-03 | 2007-10-02 | Vmware, Inc. | Virtualization system for computers having multiple protection mechanisms |
US20050044292A1 (en) | 2003-08-19 | 2005-02-24 | Mckeen Francis X. | Method and apparatus to retain system control when a buffer overflow attack occurs |
US7424599B2 (en) | 2003-08-28 | 2008-09-09 | Mips Technologies, Inc. | Apparatus, method, and instruction for software management of multiple computational contexts in a multithreaded microprocessor |
DE10349200A1 (de) | 2003-10-23 | 2005-05-25 | Daimlerchrysler Ag | System und Verfahren zur Überwachung und Verwaltung prozessinterner Speicher einer Prozessausführungseinheit |
US20060277396A1 (en) * | 2005-06-06 | 2006-12-07 | Renno Erik K | Memory operations in microprocessors with multiple execution modes and register files |
US8312452B2 (en) * | 2005-06-30 | 2012-11-13 | Intel Corporation | Method and apparatus for a guest to access a privileged register |
US7844804B2 (en) | 2005-11-10 | 2010-11-30 | Qualcomm Incorporated | Expansion of a stacked register file using shadow registers |
JP4844102B2 (ja) | 2005-11-30 | 2011-12-28 | 富士ゼロックス株式会社 | サブプログラム及びそのサブプログラムを実行する情報処理装置 |
US7581089B1 (en) * | 2006-04-20 | 2009-08-25 | The United States Of America As Represented By The Director Of The National Security Agency | Method of protecting a computer stack |
EP2150889A1 (en) | 2007-04-10 | 2010-02-10 | Cambridge Consultants Limited | Data processing apparatus |
US8209757B1 (en) | 2008-03-06 | 2012-06-26 | Symantec Corporation | Direct call into system DLL detection system and method |
US8117660B2 (en) | 2008-06-19 | 2012-02-14 | Microsoft Corporation | Secure control flows by monitoring control transfers |
WO2010004243A2 (en) | 2008-07-10 | 2010-01-14 | Cambridge Consultants Limited | Interrupt processing |
US8578483B2 (en) * | 2008-07-31 | 2013-11-05 | Carnegie Mellon University | Systems and methods for preventing unauthorized modification of an operating system |
US7962729B2 (en) | 2009-01-05 | 2011-06-14 | International Business Machines Corporation | Dynamic runtime range checking of different types on a register using upper and lower bound value registers for the register |
US20110161592A1 (en) * | 2009-12-31 | 2011-06-30 | Nachimuthu Murugasamy K | Dynamic system reconfiguration |
US8392644B2 (en) * | 2010-07-30 | 2013-03-05 | Mips Technologies, Inc. | System and method for automatic hardware interrupt handling |
US20120236010A1 (en) | 2011-03-15 | 2012-09-20 | Boris Ginzburg | Page Fault Handling Mechanism |
US9633407B2 (en) | 2011-07-29 | 2017-04-25 | Intel Corporation | CPU/GPU synchronization mechanism |
WO2013101217A1 (en) * | 2011-12-30 | 2013-07-04 | Intel Corporation | Technology abstraction layer |
US9116711B2 (en) | 2012-02-08 | 2015-08-25 | Arm Limited | Exception handling in a data processing apparatus having a secure domain and a less secure domain |
CA2809516C (en) | 2013-03-13 | 2016-11-08 | Khalid Nawaf Alharbi | Preventing stack buffer overflow attacks |
WO2014151691A1 (en) * | 2013-03-15 | 2014-09-25 | Soft Machines, Inc. | Method and apparatus for guest return address stack emulation supporting speculation |
US9239801B2 (en) | 2013-06-05 | 2016-01-19 | Intel Corporation | Systems and methods for preventing unauthorized stack pivoting |
US9015835B2 (en) | 2013-06-23 | 2015-04-21 | Intel Corporation | Systems and methods for procedure return address verification |
JP5777843B1 (ja) | 2013-09-24 | 2015-09-09 | 株式会社 エーティーティーコンサルティング | プロセッサ、処理装置、プログラム作成方法 |
FR3013869B1 (fr) | 2013-11-22 | 2016-01-01 | Thales Sa | Procede de detection des debordements de pile et processeur pour la mise en oeuvre d'un tel procede |
US9703948B2 (en) | 2014-03-28 | 2017-07-11 | Intel Corporation | Return-target restrictive return from procedure instructions, processors, methods, and systems |
US9501637B2 (en) | 2014-09-26 | 2016-11-22 | Intel Corporation | Hardware shadow stack support for legacy guests |
US9767272B2 (en) | 2014-10-20 | 2017-09-19 | Intel Corporation | Attack Protection for valid gadget control transfers |
US20160179538A1 (en) | 2014-12-19 | 2016-06-23 | Intel Corporation | Method and apparatus for implementing and maintaining a stack of predicate values with stack synchronization instructions in an out of order hardware software co-designed processor |
US9477453B1 (en) | 2015-06-24 | 2016-10-25 | Intel Corporation | Technologies for shadow stack manipulation for binary translation systems |
US9817642B2 (en) | 2015-06-25 | 2017-11-14 | Intel Corporation | Apparatus and method for efficient call/return emulation using a dual return stack buffer |
US20160381050A1 (en) | 2015-06-26 | 2016-12-29 | Intel Corporation | Processors, methods, systems, and instructions to protect shadow stacks |
US9965619B2 (en) | 2015-07-13 | 2018-05-08 | Intel Corporation | Return address overflow buffer |
US20170090927A1 (en) | 2015-09-30 | 2017-03-30 | Paul Caprioli | Control transfer instructions indicating intent to call or return |
US10394556B2 (en) | 2015-12-20 | 2019-08-27 | Intel Corporation | Hardware apparatuses and methods to switch shadow stack pointers |
US9898351B2 (en) | 2015-12-24 | 2018-02-20 | Intel Corporation | Method and apparatus for user-level thread synchronization with a monitor and MWAIT architecture |
US10430580B2 (en) * | 2016-02-04 | 2019-10-01 | Intel Corporation | Processor extensions to protect stacks during ring transitions |
US10157277B2 (en) * | 2016-10-01 | 2018-12-18 | Intel Corporation | Technologies for object-oriented memory management with extended segmentation |
-
2016
- 2016-02-04 US US15/016,068 patent/US10430580B2/en active Active
-
2017
- 2017-01-06 CN CN201780005757.1A patent/CN108463826B/zh active Active
- 2017-01-06 DE DE112017000677.5T patent/DE112017000677T5/de active Pending
- 2017-01-06 WO PCT/US2017/012572 patent/WO2017136101A1/en active Application Filing
- 2017-01-06 CN CN202111138083.7A patent/CN113836523A/zh active Pending
- 2017-01-12 TW TW110145473A patent/TWI796031B/zh active
- 2017-01-12 TW TW110101138A patent/TWI749999B/zh active
- 2017-01-12 TW TW112105803A patent/TW202347151A/zh unknown
- 2017-01-12 TW TW106101043A patent/TWI715704B/zh active
-
2019
- 2019-09-27 US US16/585,373 patent/US11176243B2/en active Active
-
2021
- 2021-08-19 US US17/407,035 patent/US11762982B2/en active Active
-
2023
- 2023-08-10 US US18/232,810 patent/US20230401309A1/en active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101114207A (zh) * | 2007-08-03 | 2008-01-30 | 东南大学 | 一种实现片上影子堆栈存储器的方法及其电路 |
CN201060485Y (zh) * | 2007-08-03 | 2008-05-14 | 东南大学 | 一种实现片上影子堆栈存储器的电路 |
US20120036299A1 (en) * | 2008-08-26 | 2012-02-09 | Atmel Corporation | Secure Information Processing |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112580023A (zh) * | 2020-12-23 | 2021-03-30 | 海光信息技术股份有限公司 | 影子栈管理方法及装置、介质、设备 |
Also Published As
Publication number | Publication date |
---|---|
DE112017000677T5 (de) | 2018-10-18 |
CN113836523A (zh) | 2021-12-24 |
CN108463826B (zh) | 2022-08-09 |
TWI749999B (zh) | 2021-12-11 |
US11762982B2 (en) | 2023-09-19 |
TW202238423A (zh) | 2022-10-01 |
WO2017136101A1 (en) | 2017-08-10 |
US11176243B2 (en) | 2021-11-16 |
US20230401309A1 (en) | 2023-12-14 |
US10430580B2 (en) | 2019-10-01 |
US20210382987A1 (en) | 2021-12-09 |
TW201738800A (zh) | 2017-11-01 |
TW202347151A (zh) | 2023-12-01 |
TWI715704B (zh) | 2021-01-11 |
US20170228535A1 (en) | 2017-08-10 |
US20200089871A1 (en) | 2020-03-19 |
TW202127288A (zh) | 2021-07-16 |
TWI796031B (zh) | 2023-03-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108463826A (zh) | 用于在环转变期间保护栈的处理器扩展 | |
US11656805B2 (en) | Processors, methods, systems, and instructions to protect shadow stacks | |
CN104951697B (zh) | 来自过程指令的返回-目标限制性返回、处理器、方法及系统 | |
CN104954356B (zh) | 保护共享的互连以用于虚拟机 | |
CN105190572B (zh) | 用于防止未经授权的堆栈转移的系统和方法 | |
CN108268386A (zh) | 加速硬件中的存储器排序 | |
JP6006248B2 (ja) | 命令エミュレーションプロセッサ、方法、およびシステム | |
CN106663000B (zh) | 处理器和用于处理器中的中断处理的方法 | |
CN107851170A (zh) | 支持用于存储器地址范围的可配置安全级别 | |
CN108334400A (zh) | 为安全飞地管理存储器 | |
CN109643283A (zh) | 管理飞地存储器页 | |
CN110162380A (zh) | 用来防止软件侧通道的机制 | |
CN104969199A (zh) | 实施黑名单分页结构指示值的处理器、方法,以及系统 | |
KR102298403B1 (ko) | 제어 전송 인스트럭션으로의 리턴 | |
CN109690546A (zh) | 支持对客户机飞地存储器页的超额订阅 | |
CN103270489B (zh) | 用于进行段寄存器读和写而不管特权等级的系统、装置和方法 | |
CN107924442A (zh) | 用于轻量级虚拟化上下文的方法和设备 | |
CN108369508A (zh) | 使用处理器指令前缀的二进制转换支持 | |
US11656873B2 (en) | Shadow stack ISA extensions to support fast return and event delivery (FRED) architecture |
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 |