CN108780425A - 受保护指针 - Google Patents

受保护指针 Download PDF

Info

Publication number
CN108780425A
CN108780425A CN201780016468.1A CN201780016468A CN108780425A CN 108780425 A CN108780425 A CN 108780425A CN 201780016468 A CN201780016468 A CN 201780016468A CN 108780425 A CN108780425 A CN 108780425A
Authority
CN
China
Prior art keywords
pointer
protected
allocation identification
cache
unique
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201780016468.1A
Other languages
English (en)
Other versions
CN108780425B (zh
Inventor
J·V·塞尔
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.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
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 Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN108780425A publication Critical patent/CN108780425A/zh
Application granted granted Critical
Publication of CN108780425B publication Critical patent/CN108780425B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1483Protection against unauthorised use of memory or access to memory by checking the subject access rights using an access-table, e.g. matrix or list
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0864Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • G06F12/1441Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/152Virtualized environment, e.g. logically partitioned system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6032Way prediction in set-associative cache

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Mathematical Physics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Storage Device Security (AREA)

Abstract

一种数据处理机器被配置成自动地保持跟踪指向存储器的相应且新分配的区域的管理程序给定指针并且自动地保持跟踪该给定指针的对应副本或派生物。为每个新分配的区域生成唯一分配标识符。分配标识符被附加到有效ID的保持列表。指向已分配区域的所有指针都由受保护指针跟踪表来跟踪。附加地,多输入关联高速缓存储存受保护指针中的被最近使用的指针的条目,其中该条目包括指针的相应分配标识符。指向给定的、被取消分配的区域的所有指针可通过从多输入关联高速缓存中删除它们的条目并通过从有效ID的保持列表中删除对应的唯一分配标识符来被无效。

Description

受保护指针
背景
用于数字计算机系统的代码安全化和代码确认/验证由于复杂数据处理系统中存在可用于恶意攻击或无意差错的众多途径的原因正变得越来越重要。恶意攻击的示例包括基于软件病毒、蠕虫和木马感染的那些恶意攻击以及基于漏洞利用的那些恶意攻击。攻击也可直接来自计算机系统的不诚实但经授权的用户。攻击可试图修改可执行程序代码或利用留下的程序代码和地址指针或试图修改关键信息数据项或注入新的未经授权的程序代码或试图获得对优选地被保持专用的关键信息数据片段的访问权。代码开发期间的无意失误可能产生类似的错误和故障。应用无法完成垃圾收集规程可创建弱点。用于防止此类错误和故障的措施相应地变得越来越重要。
概述
根据本公开的一个非限制性方面,操作系统(OS)将虚拟存储器空间区域动态分配给空间请求应用程序包括通过使用被相应地分配给空间(例如,该存储器空间区域通过第一实例指针来被指向)的每个动态分配的唯一分配标识符来将一个或多个第一实例指针返回至该被分配区域以及跟踪经返回的(诸)指针及其副本(其第二实例)。更具体而言,应用对该一个或多个经返回的指针(第一实例指针)的值的每次复制通过使用相应的唯一分配标识符而在跟踪机制(例如,指针散列表)中被跟踪,使得每个指针的所有副本(该第一和第二实例)可针对持续的有效性和/或边界违规被测试,并且使得这些指针中的每一者的所有副本(该第一和第二实例)可以在相应的所指向的区域被取消分配时或在应用程序终止时或之后被快速地无效。说得再具体一些,在一个实施例中,使指向存储器空间的被取消分配(被释放的)的区域的所有指针无效包括从第一表(ID的保持表或列表)中删除其唯一分配标识符以及从高速多输入关联高速缓存中删除与该唯一分配标识符相关联的所有条目。使指向该被取消分配(被释放的)的区域的所有指针无效不要求对这些指针的检查或对相应的指针跟踪机制(例如,包含关于给定指针的所有副本的信息的指针散列表)的检查。根据一个实施例,新固件操作码被添加到数据处理电路(例如,主微处理器)的操作码调色板(palette)中,以用于为每个新分配的区域自动地生成唯一分配标识符,以及用于自动地测试指针的持续有效性和用于自动地使与该唯一分配标识符相关联的所有指针无效。
根据一个实施例,多输入关联硬件高速缓存被包括在数据处理电路(例如,微处理器)的硬件资源调色板之中,以用于自动且快速地确定指针的持续有效性、用于任选地取回它们的边界约束以及用于允许从高速缓存中快速删除与给定的分配标识符相关联的指针值的所有实例。提供了一种用于管理指向数据处理系统的存储器空间的被分配部分的指针的机器实现的方法,其中该方法包括:(a)将各自指向存储器空间中的被分配区域的多个指针中的每一者与被分配给该被分配区域的对应且唯一的分配标识符相关联;(b)在多输入关联高速缓存中储存该多个指针的至少一子集的相关联的数据,这些指针的至少该子集中的每个相应一者的所储存的相关联的数据可标识地将相应指针与该唯一分配标识符相关联;以及(c)使用该唯一分配标识符或其散列来确定该多个指针中的一者或多者的相关联的数据是否存在于该多输入关联高速缓存中。
提供本概述以便以简化的形式介绍概念的选集;其概念和实现将在以下的详细描述中作进一步描述。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于表征或限制所要求保护主题的范围。
附图简述
图1A是描绘在计算环境的可分配虚拟存储器空间中执行应用程序的安装和运行时阶段的示意图。
图1B是用于与图1A并排比较且用于解释数据处理系统可如何被修改以实现本公开的一个或多个受保护指针方面而被提供的示意图。
图2是描绘可出于实现这些受保护指针方面的目的而根据本公开来被创建和维护的三个存储器区域的示意图。
图3是描绘其中在使用本公开的一个或多个受保护指针方面的在其中操作系统(OS)请求从管理程序分配附加虚拟存储器空间的过程的流程图。
图4是描绘用于复制受保护指针的操作码的流程图。
图5是描绘用于检查受保护指针的有效性且任选地检查对边界限制的遵从性的操作码的流程图。
图6是描绘用于删除指针副本的过程的流程图。
图7解说了可在其中实现图1-6中的任何一个的示例和实现以及任何替换方案的合适计算和联网环境的示例。
详细描述
此处所公开的技术的各实施例依赖于对可能原本更易于受到多种恶意攻击和无意设计和开发错误(故障)影响的计算机或其他数据处理系统中的代码安全化和/或代码确认/验证的硬件和/或固件支持。具体而言,在一个实施例中,附加固件和/或硬件被添加到数据处理机(例如,包括片上系统(SoC)的数据处理机)的本地资源集,以用于自动地验证指向虚拟存储器空间的被分配部分的OS分配的指针的持续有效性。附加固件和/或硬件可包括被添加到数据处理电路(例如,本地SoC中的主处理器)的操作码调色板中的新固件操作码。该新固件操作码可包括第一新固件操作码,以用于为虚拟存储器空间中的每个新分配的区域(该新分配的区域由指向该区域的对应的新发布的指针(第一实例指针)来指向)自动地生成和储存唯一分配标识符。该新固件操作码可进一步包括第二新固件操作码,以用于自动地将每个新分配区域的唯一分配标识符及其新发布的指针(第一实例指针)不单单与该第一实例相关联,而且还与第一实例指针的所有副本和派生物(第二实例指针)相关联。该新固件操作码还可进一步包括第三新固件操作码,以用于自动且快速地测试指向存储器空间的该被分配区域的指针中的每一者的持续有效性。它们可进一步包括第四操作码,以用于在分配请求应用不再需要已分配区域且后者区域可接着被取消分配并被返回到操作系统(OS)的空闲空间列表时自动地使与该唯一分配标识符相关联的所有指针无效。附加固件和/或硬件可包括数据处理电路(例如,SoC)的硬件资源调色板之中的多输入关联高速缓存,其中该多输入高速缓存的第一关联输入端口能用于自动地访问与给定分配标识符相关联的所有高速缓存内条目(例如,出于删除这些条目的目的),而第二关联输入端口能用于快速地确定特定指针的持续有效性(例如,在一个实施例中,特定指针的有效性仅通过针对该特定指针的一个或多个唯一属性的高速缓存关联命中(例如,该指针被储存的位置)来被确定),并且任选地,该第二关联输入端口能用于取回特定指针的相应边界约束。
要理解,如本文所使用的,术语“硬件”、“固件”和“软件”并不指代抽象事物而是指代物理上真实的现象,它们消耗物理空间并且在操作使用中时消耗物理能量,诸如以电子和光子中的至少一者四处移动以藉此定义对应的且物理上真实的信号的形式。对术语“虚拟的”的使用并不破坏提供上层虚拟化的底层现象(例如,有用机器、进程、制造或对其的改进)的物理性。硬件的示例包括被配置成提供输入/输出数据变换或者储存能检索的数据和顺序状态机的布尔逻辑电路、计数器、寄存器、存储器单元。固件的示例包括被储存在顺序状态机的控制存储器中且被配置成控制该机器的操作的物理信号。软件的示例包括被储存在数据处理机器的主存储器中且被配置成控制该数据处理机器的操作的物理信号。使用诸如“软件”、“固件”、“虚拟”等之类的术语的所附权利要求书并不排除他人构想、说出、或类似地非有用地使用抽象概念、自然法则或自然发生的现象。当处于活跃(例如,正在执行的)操作模式中时,“软件”实体,无论是应用程序/线程/进程、虚拟机、操作系统(OS)、管理程序还是类似物,均被理解为构成正在一个或多个现实物理机器中执行的正在进行的物理进程,其中作为正在其中被执行的所述物理正在进行的进程的结果,机器每单位时间在熵方面消耗电功率和/或其他形式的现实能量。当处于静态(例如,非正在执行)模式中时,经实例化的“软件”实体或类似物被理解为被具体化为以更隐晦的瞬态方式被保留在一个或多个物理存储器设备中的经变形的物理物质的基本上唯一且功能上可用的模式,以便它能够在功能上且协作地与软件和/或固件可指令机器交互,这与仅仅是描述性且非功能性物质相反,其中该一个或多个物理存储器设备包括但不限于,利用静电效应、磁效应、相位改变效应、光学效应或者这些或其他能检测到的物理区别形式的各种组合中的至少一者以表示所储存的数据的存储器设备。
而且,如本文中所使用的,术语“用信号指示”、“传送”、“通知”、“指示”、“逻辑链接”等并不意味着单纯非物理和抽象事件,而是相反意味着物理且非隐晦地瞬态事件,其中前者的物理事件是能够通过现代科学技术来验证其存在性的物理事件。使用上述术语“用信号指示”、“传送”、“通知”、“指示”、“逻辑链接”等或其等效物的所附权利要求书并不排除他人构想、说出、或类似地以非有用方式使用抽象概念、自然法则或自然发生的现象。
本领域技术人员可以领会,经排序的术语序列:硬件、固件和软件指示;基于这些术语的历史开发,越来越容易修改的各组物理上现实的现象,其中硬件在表面上较难修改(例如,在历史上通过使用焊铁)而软件在表面上较易修改(例如,在历史上通过使用穿孔计算机卡),其中固件在表面上植根于该范围中间。然而,尽管如此,可以领会,在现代复杂数据处理系统中,难以容易修改的范围有时候取决于上下文可以被反转,其中由于软件的现代复杂性软件是最难以在没有错误的情况下进行修改的,而硬件在被暴露的情况下较易修改(例如,如果没有固定地装入封装中,诸如用于密闭地封闭在一个或多个单片集成电路(也称为芯片)中)。
参考图1A,示出了描绘用于加载、链接和启动用户应用140以及用于响应于该应用可发送到对应客OS 122的对分配的请求143(在框140内部被示为伪代码)而动态地将虚拟存储器空间153分配给该应用的过程和相关联的固件/硬件资源100这两者的示意图。
如本文所使用的,术语“应用”或“应用软件”要被理解为具有类似于如例如在虚拟化机器环境中被执行的软件“进程”和/或软件“线程”的含义,后者暗示物理硬件资源在时间复用以及上下文交换的基础上是共享的,以使得表现为就像是许多应用、进程、线程或类似命名的已编程可执行序列在同时进行操作一样,可能在时间共享的基础上同时在不同的虚拟机上运行和/或可能同时使用有限大小的高速物理存储器空间(例如,SRAM、高速缓存)。术语应用、应用程序或用户应用将在本文中被用来表示从应用监管OS的角度来看具有相对较低的执行和数据访问特权的已编程可执行序列。操作系统(OS)以及其预定义库进程中的一些被理解为从OS的角度来看具有较高的执行和数据访问特权。要理解,较高的执行和数据访问特权可以根据被称为管理程序软件(图1A中的HV 120)以及根据SoC内数据处理单元118(其中SoC表示片上系统并且其中密闭地封装的一个此类单元在图1A中的118处被示意性地描绘)的数据处理器控制微代码(118b)。还要理解,操作系统(OS)的各个部分(诸如其库例程(被加载和链接的应用可操作地链接到的))可以被认为是在OS的其他部分的监管之下执行的应用、进程或线程。一些OS例程可具有相比其他OS例程更高的R/W(读/写)和/或X/NX(可执行/不可执行)访问特权。
仍然参考图1A且出于以上内容的考虑,现在将注意力导向该附图的硬件资源部分。该附图示出了具有各种形式的系统存储器(例如,主存储器116a、116b)的硬件平台110,所述系统存储器包括被配置成支持相应主机管理程序120和在该管理程序下运行的客OS122的可扩展存储器(例如,116c、116d)。虽然未被示出,但是在一些替代实施例中,可附加地存在客虚拟机(客VM),该客VM例如被配置成执行预定的一组操作码,诸如JavaTM字节操作码。管理程序120可向操作系统(OS)122提供对统一虚拟存储器空间124的部分或全部的访问,在一个实施例中,该统一虚拟存储器空间124能被在OS 122下运行的所有应用共享。然而,OS 122可选择初始地将OS可分配存储器空间124的仅一小部分分配给经加载的、链接的但尚未运行的第一应用140,可能保留该统一虚拟存储器空间124的一些仅供特权OS库例程(未被显式地示出)使用,且保留一些其他部分(例如153)作为仍然“空闲的”空间以供将来在按需的基础之上进行分配。
应用140的启动致使顶层操作系统122执行某些操作,包括分配虚拟存储器的静态和/或动态区域以供被启动的应用140使用,将已分配的区域中的一者或多者指派为有特权或没特权(从OS的角度来看),以及将访问许可附加到已分配区域,例如,以读和写许可(数据加载和存储许可,也被表示为R/W许可)以及可执行对不可执行(X/NX)许可的形式。启动OS 122被耦合到管理程序120,其中后者被任命为创建客OS地址到物理地址(GpA/PA)的转换表(未示出)的特权软件。更精确来说,OS 122负责生成一个或多个更高层次的转换,被称为虚拟地址(VA)到客“物理”地址(GpA)的转换表。GpA并非现实的物理地址,而只是从OS的角度来看表现为如此。管理程序120负责生成较深阶段(在层次上更往下的)转换表,被称为客“物理”地址(GpA)到现实物理地址的转换表。当要确定给定虚拟地址(VA)的现实物理地址(PA)时,可以执行被称为查走(walking)VA/GpA/PA分层表格的过程。然而,该VA/GpA/PA表格查走操作可消耗相对大量的时间和/或消耗相当大量的系统资源。管理程序120和操作系统(OS)122两者都由在SoC 118内部提供的一个或多个主处理器(例如,核心处理器)内执行的可执行代码构成。虽然未被示出,但是SoC 118可具有附加的补充处理器,诸如提供高速数学计算、视频信号处理功能等的专用功能处理器。
为了加速虚拟地址(VA)到物理地址(PA)的转换,提供了被称为转换后备(lookaside)缓冲器(TLB)115的硬件机制。TLB是高速关联高速缓存存储器的一种形式。转换中的已经被VA/GpA/PA表查走操作确定过一次的被较频繁需要的转换在TLB 115中与由OS 122和/或由管理程序120提供的对应的R/W和X/NX许可一起被高速缓存为直接VA/PA地址转换。在一个实施例中,OS和管理程序R/W和X/NX许可的并集中的最大限制的许可(R/W、X/NX最大R个许可)被高速缓存在TLB中。如果即刻需要的VA/PA转换没有被发现已经被高速缓存在TLB中,则管理程序120被调用以执行较慢的查走遍历和搜索遍历多级VA/GpA/PA转换表(未示出)以查找提供所需VA/PA转换的组合。在一个实施例中,输出PA各自是4千字节存储器页的地址而非针对代码或信息数据的专门所需项的一个地址,并且偏移(和任选的索引)被添加到物理页地址(PpgA)以访问代码或数据的期望项。TLB硬件115的输出被称为TLB有效载荷。响应于TLB 115的输出或者管理程序120的输出而生成的物理地址和对应读/写信号被供应到置于容纳被称为片上系统(SoC)的单片集成电路封装118内的高速存储器高速缓存(例如,SRAM)118a或者被供应到片外主存储器116,其中后者主存储器通常被实现为DRAM(动态随机存取存储器,116b)但也可包括SRAM(静态随机存储存储器116a)和非易失性闪存(116c)。被储存在SoC封装118内的数据通常以非加密形式(明文形式)被储存。被储存在较慢存储器116(诸如片外盘存储器(例如,磁盘116d或SSD 116c))中的数据可以以加密形式被储存。合适的解密和重新加密硬件机制(118h、118g)可被用于在按需的基础之上将所储存的数据从加密形式转换为明文形式。被频繁用于当前操作的代码和数据在管理程序120的监管之下被交换进入片内高速缓存118a。不再被当前操作频繁需要的代码和数据被交换出片内高速缓存118a并且被储存在较慢的片外存储器空间(例如,116b、116d)中。管理程序120自动地负责关于哪些数据块(例如,4千字节页)被储存在高速缓存118a中或主存储器116a/116b中或较慢/较大形式的存储器(诸如磁盘116d或固态硬盘(SSD 116c))中的记账。管理程序(HV)和操作系统(OS)中的一者或两者可自动地负责关于哪些盘上数据块被储存为加密数据而哪些被储存为明文数据的记账。
除了其板载高速缓存存储器118a之外,SoC封装118容纳一个或多个数据处理单元,诸如在此处被共同表示为主uP 118p的微处理器核。应当理解,SoC封装118可包括用于储存微代码的专用存储器单元118b,该微代码在执行相应的操作码操作时由片内主数据处理单元(uP)118p执行。该一个或多个专用存储器单元不能由正在执行的用户软件(例如,应用140)访问或甚至不能由平台主存的操作系统122访问。如本领域技术人员将领会的,经编译的用户软件(例如,应用140)通常致使操作码和/或以操作码为目标的数据被供应到SoC内的uP 118p并且接着该uP利用仅它们能够访问的微代码来对寄存器数据和/或主存储器数据进行操作。在一个实施例中,uP使用的寄存器各自是64位宽。在一个实施例中,那些位中仅较低的48位被用于物理寻址,而较高的16位可以被用于其他功能。在一个实施例中,SoC内的uP 118p的寄存器包括程序计数器118c、累加器、堆栈指针顶部、基地址提供寄存器、以及偏移提供寄存器等(其中后者寄存器累计表示为118d)。通常,在虚拟化机器环境中,OS 122和用户应用140将不会尝试直接访问基硬件寄存器(例如,物理程序计数器、堆栈指针的物理顶部等),尽管它们可以(除了被保留以仅供管理程序120访问的少数寄存器之外)。相反,它们更通常将在时间复用的基础上使用管理程序120提供的虚拟化机器资源。
除了所解说的SoC内的主数据处理单元(uP)118p之外,应用主存平台110可包括一个或多个专用数据处理单元(未示出),其可以在SoC封装118的外部和/或内部并且提供诸如视频或其他图形数据处理(例如,GPU)、音频数据处理、高速并行数学处理(MPU)(诸如3D向量处理)、存储器管理处理(MMU)等专用功能。补充数据处理单元可被可操作地耦合到主uP 118p。主存储器116a/116b和/或较慢/较大存储器单元116c/116d可被操作系统122或受应用程序140命令,以执行针对对应存储器单元116a/116b和/或116c/116d中的预定区域的各种数据加载和数据存储操作。根据本公开的一个方面,诸如专用数据处理单元(未示出)之类的补充数据处理设备可以在它们好像仅仅是存储器访问应用程序、进程、线程等的一个上下文中被处理,并因此专用数据处理单元(未示出)可以以类似于以下的方式来发出对指向对应的动态分配的存储器区域的返回指针(Ptr)的表条目的请求并被授予所述返回指针的表条目:应用可如何发出对所发布的指针(例如,根据本公开的受保护指针或PPtr)和对应的动态分配的存储器区域的的表条目的请求并被授予该所发布的指针和该对应的动态分配的存储器区域的表条目。
如图1A的伪源编码部分(例如141)中所指示,示例性应用程序140的初始预处理编码(源级编码)被细分成多个软件区段,包括预处理声明区段141、主程序或顶层程序区段142以及一个或多个辅助程序或子例程149区段。为了说明性示例起见,主程序区段142被示为包括针对操作系统(OS)且请求向其动态分配虚拟存储器空间的更多部分的第一指令143(伪代码指令),即使预处理声明区段141已获得了相应量的静态分配(例如,用于储存静态可执行代码和/或静态信息数据项,包括例如去往各种OS库例程的静态解析的链接)。主程序区段142被示为进一步包括第二指令144和第三指令145,该第二指令144将由OS给予它的指针(GivenPointer(给定指针)或第一实例指针)的副本推送到堆栈(150,该堆栈位于统一虚拟存储器空间124内)上,该第三指令145调用子例程(例如,SubRt2()),该子例程将使用指针的所推送的副本(第二实例指针)来访问曾响应于第一指令143的动态分配请求而由OS122分配的(统一虚拟存储器空间124内部的)虚拟存储器空间的新分配区域153内的可执行代码和/或信息数据项。
放大镜151更详细地示出了堆叠150的一部分。在放大视图中,白色填充箭头指向取决于相应数据项的数据类型从这些起始位置延伸到合适的结束位置(未示出)的数据项的相应起始位置(虚拟地址或简称VA)。第一虚拟地址VA1.0是在执行请求第一指令143的分配之前堆栈顶部寄存器(由应用141使用的虚拟堆栈指针寄存器,该虚拟堆栈指针未被显式地示出)所指向的地方。在较高的虚拟地址VA1.1处,包含了逻辑上被表示为Master_GivenPtr(主_给定Ptr)(此处也被称为第一实例指针)并且其值表示第二虚拟地址VA2的代码值,该后者虚拟地址是新分配区域153的起始位置。第三虚拟地址VA3是新分配区域153结束的地方。虽然未被示出,但是该第三虚拟地址VA3也可被储存在靠近OS生成的Master_GivenPtr的位置的堆栈150上。(如下文中将变得显而易见的,所谓的对新的且动态地分配的区域153内的特定可执行代码和/或信息数据项的非引用访问应该保持在由该第二和第三虚拟地址VA2和VA3建立的边界之间)。
在虚拟地址位置VA1.1之上并且在堆栈150内,包含了被放置在堆栈位置VA1.2处且指向另一虚拟地址(例如,另外的指令146的起始)的逻辑上被表示为返回地址的代码值,这是一个在可执行控制在子例程SubRt2(149)完成执行之后要被返回的应用141的初始分配的空间内的位置。然而,其他被推送到堆栈上的数据可驻留在起始于堆栈150的VA1.3的位置处。在该示例中,调用主例程142已将Master_GivenPtr(被储存在VA1.1处的指针)的“副本”(此处也被称为第二实例指针)推送到堆栈150的位置VA1.4中,其中应当理解,所调用的子例程(SubRt2 149)将根据预定协议使用该被储存的值(Copy(副本)_of_GivenPtr)来引用新分配区域153的起始VA2,并且接着将通常将偏移地址量和索引值添加到起始值VA2,以访问新分配区域153内部的可执行代码或信息数据项的特定片段。虽然位置VA1.4处的条目被表示为Master_GivenPtr的“副本”,但是应当理解,在自行决定的情况下应用140(指令144处)可能已经使用了稍微偏离原始Master_GivenPtr的第二实例指针的值。通常,良好的编程实践提倡使用Master_GivenPtr的精确副本,但这并不一定总是发生。此处所公开的受保护指针(PPtr)方案即使在Master_GivenPtr的不完全相同的“副本”被推送到堆栈上时也是可操作的,其中该不完全相同的“副本”被从Master_GivenPtr导出并且基本上指向相同的被分配的存储器区域153,然而是通过例如将预定偏移和索引中的至少一者添加到Master_GivenPtr的值实现的。
如本领域技术人员可以领会的,为何根据良好的编程实践主例程142将Master_GivenPtr(被储存在VA1.1处的指针)的“副本”(Copy_of_GivenPtr)推送到堆栈150的位置VA1.4中而不是将原始Master_GivenPtr(第一实例指针)移动到位置VA1.4的一个原因是因为子例程调用操作及对应的返回操作通常例如用被返回的数据来盖写它们的堆栈部分,且因此如果Master_GivenPtr(被储存在VA1.1处的指针)被移动而不是被复制到堆栈位置VA1.4中,则其可能被不合需地销毁。虽然所解说的示例示出了仅一个副本(VA1.4处的Copy_of_GivenPtr)在堆栈上的创建,但是实践中许多这样的副本(例如,数十或数百个)通常被推送到堆栈上,因为一个子例程调用下一个,依此类推。相应地,对于多个子例程调用的给定分层结构(一个调用下一个),可存在从Master_GivenPtr(被储存在VA1.1中的指针)导出并且还在各个时间点以及在堆栈150的上下各个位置处被储存在堆栈上的许多副本(第二实例指针)。
由于黑客们已知应用经常将主指针的许多副本推送到堆栈上,因此可存在各种形式的黑客代码(例如,特洛伊木马代码、嗅探器代码)170被嵌入在系统中。因为黑客代码可认识到一个或多个Master_GivenPtr(例如,被储存在VA1.1中的指针)的多个副本可以在堆栈区域(例如,150)中被创建的事实,所以此类黑客代码170(此处也被称为嗅探器代码170)出于使用Master_GivenPtr的代码值或其导出的“副本”的目的可着手嗅探此类副本(例如,VA1.4处的Copy_of_GivenPtr)的堆叠上重复模式,以由此定位新分配区域153,并接着在那里嗅探(“摸底调查(fishing expedition)”时),从而查找专用代码片段及相关联的数据,例如查找将能够挖掘被储存在位置VAd处的用户密码的代码。系统的统一App的/OS空间通常是天文数字般地大的(例如,字节的2到64乘幂),且因此嗅探器代码170不可能仅仅基于对从何处开始查找的随机猜测来找到它正查找的事物。然而,对嗅探器代码170而言成功的概率可在以下情况下极大地增加:嗅探器代码170定位到被遗漏但是可用的、可执行代码(该代码本身引用先前有效的指针值(例如,VA1.4处的Copy_of_GivenPtr)或者调用引用先前有效的指针值的另一例程),并且嗅探器代码170接着使用这些代码(例如,调用更深的子例程的例程)中的一者或多者以执行取决于被遗漏的指针的使用且可在嗅探器代码170的摸底调查方面帮助嗅探器代码170的功能。因此,期望最小化在其内被遗漏但可用的、可执行代码(应当限于仅访问指向仍被分配的区域的指针值的代码)可被采用以在嗅探器代码170的摸底调查方面帮助嗅探器代码170的时间范围。(更具体而言,如果将被使用的指针中的一者或多者被预先“无效”,则当检查预先被无效的(诸)指针的有效性时被遗漏的可执行代码应该失败/停止,并且嗅探器代码170将在其摸底调查的这个方面失败。此处所解决的一个问题是如何有效地、快速地和肯定地“无效”指向存储器空间的被取消分配的区域的所有第一和第二实例指针。)
出于以上内容的考虑,编写良好的/行为良好的应用(例如,140)通常包括用于在该应用使用它的被分配的空间(例如,153)被完成时与虚拟存储器空间124的合宜的偏离的代码(例如,指令147和148)。一个这样的指令147可向操作系统(OS)122传递动态分配的区域(例如,153)的标识符(例如,VA2、VA3),并且要求OS对存储器空间的该区域取消分配。换言之,将它再次重新指派为属于空闲空间。另一这样的指令148可清除堆栈150中的应用知道在请求和使用动态分配的区域(例如,153)时它使用过的部分(例如,VA1.1至VA1.4)。因此,Master_Given指针(如被储存在VA1.1处的指针)及其副本(第二实例指针)应当被从堆栈(或其他地方)擦除,并且不应再被遗漏以供由诸如170处所表示的黑客代码嗅探出。最后,在应用140完成清除它负责已为它自己创建了的所有已分配的虚拟存储器空间之后,终止应用140可要求OS释放(取消分配并返回到空闲空间列表)OS响应于诸如示例性指令141的指示之类的预处理分配指示而创建了的静态分配的存储器区域140。在该时点,行为良好的应用140应当已经清除了它后面的可能由黑客代码(例如,170)以其他方式利用的所有足迹。
然而,尽管有最好的意图,但是(并且仅作为一个示例)在给定应用(例如,140)将执行其合宜的终止代码(例如,147、148)并清除其所有足迹之前,意外终止可对其发生。例如,在由省略号146表示的中间代码的执行期间,应用可能遇到意外的错误条件,针对该错误条件,应用的程序员忘记包括合宜的退出,抑或针对该错误条件,操作系统(OS)和/或系统硬件和/或固件(例如,118b)迫使不合宜的退出。在该情形中,指向应用所请求的动态分配的区域(例如,153)的一个或多个指针可被遗留在虚拟存储器空间中,更具体而言,被遗留在堆栈的包括第一和/或第二实例指针的被对应地利用的区域(例如,VA1.1-VA1.4)的一者或多者中,并且这些堆栈位置或重新使用这些堆栈位置的可执行代码可被黑客的嗅探代码170利用。在给定示例中,在170处,嗅探器代码(名为Main2的应用)可在统一且因此普遍可达到的虚拟存储器空间124中查找指示该区域已被相应应用(例如,140)用作堆栈150的数据模式。例如,可能存在对某些OS库例程的指示性(telltale)调用,这些调用已知由某些类型的应用(例如,web浏览器)作出。一旦堆栈被找到,嗅探器170就可开始在堆栈中上下查走,从而查找主指针(在位置VA1.1中)和该指针的同值副本(在位置VA1.4中),其中两个指针都指向代表被不合宜地终止的应用程序所创建的动态分配的区域153。一旦该相关联的区域(例如,153)被找到,其就可被查走遍历,从而查找指示嗅探器170可抓取(由数据抓取操作DATAr04表示)其副本的并且可传送回远程位置(例如,联网服务器)的可执行代码和/或信息数据项(例如,用户密码)的已知模式。在该时点,各种安全措施可被破坏,其中如以上所看到的,该破坏起始于系统未能停用指向动态分配的区域(例如,153)的所有指针及其副本(第一和第二实例指针)。应当理解,以上仅仅是示例,并且许多其他路径可用于对尚未被适当地无效或擦除或盖写的指针的利用。另一可能的示例是第一程序作出致使空间被分配并随后被取消分配的调用,但是由于OS(例如,OS库函数)、管理程序和/或其他应用或子例程中的错误,给定的指针(和/或副本、其派生物)并未全部被完全地清除,并且黑客代码的后续调用可能导致旧指针(应当已被清除的指针)被用于不正当目的。
虽然图1A示出了仅一个Master_Given指针(如被储存在VA1.1处的指针)和仅一个副本(如被储存在VA1.4处的指针)的创建,但是通常在复杂应用程序的执行期间,当对动态分配的区域(例如,153)的请求被作出时,并且当对动态分配的区域(例如,153)的引用被储存在虚拟存储器空间的各个部分中并且其中对应的指针(例如,堆栈位置VA1.1和VA1.4处的那些指针)出于某个或其他原因而未被适当地无效、停用或擦除时,主指针的创建和复制可能发生数百或数千次。当不合宜的应用终止发生时,定位到所有OS给定指针(例如,被储存在VA1.1中的Master_GivenPtr)及其所有应用生成的副本(例如,被储存在VA1.4中的Copy_of_GivenPtr)及其派生物(例如,GivenPtr和偏移或索引的总和)就变得很困难,并且如果在诸如170之类的嗅探器程序有机会将它们嗅出并使用它们之前没有从存储器中将它们全部擦除,则很难至少使它们无效。这对于管理数十个或更多个应用和/或其推测性预提交线程的OS而言尤其如此,其中每一者均可重复地为其自身请求虚拟存储器区域的动态分配。在下文中,公开了一种自动化方法,该自动化方法有助于自动跟踪所生成的OS给定指针(例如,被储存在VA1.1中的Master_GivenPtr)及其所有应用生成的副本(例如,被储存在VA1.4中的Copy_of_GivenPtr)及其派生物,使得它们即使在不合宜的应用终止的情形中也可全部被OS容易且快速地无效,并且还使得应用生成的副本/派生物的持续有效性可在应用的执行期间被快速地测试。在探究这样的方法的细节之前,此处绕道来解释这可发生在其中的环境。
以概览的更高级别来看,图1A描绘了现代软件开发和执行环境100的一部分,该开发和执行环境用于开发(编码、测试、修改和再测试)应用程序(例如,140)且随后在基于例如x86、ARM、或另一此类架构的硬件平台上将其现场(在开发实验室外部)执行的应用程序(例如,140),并且该应用程序提供一个或多个相对复杂的数据处理单元(例如,主CPU、多核、微控制器、GPU、片上系统SoC单元)以及相关联级别的存储器(例如,高速缓存、SRAM、DRAM、固态硬盘(SSD))和相关联的网络通信能力(例如,以太网、USB、火线、WiFi等)。各种不重要的支持结构(诸如电源、线缆、连结器、无线收发机等等)可存在但是未在图1A中示出以避免不必要的混乱,由此相关领域的技术人员能够很好地理解。
现在将从安全性视角并且仍然参考图1A来描述上电或引导规程。对角箭头符号105指示引导和激活的优选序列。首先,硬件平台110在自确认模式中被启动。该过程可包括执行确认板载硬件资源的可操作性的基础系统完整性校验(BIOS),该板载硬件资源诸如物理存储器单元116(SoC外部的存储器单元)和物理数据处理单元(诸如118p(例如,SoC内部的处理单元))以及物理通信资源(诸如联网输入/输出单元160)。在硬件平台110的自确认引导(105)中的早期,板载安全处理器111被激活以确认平台的各个硬件单元内部的固件(例如,微代码118b、加密/解密功能118g/118h),包括在其数据处理单元118p及其通信单元160内部的固件。该自确认过程中包括确认平台110的所安装的管理程序单元120内部的软件以及确认例如在板载数据处理单元118p的密闭地封闭封装118内部提供的微代码118b。所确认的微代码可替代地或附加地被储存在系统存储器的专用“被埋藏的”元数据存储器空间区域内部,其中“被埋藏的”存储器空间区域通常无法被用户软件访问或者甚至无法被客操作系统(OS)122访问。如本领域技术人员将领会的,系统管理程序单元120被用于虚拟化系统的一个或多个操作。安全处理器111使用内置且软件可访问的散列发生器112以形成来自存在于正被确认的单元(例如,114、118、160)内部的代码流的散列序列。这些散列序列被片内加密器113自动加密并且被自动传送到外部确认单元(未示出),该外部确认单元自动返回经数字签名的证书以确认(证实)安全处理器111所测试的单元的可信度。此类信任确认的一种形式被称为远程证实。在所解说的实施例中,板载数据处理单元118p具有用于使片上高速缓存存储器118a或片上微代码存储区域118b和/或其他片上资源118d中保持的任何明文代码保持安全的它们自己的加密和解密硬件和/或固件118g/118h,其中因而被封装的(包含在芯片内部的)代码在被交换出较少封装的存储单元116之前总是被重新加密(118g)。在一个实施例中,片上微代码118b可以控制用于访问其他片内数据的特权的分配,片内数据包括高速缓存118a中的数据以及其他片上资源118d中的数据。在一个实施例中,片上微代码118b可被修改以支持本文中所公开的受保护指针(PPtr)方案的一个或多个方面。更具体而言,在一个实施例中,指派唯一分配ID并将它们附加到主ID的保持表(例如,250)的新操作码的功能(其将新指针输入到指针跟踪表(例如,255)中、维护多输入关联高速缓存(例如,214)的条目,以及对给定分配ID及所有的它的受保护指针的无效进行处置)主要用高速硬件而不是用较慢速的微代码或更加慢速的通用软件(例如,汇编语言级)来实现。另一方面,特殊表(例如,250、255)的初始设置可以用较慢速的微代码/固件或更加慢速的通用软件来执行。
出于完整性考虑,现在提供对所讨论的硬件平台单元114、116和118内部的一些其他组件的更详细的描述。可以是多核片上系统(SoC)的核处理器或管理程序120和操作系统(OS)122在其上执行的其他此类主处理器的物理数据处理单元118p通常各自包括一个或多个物理程序计数器(诸如118c)以及其他物理寄存器。每一次管理程序120分配物理数据处理单元118p以供不同的虚拟化执行者(例如,应用、进程、线程)使用时,管理程序120将首先自动保存放弃控制执行者的所谓的物理和虚拟处理器上下文(例如,程序计数和其他寄存器内容)并且安装接管控制执行者的预先保存的上下文。数据处理器118p中的每一者能够直接访问高速缓存存储器118a,其中如本领域技术人员将领会的,该高速缓存存储器可以被细分为在容量上增加但在速度上减小的各部分,诸如L1、L2和L3。L3层可以与所有处理器118p处于公共通信。高速缓存存储器118a也与补充存储器进行操作通信,补充存储器诸如片外静态随机存取存储器(SRAM)116a、动态存储器(DRAM)116b以及通常板外盘存储器116d和固态硬盘存储器(SSD)116c。如本领域技术人员将领会的,取决于速度和安全需要之间的折衷在具有或不具有加密的情况下,数据在高速缓存存储器118a与其他物理存储器单元116之间按需被重复交换。大部分用硬件实现的单元(称为转换后备缓冲器(TLB)115)被用于高速缓存在虚拟地址(VA)与物理地址(PA)之间频繁使用的转换。在一个实施例中,TLB115可以使用一组相关联形式的内容可寻址存储器(CAM)以用于提供其转换服务。在一些实施例中,对TLB 115的服务请求(一组相关联查找请求)致使TLB 115输出有效载荷信号,该有效载荷信号包含物理地址(PA)、读或写许可(R/W)和执行/不执行许可(X/NX)。
继续对自安全化引导序列105的描述,在主机硬件平台110和管理程序120的可信度已经被确认之后,客操作系统122被安装、任选地被以类似的方式确认(例如,使用代码散列和数字证书)并且其随后被激活。在替代实施例(未示出)中,客虚拟机(VM)在客操作系统122的支持之下被安装、验证和激活。后者选项可以与例如JavaTM字节码兼容软件结合使用。
最后,应用加载、链接和启动命令信号(“启动APP1”)被传递到客OS 122中,从而致使后者操作系统分配统一虚拟存储器空间124的将应用140的静态代码和静态信息数据项加载到其中的合适大小的部分(例如,140)。如此处所使用,经加载的应用程序140被理解为用可执行的虚拟对象代码格式,使得它可以由客OS 122与管理程序120和支持硬件平台110协作地直接执行。图1A内对采用源代码格式的应用程序140的描绘是为了简化说明。
可以在执行线程(XT)使用一个或多个对应的虚拟程序计数器潜行通过已分配的虚拟存储器空间124的意义上描述所启动的应用140的执行。启动应用程序的可执行线程被表示为XT01并且它在OS 122内部执行。应用被理解为预编译的并被链接到声明的库例程或其他库服务。如已提及的,大部分应用文件中典型的第一区段141包括用于库链接的所谓的预处理声明和用于静态空间分配和数据类型确定(OS的链接加载器部分向其分配和指派的类型)的声明。作为启动序列的一部分,被执行的初始化线程XT02标识将被初始加载的可执行代码消耗的虚拟存储器空间(其中各可执行代码点由图1A中的实心黑色圆圈表示)以及还有将被静态地创建的信息数据项消耗的虚拟存储器空间(由图1A中的白色填充圆圈表示)。下一执行线程XT03初始化主程序区段142。通常,主程序区段142包括闭环的子例程调用(例如,145),其中那些主区段子例程之一是被偶发地执行的、合宜的终止例程(例如,其响应于检测到不可调和的错误而执行并且具有指令147和148)。然而,出于解说目的,示例性第一指令143被描绘为动态存储器分配请求指令(例如,“OS_GiveMePtr(Alloc_Tag,Other Params)(OS_给我Ptr(分配_标签,其他参数))”),由此执行应用140(也称为App1)要求OS 122给它一些更多的虚拟存储器空间(例如153),并且在这样做时,应用将指示正被请求的存储器空间区域的大小以及任选地可以存在于已分配的虚拟存储器区域中的数据结构的类型等的各种参数传递给OS。任选地,请求应用(App1)可根据针对OS和针对被调用的OS_GiveMePtr()库例程的预定义协议在例如应用的堆栈150内部将短长度指针标签(例如,Alloc_Tag)与OS将返回给应用的大体上更长的指针值(例如,被储存在VA1.1中的64位长的Master_GivenPtr)相关联。该协议确定返回堆栈上的OS将放置所请求的、已分配区域指针(也称为第一实例指针)的起点的位置(例如,VA.1.1)。虽然为了简单起见未在图1A中示出,但是被称为OS_GiveMePtr()库例程的堆栈上返回数据还可包括用于已分配空间的终点地址(例如,VA3)和/或用于已分配区域的长度指示符和/或相关的其他信息数据项(例如,数据类型、读/写许可、可执行/不可执行代码许可以及已分配虚拟存储器区域中的每一者的位置,例如153内部)。在一个实施例中,当应用调用OS以分配附加空间时,作为执行所请求服务(例如,OS_GiveMePtr(Alloc_Tag,Other Params))的一部分,OS执行硬件实现的操作码指令,该操作码指令创建对应的新的唯一ID并将新的唯一ID附加到主ID的保持表(例如,图2中的250)上。OS还记得该新的ID,使得当空间稍后被取消分配时,OS执行又一个硬件实现的操作码指令,同时将记住的ID传递给该操作码,并且经激活的操作码接着使该ID无效(例如,通过从主ID的保持表中移除该ID,以及还通过从多输入关联高速缓存中移除与该ID相关联的所有受保护指针(例如,图2的214))。
在将使用动态分配的新区域153的后续子例程调用145之前,应用使用诸如144之类的指令来将OS给定指针(例如,被储存在VA1.1中的64位长Master_GivenPtr)的副本(第二实例)推送到堆栈150的协议确定的相对位置(例如,VA1.4)中。接着,应用的主区段将执行控制权传递到统一存储器空间124中的其中被调用的子例程SubRt2驻留的另一区域149。被调用的子例程SubRt2接着访问共享堆栈150以拾取被保存的指针副本(例如,将其从堆栈中弹出)并将其与其他任选地被传递的数据(例如,被储存在堆栈位置VA1.3处)一起用于例如通过向被储存在堆栈位置VA1.4处的基值添加偏移和索引(例如,VAd=Copy_of_GivenPtr+Offset(偏移)+Index(索引))来访问(例如,被储存在位置VAd处的)数据的一个或多个特定项。在其任务完成之际,子例程SubRt2使用被保存在堆栈位置VA1.2处的返回地址来将控制权返回到跟随位置145的调用指令的下一个指令146。
如以上所提及,在应用140(也称为App1)的执行期间或者在步骤147-148的执行之后或者在应用140的不合宜的终止之后,已经至少部分地在OS 122的统一虚拟存储器空间124内部启动了的另一应用170可开始嗅探遍历堆栈150以寻找预定的签名模式。如果它找到指示存在被遗漏的堆栈以及它上面的指针(例如,堆栈位置VA1.1处的指针和/或堆栈位置VA1.4处的另一个指针)的签名,则嗅探器应用170可尝试使用被找到的(诸)指针以在动态分配的区域153内部定位可执行代码和/或信息数据项的可利用片段。针对此类可能的利用的一种防御形式是最小化时间窗口(时间跨度),在该时间窗口期间,诸如堆栈位置VA1.1和VA1.4处的那些指针之类的可利用指针在虚拟存储器中(例如,在堆栈上)被暴露且可使用(例如,仍然有效)。更具体而言,在分配请求应用140完成使用动态分配的区域153之后大体上不久,诸如VA1.1和VA1.4之类的指针保持位置应当被快速地标识,并且存在于那些相应位置中的指针值应当通过执行以下各项中的至少一者来被停用:使它们无效、擦除它们和/或用无用的数据盖写它们。
在更详细地解释这可被如何完成之前,参考图1B及其实施例101。在图1B中可行的情况下,相同或类似的附图标记被用于已针对图1A描述过的对应物元素。在图1B中使用带撇号的附图标记来指示经修改的组件。
由图1B的实施例101使用的指针跟踪方法依赖于指针跟踪机制的创建,例如155处所示的散列表(或其功能上的等同物)。指针跟踪表155在其中所谓的“受保护指针”(PPtr)的被跟踪的指针在虚拟存储器中被储存的位置的基础之上沿着其最左列156h来被索引(例如,被排序)。在一个实施例中,最左列156h的条目是虚拟地址(VA)的散列,而第二列156包含未经散列的完整地址。跟踪表155的第三列157包含唯一分配标识值(Alloc_ID_nn),其中nn可以是整数,并且其中对于每个新分配的区域及其被指派为受保护指针的第一实例、主给定指针(例如,Master_GivenPtr_01)来说,相应且唯一的分配标识值(例如,Alloc_ID_01)被创建。相同的唯一分配标识值(例如,Alloc_ID_01)还被用于从相应的主给定指针(例如,Master_GivenPtr_01)复制或以其他方式导出的每个“被复制的”指针(例如,Copy_of_GivenPtr_01)。如以上已部分地指出的,“被复制的”指针的值不必与主指针完全相同并且/或者被复制的指针的相关联的边界(列159)不必与主指针的边界完全相同。然而,相关联的被复制的指针的边界确实需要在经动态地分配的区域(例如,153')的边界内部(例如,在VA2和VA3之间),以供与相应的主指针(例如,Master_GivenPtr_01)一起使用。应当理解,程序可以创建大量的第一和第二实例指针,且因此指针跟踪表155趋向于相对较大,由此在并行处理被使用的情况下通过该表搜索可能花费相对长的时间量和/或相对大量的数据处理资源。在所解说的示例中,为了加速遍历其中的搜索,指针跟踪表155是以下一种散列表:其最左列156h(表的索引输入列和任选地还是其排序方式列)包含列156的虚拟地址的散列(优选地为非冲突散列),其中后者指示被对应地跟踪的指针驻留在虚拟存储器空间中的位置。更具体而言,VA1.1h是虚拟地址VA1.1的散列,其中后者是虚拟存储器空间中的地址,其中示例性的第一Master_GivenPtr_01被储存在堆栈150'中。类似地,VA1.4h是虚拟地址VA1.4的散列,其中后者是示例性第一Copy_of_GivenPtr_01被储存在堆栈150'中的位置。VA0.1h是虚拟地址VA0.1(堆栈中的位置,内容未在堆栈150'中示出)的散列,其中第二示例性指针Master_GivenPtr_00(以堆栈版本,内容未示出)被储存在堆栈150'中,而VA0.4h是虚拟地址VA0.4(未示出)的散列,其中又一个示例性指针Copy_of_GivenPtr_00(未示出)被储存在堆栈150'中。用于表155的示例性散列算法可以是以下一种散列算法:其保持预定数量的实际虚拟地址的最低有效位(LSB)不变(例如,较低的16位),同时压缩预定数量的最高有效位(MSB),以便降低针对寻址指针跟踪表155所消耗的存储器空间(其中后者表可以使用散列作为排序关键字来被排序),同时通常避免散列冲突并允许更快地搜索遍历表155。在一个实施例中,散列是可逆的,这意味着对于每个经散列的值(例如,VA1.4h),对应的未经散列的对应物(例如,VA1.4)可例如通过搜索遍历表155的经排序的第一列156h并接着在第二列156中查找对应物完整值来被快速地确定。在一个示例中,少量的候选及对应的未经散列的对应物位置被找到,并且这些被找到的候选位置的内容被比照表155的列156的完整指针地址值来测试是否匹配。如果存在匹配,则其意味着列156的被找到位置(例如,VA1.4)是被储存在列156h中的输入散列值(例如,VA1.4h)的对应的未经散列的对应物。在相同的实施例中,高速、多输入关联高速缓存114被用来提供甚至更快速的搜索。在高速缓存搜索期间,指针驻留的位置的经散列的值(例如,VA1.4h)或完整值的虚拟地址(例如VA1.4),以及任选地表155的列157和158的相同行内容中的至少一者可以作为组关联输入来被提供给组关联高速缓存(在图1B中被示为114并且在图2中被示为其实施例214)并且如果相关联的数据存在于多输入关联高速缓存114内部,则高速缓存命中被指出。经检索的高速缓存有效载荷提供对应物附加数据,诸如未经散列的虚拟地址(例如,如果仅经散列的值(例如,VA1.4h)曾被提供,则为VA1.4)、列158的完整指针值和/或列159的对应地址边界。另一方面,如果相关联的数据不存在于高速缓存114内部,则高速缓存将以“高速缓存未命中”标志取代“命中”标志进行响应。(当讨论图2的部分3b时,将在下面详述“高速缓存未命中”标记的含义。简言之,这意味着对应的受保护指针可能但不一定是无效的。)
尽管图1B的受保护指针跟踪表155的说明性版本155直接在其相应列156、157、158和159中储存表示相应指针(例如VA1.4)的虚拟地址、与该指针相关联的分配标识符、该指针的值以及该指针的边界定义参数的即刻数据;但是在本公开的构想内替代地储存取代这些表条目中的一者或多者的引导向相应的最终搜寻到的数据的对应的较短链接、标记或经散列的值。
如以上所指出,在一个实施例中,通过包括以上所提及的受保护指针高速缓存114来获得改进的搜索速度,该受保护指针高速缓存的输出有效载荷可包括跟踪表155的列156h、156-159的数据项中的一者或多者,并且该受保护指针高速缓存的输出还指示关于关联指令输入之一的命中或未命中。更具体而言,受保护指针高速缓存114可快速地指示在高速缓存中是否存在被询问指针的条目。在一个实施例中,只有仍然有效的指针将被储存在高速缓存中。如果在高速缓存114中搜索并找到指针,则其指示该指针仍然有效。另一方面,如果在高速缓存114中搜索但找不到给定指针(高速缓存搜索“未命中”),则在一个实施例中,这种独有并不意味着给定指针是无效的。在未命中时,较大的跟踪表155被搜索以查看未命中的指针是否仍然在跟踪表155中并且查看列157的相关联的分配标识值(Alloc_ID_nn)是否仍然有效。对于测试的后半部分(相关联的Alloc_ID的有效性),其他表或ID的保持列表(诸如图2的250)被搜索。下面将描述该表250。
重要的是,高速、多输入关联高速缓存114的使用允许两件事。首先,它允许快速确定关于高速缓存中是否存在给定指针的条目,并且如果是的话,则快速地指示指针仍然有效。其次,它允许快速查找与唯一分配标识(例如,Alloc_ID_01)绑定的所有高速缓存内指针并且允许从高速缓存中快速删除这些高速缓存内指针。如下面将更详细地解释的,全部指向虚拟存储器空间的已分配部分的大量指针可通过将它们从高速缓存114中删除并且仅再做一件事(例如,从图2的ID的保持表250中移除对应的Alloc_ID)来全部被同时地无效。硬件实现的和/或固件实现的高速缓存114还可被用来快速地标识逻辑上被链接到对应的唯一分配标识(例如,Alloc_ID_01)的高速缓存内主指针和被复制的指针在虚拟存储器空间中的位置。除了可用于快速地验证高速缓存内指针的持续有效性之外,高速缓存114可被任选地用来对具有高速缓存114中的对应边界条目的受保护指针的被测试的指针执行边界内一致性验证。
在一个实施例中,经修改的硬件平台110'在其微代码存储区域118b'中进一步包含专用操作码,该专用操作码专用于创建和填充受保护指针跟踪表155的内容以及能更快速地搜索的受保护指针高速缓存114的内容和/或用于生成和记录唯一分配标识值(例如,Alloc_ID_01,Alloc_ID_00)的内容。关于此类操作码的细节将在下面的图3、4和5的描述中提供。
此处所公开的受保护指针方案的实现一般而言是编程规范而非图1B的系统101中的强制结果。留给每个应用程序(例如,140')的程序员来确定他们的应用是否要采用受保护指针方案,并且如果是的话,则在哪些动态分配的存储器区域(例如,153)和到什么程度的方面留给程序员来确定。对于一些遗留程序,可能期望不采用受保护指针方案(然而这是很好的,遗留程序将继续工作)或者仅在验证恰好一个或几个已分配区域的持续指针有效性而不打扰边界一致性检查的程度上采用它,如将在下面描述图5的选项时变得更清楚的。
在图1B的情形中并且作为说明性示例,在经修改的指令位置143'处,应用(App1')调用受保护指针分配例程(例如,OS_GivePPtr)而不是传统的动态区域分配例程(例如,图1A的143)。受保护指针分配例程(例如,OS_GivePPtr)包括特殊操作码(也参见图3),该特殊操作码包括用于为每个新分配的虚拟存储器区域及其给定的第一实例主指针自动获得唯一分配标识值(例如,Alloc_ID_01)的一个操作码。该特殊操作码可进一步包括在指针跟踪表155的对应行中自动地填充并将所获得的唯一分配标识值(例如,Alloc_ID_01)添加到有效ID的保持表(例如,图2中的250)的一个操作码,该有效ID的保持表包含其指针是受保护指针的当前有效分配的虚拟存储器区域的唯一分配标识值。图3中解说了这样的受保护指针分配例程(OS_GivePPtr)的示例。
在图1B的经修改的应用程序140'(也称为App1')的示例中,后续指令144'调用受保护指针复制操作码(例如,Do Copy_GivenPPtr)而不是传统的指针复制操作码或例程(例如,图1A的推送指令144)。图4中解说了这样的受保护指针复制操作码(例如,Copy_GivenPPtr)的示例。受保护指针复制操作码(例如,Copy_GivenPPtr)确定主指针的副本(或派生物)应当被放置在堆栈150'上(或其他地方)的位置、这么做(例如,进入堆栈位置VA1.4中),以及同时通过将来自对应主指针的行(例如VA1.1h的行)的分配标识符值(例如,列157的Alloc_ID_01)复制到所导出的副本的行中来填充受保护指针跟踪表155的对应行。在一个实施例中,主指针的副本具有与主指针相同的值,并且副本的边界(例如Bounds_01')与主指针的边界(例如Bounds_01)相同。然而,在一些实施例中,复制请求应用140'可将选项参数传递给复制生成操作码(例如,144'处的Copy_GivenPPtr),以便致使后者操作码(或任选地例程)改变副本的值(以创建派生物而非精确的副本)和/或改变副本的边界(例如Bounds_01'),其中经改变的边界仍然在主指针的原始边界(例如Bounds_01)内部。
虽然未在图1B中显式地示出,但是当指令145'正被执行以便将被复制的受保护指针(例如,被储存在VA1.4处的Copy_of_GivenPtr_01)传递给被调用的子例程时,并且在如此传递的受保护指针在被调用的子例程(例如,SubRt2pp)内部被利用之前,持续有效性验证和边界检查在该被调用的子例程内部被执行,以验证所指向的虚拟存储器区域153'仍然是有效分配的区域,并且对所传递的指针的利用(例如,指针+偏移+索引)没有延伸到其被分配的边界(例如,Bounds_01')的外部。如果所指向的存储器区域153'在此期间已被取消分配,或者如果对所传递的指针的利用延伸到其被分配的边界(例如,Bounds_01')的外部,则产生异常标志。图5中解说了这样的有效性和边界内验证操作码(或任选地例程)的示例。
在其中图1B的附加指令步骤146'还请求向它们动态分配虚拟存储器空间和/或将相应主指针的副本用到已分配存储器区域的情形中,在指针跟踪表155中的对应行中进行填充以及对持续有效性和/或出界利用进行测试的步骤可被类似地执行。
当到了应用140'将该应用140'动态地已分配给它的一个或多个存储器区域返回到空闲空间的时间时,诸如经修改的指令147'之类的取消分配步骤被调用。在一个实施例中,经修改的取消分配指令147'需要做两件事。首先删除受保护指针高速缓存114中与正被取消分配的区域的唯一分配标识值(例如,Alloc_ID_01)绑定的所有指针条目。并且其次,从有效ID的表(例如,图2的250)中删除正被取消分配的区域的唯一分配标识值(例如,Alloc_ID_01)。当例如运行图5的有效性检查例程500时,这将具有致使被取消分配的区域的受保护指针的后续指针有效性检查失败的效果。取消分配步骤不需要使用大的受保护指针跟踪表155来(例如,在堆栈150'上)定位每个主给定指针的所有存储区域以及所有它的导出的副本的存储区域,并接着在一个接一个的基础上将每个存储区域从堆叠擦除。相反,受保护指针高速缓存114的快速关联搜索功能被用来同时地或以其他方式快速地从受保护指针高速缓存114中标识和删除与正被取消分配的区域的唯一分配标识值(例如,Alloc_ID_01)相关联的所有指针。然后,如以上所提及的,唯一分配标识值(例如,Alloc_ID_01)被从有效ID的保持表(例如,图2中的250)擦除,其中该擦除指示较早的已分配区域153'已返回到系统空闲空间。由于当子例程(例如,在步骤145'处调用的SubRt2pp)的持续有效性验证和边界检查在被调用的子例程(例如,图5的验证测试500)内部被执行时指向较早的已分配区域153'的所有对应的指针现在都将被认为是无效的,因此诸如170之类的嗅探器程序不再能够使用该有效性验证子例程(例如,在步骤145'处调用的SubRt2pp)的代码以用于嗅探出其指针并使用它们来访问该较早的已分配区域153'内的数据。
参考图2,示出了一个实施例的用于自动且重复地执行当前公开的各种受保护指针方面的数据结构(250、255、214)和方法步骤(210、212、216、220–221和240)的组合200。
表250是主有效ID的保持表或列表,其实施例在此被称为分配标识散列表。该有效ID的存储表或列表250的基于散列的实施例具有能用相应且唯一的分配标识值的散列而非用大体上更长的实际分配标识值(例如,Alloc_ID_01)来被寻址并且任选地根据所述相应且唯一的分配标识值的散列而非根据所述大体上更长的实际分配标识值来被排序的特征。当然,其他形式的有效ID的保持列表可被使用。在251处示出了一个散列索引的条目的示例。分配ID散列表250可以在OS引导期间被创建为最初为空的这样的表。然后,如步骤210所指示,希望附加虚拟存储器空间被分配给它的相应应用直接调用或已代表它调用了特殊受保护指针分配操作码,该操作码为动态分配的附加区域分配唯一标识(例如,Alloc_ID_01)并且将该唯一标识例如储存在预生成的分配ID散列表250的散列级索引的条目位置251处。在一个实施例中,简单的64位硬件向上计数器被用来生成唯一标识值。以下在本公开的构想之内:使用替代的硬件发生器(例如,诸如循环冗余、伪随机数生成计数器之类的其他形式的计数器)以用于例如通过加扰向上计数器的各个位和/或对各个位执行各种布尔逻辑运算(包括例如XOR运算)来生成唯一标识值。
在步骤212处,分配请求应用执行或已代表它执行了分配和指针创建操作码,该操作码从操作系统(OS)获得主指针(第一实例指针)并将该主给定指针的值258.1储存作为OS预创建的指针VA散列表255(图2中所示的中间表)中的多个条目之一。指针VA散列表255中的其他条目可包括主给定指针被储存的位置的堆栈上虚拟地址(VA)256.1以及指示动态分配的附加存储器区域(例如,图1B的153')的大小和/或其他属性的边界参数259.1。附加地,新分配的区域及其主给定指针的条目包括已被分配给新分配的区域(例如,图1B的153)的及分配给其第一实例主给定指针的唯一分配ID 251的副本257.1。在其中指针VA跟踪表255是散列表(它不需要是散列表)的情形中,步骤212可附加地执行用于对冲突的散列值进行处置的散列表冲突避免步骤或补偿步骤,其中此类避免和/或补偿步骤在散列表创建的领域中是已知的。任选地且附加地,在此时间期间,步骤212可扫描遍历表255的分配ID的列(257),以查找在主分配ID散列表250中不具有匹配的分配ID值。主分配ID散列表250中缺少匹配条目意味着指针VA散列表255中的对应条目可被盖写,因为它不再属于仍然被分配的虚拟存储器区域的仍然有效的指针。因此,如果步骤212的过程在表255中找到此类不匹配条目,则它可以擦除或盖写它们。如所提及的,在一类实施例中,对于指针跟踪表255的引用有效受保护指针的每个对应条目行而言,在分配ID表250内部必须存在匹配的主分配ID值(例如,251)。如果不存在这样的匹配,则这意味着对应的存储器区域(例如,图1B的153')已被取消分配,并且在指针跟踪表255中被对应地找到的条目可被擦除(或被盖写),并且这还意味着在下面描述的受保护指针高速缓存214中的对应条目(如果有的话)需要被擦除。
在步骤216处,已使得附加存储器区域被动态地分配给它的应用(例如,App1')将要调用子例程。但在该调用之前,应用使用指针复制操作码(或代表它使指针复制操作码被使用)来将主给定指针的副本(或其他派生物)推送到堆栈上。当这被完成时,指针复制操作码同时将对应的被复制的指针条目添加到指针跟踪表255中,如由例如条目256.4、258.4、259.4和257.4所指示。这里,VA条目256.4是堆栈(150')上的其中主指针的副本(或其他派生物)已被推送到的位置。其他条目258.4、259.4和257.4可以仅仅是针对主给定指针258.1所作出的对应物条目258.1、259.1和257.1的副本。尤其重要的是,副本的分配ID 257.4应当直接能追溯到(例如,能链接到,能匹配到)主分配ID 257.1,使得由此保持跟踪根据主给定指针所作出的或从主给定指针导出的所有副本。(换言之,从而保持跟踪指向到具有分配给它的该唯一分配ID 257.1的已分配虚拟存储器区域中的所有受保护指针。)在一个实施例中,副本的边界259.4和/或副本的值258.4不需要与它们的主对应物259.1和258.1完全相同。应当理解,各种技术可被用于可标识地将指针跟踪表255内的各条目(并且用于可标识地将下面描述的多输入关联高速缓存214内的各条目)与系统存储器空间的其他部分中的对应物相关联,包括使用相同的完整值、使用完整值的掩码部分、使用完整值的散列或完整值的掩码部分的散列,以及使用到所述完整值或所导出的值之一的链接。以下在本公开的构想之内:在指针跟踪表255内(和/或在下面描述的多输入关联高速缓存214内)使用这些各种技术中的任一种或全部,以用于可标识地将相应条目与它们在系统存储器空间的其他部分中的对应物相关联(相链接),使得特定的联接被提供在该条目和被可标识地关联的对应物之间。
在步骤220处,已由分配接收应用(例如,App1')调用的子例程将要利用指针258.4的堆栈上副本。然而,在这么做之前,子例程使用(或已代表它使用)指针有效性检查操作码,该操作码验证指针副本(例如,258.4)是指向虚拟存储器的仍被分配的部分(例如,153)的有效指针。这里,为了加速性能,指针高速缓存214被首先使用以尝试更快速地访问可疑指针副本的指针验证信息(例如,258.4)。如果指针高速缓存214具有与可疑指针副本(例如258.4)的信息相匹配的条目(例如258.4'),则该高速缓存被其自己命中可指示该可疑指针副本是有效的。没有什么需要完成的了。在一个实施例中,可疑指针副本的堆栈上地址(例如,256.4')(或该堆栈上地址的散列)被提供作为给指针高速缓存214的输入关联数据,并且随后该高速缓存214快速地返回命中指示且还在其对应的有效载荷中返回指针的其他相关联的信息(诸如指针值258.4'和被允许的边界259.4')。对多输入关联高速缓存214的第二关联输入查询允许唯一分配ID(例如,被储存在257.4'处的唯一分配ID或其散列或其另一表示)被用于在多输入关联高速缓存(例如,包括具有被储存在258.4处的指针值的高速缓存)中标识被可标识地链接到该唯一分配ID的所有指针条目。在命中之际使用来自多输入关联高速缓存的被返回的有效负载对于指针验证是任选的,如下面将参考图5详述的。在一个实施例中,仅仅是匹配的条目在指针高速缓存214中被找到(被命中)的事实就足以验证可疑指针副本(例如,被储存在由高速缓存条目256.4'标识的VA处的可疑指针副本)是有效的指针副本。这将是如此,因为如以上所提及的,指针高速缓存214中的在主表250中不具有匹配的分配ID的条目或者属于现在被取消分配的区域的条目被自动地擦除。因此,指针高速缓存214中的命中之际的匹配仍在那里的事实通常意味着可疑指针副本是指向仍然被分配的区域的有效指针副本。因此,指针验证归因于硬件实现的指针高速缓存214的速度而被非常快速地执行。在一些实施例中,如将针对图5详述的,可疑指针副本的有效性检查可更多地涉及并且可包括边界检查和/或值匹配。
在一个实施例中,高速缓存未命中的发生(步骤221)并不立即意味着可疑指针副本是无效的指针副本。被储存在较大/较慢指针跟踪表255中的仍然有效的副本不再处于更快但更小的指针验证高速缓存214中的原因可能有多种。例如,自从可疑指针副本的条目最后通过指针高速缓存214来被测试以来可能已过了很长的时间,并且该高速缓存条目槽可能已用被更频繁地测试和/或被最近地使用的指针条目填充(盖写)。因此,在步骤221中,该过程返回到指针跟踪表255以在该跟踪表255中搜索匹配的副本。如果匹配的副本被找到并且唯一匹配分配ID仍在主ID的保持表250中,则这意味着可疑指针副本仍然有效并且它的条目被复制到指针高速缓存214中。另一方面,如果在跟踪表255中没有找到匹配或者主表250中不再存在唯一匹配分配ID,则这意味着可疑指针副本是无效的并且产生合适的异常标志。
对于取消分配步骤240的情形,图2示出了各种数据表结构可如何被用于快速地使指向被取消分配的虚拟存储器区域的所有受保护指针(第一和第二实例)无效,其中后者区域具有被分配给它的唯一分配ID(例如,251和257.1)。唯一分配ID(或其散列)被应用于受保护指针高速缓存214的对应关联输入,以供由此标识高速缓存214中的与正被取消分配的虚拟存储器区域(例如,153')的该唯一分配ID(例如,257.1)相匹配的所有条目。在高速缓存214中找到的匹配(命中)被擦除或用其他数据来盖写。另外,该相同的唯一分配ID(例如,257.1)被从主分配ID的保持表250(例如,从条目位置251)删除。该两个步骤过程240的效果将是要在高速缓存214中找到对应指针的命中(根据步骤220)的将来尝试将反而失败并返回高速缓存未命中指示(3b),并且随后后续步骤221将发现主分配ID的保持表250中的所需条目(例如,位置251的条目)未命中,从而得出对应指针无效的结论。作为选项,如果例程还在指针跟踪表255中定位条目,则它可以擦除或盖写该条目行(例如,Alloc ID 257.1的行),因为现在已知该条目行现在引用了不再有效的指针(因为Alloc ID 257.1不再出现在主分配ID的保持表250中,例如,在被擦除的位置251处)。
参考图3,现在将描述用于生成主给定受保护指针的例程(例如,OS_GivePPtr)的示例300。在步骤310处,分配请求应用(例如,App1')调用对应的受保护指针给出例程(例如,OS_GivePPtr),该例程在受保护指针特征被期望使用时通常是被包括在静态应用声明141'中的任选特权OS库例程。
在步骤310处,特权OS存储器空间分配例程开始。在步骤312处,例程致动第一受保护指针操作码(例如,被称为Give1),该操作码递增分配ID发生器(例如,向上计数器或伪随机数生成计数器),以便提供下一个唯一标识值(例如,Alloc_ID_01)。然后,被致动的第一操作码(例如,Give1)将所生成的标识值连结为主分配ID散列表250中的新的下一个条目(例如,251)并返回。在步骤316处,控制返回到OS_Give_PPtr例程,并且该例程任选地取回分配请求参数(诸如指定所请求的虚拟存储器区域(例如,153')的大小的分配请求参数)、要被包括在所请求区域中的数据类型(例如,针对每一者的R/W和/或X/NX许可)以及预计被返回到OS_Give_PPtr例程的要与较长长度给定指针相关联的短长度标记。
在步骤318处,例程将对应的分配请求转发给管理程序,并且等待请求的授权。(虽然未示出,但是OS_Give_PPtr例程可包括异常处置代码,以用于处理出于某种或其他原因而拒绝所请求的存储器分配的情况。)在步骤320处,例程将给定的主指针推送到堆栈上,并且记下主给定指针在堆栈上被储存的虚拟地址(例如,VA1.1)。
在步骤322处,例程致动第二受保护指针操作码(例如,被称为Give2),该操作码自动地将以下各项的条目添加到指针跟踪表255中:主给定指针(例如,Master_Given_Ptr_01)的所记下的虚拟地址(例如,VA1.1)、(例如,图1B的列158中的)给定指针的值、(例如,图1B的列159中的)给定指针的边界以及主给定指针的新的且唯一的分配ID值(例如,图1B的列157中的Alloc_ID_01)。如在Give1操作码的情形中,Give2操作码非常快速地执行,并因此支持在指针跟踪表255中的对应条目中进行填充不会对正在利用受保护指针特征的应用(例如,App1')的性能速度产生任何显著的影响。在步骤329处,控制返回OS_Give_PPtr例程。在一个实施例中,例程可任选地在退出之前执行附加指令。
参考图4,提供了另一特殊操作码(例如Copy_GivenPPtr)的流程图400,该操作码可被合并在被储存在图1B的存储器区域118b'中的受保护指针支持操作码之中。所解说的Copy_GivenPPtr操作码在步骤410处由应用(例如,App1')来致动,该应用计划很快调用子例程并且希望将主给定指针(或其派生物)的副本推送到堆栈上。
在步骤412处,操作码在当前活动的堆栈上定位要被复制的指针(例如,Master_Given_Ptr_01)的虚拟地址(例如,VA1.1)和副本要被放置的虚拟地址(例如,VA1.4),例如堆栈中的其他位置。
步骤414是任选的,并且可响应于由正计划使用受保护指针特征的应用(例如,App1')的声明区段141'设置的全局控制参数而包括步骤414。在步骤414中,操作码在堆栈上且根据预定协议定位可确定操作码的各种选项的控制参数,所述选项诸如修改主给定指针的副本(例如,通过添加被提供的偏移和索引中的一者或这两者)和/或诸如修改主给定指针的边界的副本(例如,通过使它们更小同时保持在主给定指针的边界内)。
在步骤416处,被致动的操作码将(例如,从VA1.1获得的)原始指针的副本或经修改的副本储存到该副本将前往的所获得的地址(例如,到VA1.4中)。在随后的步骤420中,被致动的操作码自动地将原始指针的所储存的和任选地经修改的副本的新条目添加到指针跟踪表255中,同时使用与被分配给原始指针的唯一分配标识值相同的唯一分配标识值(例如,Alloc_ID_01)。同时,被致动的操作码还自动地将原始指针的边界的副本或从原始指针的边界导出的任选地经修改的边界的副本添加到指针跟踪表255中。接着在步骤425处,被致动的操作码自动地将副本被储存的目的地地址(例如,VA1.4)的值输入到指针跟踪表255中。操作码接着在步骤429处退出。再次,通过使用快速执行的操作码,本公开的受保护指针支持特征快速地将期望的条目填入到跟踪表中,并且对正利用受保护指针特征的应用(例如,App1')的性能速度的影响最小。(任选地,Copy_GivenPPtr操作码还可将新添加的指针的对应数据插入到受保护指针高速缓存214中。然而,由于通常不知道何时(如果有过的话)该特定新添加的指针接下来将再次被使用,因此优选地不用附加的指针数据来填充有限大小的受保护指针高速缓存214,而是改为在将相同指针的数据添加到高速缓存214中之前等待何时对该相同指针的验证被首先请求。在所描述的实施例中,这将在接下来描述的有效性和边界检查操作码内部发生。)
参考图5,提供了另一特殊操作码(例如,有效性和边界检查)的流程图500,该操作码可被合并在被储存在图1B的存储器区域118b'中的受保护指针支持操作码之中。所解说的有效性和边界检查操作码在步骤510处由应用(例如,App1')或子例程来致动,该应用或子例程计划很快使用已被推送到堆栈上的受保护指针的副本。
在步骤512处,操作码在当前活动的堆栈上定位副本被放置的虚拟地址(例如,VA1.4)。步骤514任选地在全局受保护指针声明(例如,图1B的141')已指示附加控制参数将被放置在堆栈上的情况下被执行。在该情形中,步骤514在堆栈的所指派的相对部分中定位对应的控制参数,所述控制参数被用于例如通过向堆栈上副本(例如,VA1.4处的副本)添加预指定的偏移和预指定的索引值中的至少一者来修改该堆栈上副本。
可疑指针副本的有效性的验证在步骤516处进行。可疑副本被储存的虚拟地址(例如,VA1.4)(或在一个实施例中,该存储地址值的散列)作为关联输入被提供给受保护指针高速缓存114/214。如果存在关联匹配,则意味着可疑副本是有效的。这是因为它由于下面描述的步骤521和527的动作而去到那里(进入高速缓存114/214中),并且后两者确保了指针曾是有效的。接下来,在步骤520的“是(高速缓存命中)”结果处,高速缓存114/214将输出命中指示和对应的有效载荷(例如,图2的258.4'、259.4')。对于一些实施例,仅测试步骤520导致了在受保护指针高速缓存114/214中找到匹配(“是”结果)的事实是完成期望验证所需的全部。如果是这种情况,则选项1步骤521a被采取并且控制被传递到对应的离开1操作531。有效等于是(valid equals yes)标志被推送到堆栈的预定部分上,并且随后操作码在步骤530处退出。
另一方面,在期望验证比受保护指针高速缓存114/214上存在匹配更多的事实的其他实施例中,第二选项路径521b和第三选项路径521c中的至少一者被采取。然而,在解释第二和第三选项之前,将描述来自步骤520的“否”结论(高速缓存未命中)结果之后的过程。仅仅因为在受保护指针高速缓存114/214中找不到匹配的副本本身并不总是意味着可疑指针是无效的。可能存在为何高速缓存114/214中的可疑指针的条目(例如,先前存在的条目)在那里不存在的各种原因。一种可能性是该特定指针尚未被使用达长时间,并且其他指针条目盖写其在高速受保护指针高速缓存114/214的有限存储器中的位置。鉴于此,在步骤521处,对较大的受保护指针跟踪表155/255进行搜索以查看匹配的条目是否在那里被找到。如果测试步骤523的结果为是,则匹配曾在跟踪表155/255中被找到,接着控制被传递到步骤527。在步骤527中,仅当进一步确定对应的唯一分配标识值(例如,Alloc_ID_01)仍被储存在主ID的保持表(例如,250)中时,所找到的条目的副本才被添加到受保护指针高速缓存114/214。因此,两个条件针对以下被测试,即:可疑指针在受保护指针跟踪表155/255中被列出,并且匹配的唯一分配标识值被储存在主ID的保持表(例如,250)中。如果后两个条件都为真,则控制接下来被传递到选项步骤521a,其中一种可能性是退出1(531)被采取。另一方面,如果测试步骤523的结果为否,则控制被传递到错误退出步骤528。另外,如果针对主ID的保持表(例如,250)中的存在性的测试527a的结果指示对应的Alloc_ID是未命中,则控制也被传递到错误退出步骤528。在步骤528中,有效等于否标志被推送到堆栈上,并且随后操作码在步骤530处退出。接下来响应于退出步骤528的错误条件而做的事情可以不同。一种选项是如果来自主ID的保持表(例如,250)的对应的Alloc_ID是未命中,则从受保护指针跟踪表155/255中删除具有不再有效的Alloc_ID值的所有条目。另一种选项是产生异常标志并将控制传递给操作系统(OS)以供错误条件的处置。
如果在测试步骤520的是结果之后采取第二选项路径521b(或步骤527的无错误结果),则在步骤522处执行进一步测试,其中在一个实施例中,该进一步测试验证高速缓存有效载荷中的指针值与位于堆栈(例如,在VA1.4处)上的指针值相同。如果值不匹配,则可指示恶意第三方执行者已更改指针值中的一者,并且计划使用可疑指针副本可能导致不期望的后果。出自步骤522的不匹配导致采取错误退出5(步骤529),其中有效等于否标志被推送到堆栈上并且值匹配等于假标志也被推送到堆栈上。然后,操作码在步骤530处退出。接下来响应于退出步骤529的错误条件而做的事情可以不同。
如果任选测试522的结果为是,则一个后续选项524a将继续进行到退出2步骤532,其中指针有效真标志被推送到堆栈上并且值匹配测试真标志也被推送到堆栈上。然后,操作码在步骤530处退出。接下来响应于退出步骤532的无错误条件而做的事情可以不同。一般而言,传递指针的验证测试被认为可以使用。第五选项524b是以边界内验证测试525来跟随值匹配测试522中的成功。边界内验证测试525也可以是选项路径521c的下一个步骤。在边界验证测试525中,对应的边界参数(例如,高速缓存214的259.4')被用来确定可疑指针值(例如,在VA1.4处)是否指向对应边界内部的地址和/或可疑指针值指向的信息数据项是否没有延伸到对应边界的外部。在一个实施例中,在针对所指向的数据项的开始和/或结束的边界内测试被执行之前,预定的索引值和偏移值中的至少一者被添加到可疑指针(例如,VA1.4处的指针)的值。如果边界内测试526的结果为是,则第六选项被采取以去往成功退出3步骤533。退出3步骤533包括将有效等于是标志和边界内等于真标志推送到堆栈上。虽然未示出,但是附加标志可以在指针值匹配测试522也已成功通过的情况下是值匹配真标志。
另一方面,如果边界内测试526的结果为否,则控制传递到不成功退出6步骤536,其中有效等于否标志被推送到堆栈上并且边界内等于假步骤被推送到堆栈上。虽然未示出,但是附加标志可以在指针值匹配测试522已成功通过或没有成功通过的情况下是值匹配真或假标志。然后,操作码在步骤530处退出。接下来响应于退出步骤536的(诸)错误条件报告而做的事情可以不同。当一个或多个错误条件通过退出步骤530被报告时,后续选项之一是通过从高速缓存114/214中移除具有对应的相同分配标识值的所有指针副本来使它们无效。参考图6,示出的是用于执行无效所有副本例程的流程图600。在步骤610处,例程在操作系统的监督之下被启动。在步骤612处,对应主指针的堆栈上的位置(例如,VA1.1)被标识,或者替代地,对应副本或派生的指针的堆栈上的位置被标识。接下来,在步骤614处,特殊的Get_Alloc_ID操作码被执行,以便从受保护指针高速缓存114/214或指针跟踪表155/255中的至少一者快速地取回所标识的主或副本/派生指针的相关联的唯一分配标识值(例如,Alloc_ID_01)。
接着,在后续步骤616处,进一步的特殊操作码Find_Matched_ID被执行,以便在受保护指针高速缓存114/214中快速地找到(标识)具有在步骤614中获得的唯一分配标识值(例如,Alloc_ID_01或其散列)的所有条目。在步骤620处,该例程删除具有唯一分配标识值(例如,Alloc_ID_01或其散列)的受保护指针高速缓存114/214中的所有被找到的(被标识的)条目。这之后是步骤625,在步骤625中,从主ID的保持表(例如,250)中删除相同的相关联的唯一分配标识值(例如,Alloc_ID_01)。此时,作为步骤620中的从高速缓存114/214中高速删除和步骤625中的从主ID的保持表(例如,250)中一次删除相关联的唯一分配标识值的结果,具有相同分配标识值(例如,Alloc_ID_01)的所有受保护指针将被无效,因为图5中的步骤523和527a中的至少一者将被经由步骤528的无效性退出跟随(因为在高速缓存中和在主ID的保持表中将找不到可疑指针的所需条目)。该结果将使得嗅探程序(例如,170)难以利用被遗漏的代码(例如,在图1B中的步骤145'处调用的SubRt2pp)来查找可能已被嵌入在现在被取消分配的存储器区域(例如,153')中的有价值的信息片段(例如,用户密码),因为由该被遗漏的代码(例如,SubRt2pp 145',假设它行为良好)执行的指针有效性检查(例如,图5的过程500)将失败。
鉴于以上内容,可以看出系统和应用管理的存储器分配例程可以在同一共享虚拟区域中一起使用受保护指针特征。应用和系统软件可验证与每个主指针或任何其副本或派生物相关联的区域分配是否仍然有效。它们可以检查有效地址是否在分配边界内(经由边界内检查),以及指针或副本值是否尚未被改变(经由值匹配测试)以及其所指向的被分配区域(例如,153')是否尚未被取消分配。一种选项允许经更改的值跳过有效地址边界检查或者检查边界但在经更改的指针的分配ID仍然有效(例如,仍然存在于主ID的保持表250中)的情况下不会归因于该经更改的指针而失败,并且因此甚至是经更改的指针值也可以与更改指针值的软件互操作。具有显著安全后果的数据结构应成为受保护指针使用的目标。在一个实施例中,经添加的CPU指令(操作码)被引入以支持受保护指针协议,以便自动地将相关联的数据输入到合适的跟踪表(例如,255)、高速缓存(例如,114或214)和ID保持表(例如,250)中,并且自动地允许通过高速缓存的快速有效性检查及通过高速缓存和ID保持表的快速无效。相关联的表条目(例如,表250和255的那些条目)可被储存在元数据保持区域中,而多输入关联高速缓存(例如,114/214)是硬件和/或固件实现的,以便至少出于有效性检查的目的来提供快速响应速度。
具体而言,这里所公开的用于至少一个实施例的方法包括以下这些:(a)验证与指针(或其副本或其派生物)相关联的空间分配是仍然被有效地分配的,以防止空闲之后使用(use-after-free);(b)用即使当副本值已更改时也允许选项的互操作性来检查有效地址边界和指针(或副本)值;(c)不要求新的过程状态——在一个实施例中,虚拟存储器空间的一小部分被保留以包含元数据,其中被保留部分的大小与受保护指针使用成比例;(d)受保护指针使用可被定制为用于仅与显著安全性价值数据结构的选择性使用;(e)它要求可以与PPtr的不知晓的其他代码混合(被使得与之兼容)的已检测应用代码。硬件有效性测试和元数据高速缓存可被用来最小化性能速度降低。
示例操作环境
图7示出了可在其中实现图1-6中的任何一个的示例和实现以及任何替换方案的合适计算和联网环境900的示例。计算系统环境900只是合适计算环境的一个示例,而非意在暗示对本技术的各实施例的使用范围或功能有任何限制。也不应该将计算环境900解释为对示例操作环境900中示出的任一组件或其组合有任何依赖性或要求。
本技术的各实施例可用各种其它通用或专用计算系统环境或配置来操作。可适用于本技术的各实施例的公知计算系统、环境、和/或配置的示例包括但不限于:个人计算机、服务器计算机、手持式或膝上型设备、平板设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、微型计算机、大型计算机、包括任何以上系统或设备的分布式计算环境等等。
本技术的某些实施例可在诸如程序模块等由计算机执行的计算机可执行指令的通用上下文中被描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。本技术的某些实施例也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实现。在分布式计算环境中,程序模块可以位于包括存储器存储设备在内的本地和/或远程计算机存储介质中。
参考图7,用于实现本技术的某些实施例的各方面的示例系统可包括计算机910形式的通用计算设备。计算机910的组件可以包括但不限于:处理单元920、系统存储器930和将包括系统存储器在内的各种系统组件耦合至处理单元921的系统总线920。系统总线921可以是若干类型的总线结构中的任一种,包括存储器总线或存储器控制器、外围总线和使用各种总线架构中的任一种的局部总线。作为示例而非限制,这样的架构包括工业标准架构(ISA)总线、微通道架构(MCA)总线、增强型ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线和外围部件互连(PCI)总线(也称为夹层(Mezzanine)总线)。
计算机910通常包括各种计算机可读介质。计算机可读介质可以是能由计算机910访问的任何可用介质,并包含易失性和非易失性介质以及可移动和不可移动介质两者。作为示例而非限制,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质包括以存储诸如计算机可读的指令、数据结构、程序模块或其他数据之类的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不仅限于,RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁带盒、磁带、磁盘存储或其他磁存储设备,或可以用来储存所需信息并可以被计算机910访问的任何其他介质。通信介质通常以诸如载波或其他传输机制之类的已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,并且包括任何信息传递介质。术语“已调制数据信号”意指以在信号中对信息进行编码的方式来使其一个或多个特性被设定或改变的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。上面各项中的任何项的组合也包括在计算机可读介质的范围内。
系统存储器930包括易失性和/或非易失性存储器形式的计算机存储介质,如只读存储器(ROM)931和随机存取存储器(RAM)932。包含诸如在启动期间帮助在计算机910内的元件之间转移信息的基本例程的基本输入/输出系统933(BIOS)通常存储在ROM 931中。RAM932通常包含处理单元920可立即访问和/或当前正在操作的数据和/或程序模块。作为示例而非限制,图6示出了操作系统934、应用程序935、其他程序模块936(例如,系统管理程序)和程序数据937。
计算机910也可以包括其他可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,图7示出了从不可移动、非易失性磁介质中读取或向其写入的硬盘驱动器941,从可移动、非易失性磁盘952中读取或向其写入的磁盘驱动器951,以及从诸如CD ROM或其他光学介质等可移动、非易失性光盘956中读取或向其写入的光盘驱动器955。可以在该示例操作环境中使用的其它可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,磁带盒、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等等。硬盘驱动器941通常通过诸如接口940之类的不可移动存储器接口连接到系统总线921,并且磁盘驱动器951和光盘驱动器955通常通过诸如接口950之类的可移动存储器接口连接到系统总线921。
以上描述并在图7中例示的驱动器及其相关联的计算机存储介质为计算机910提供了对计算机可读指令、数据结构、程序模块和其他数据的存储。例如,在图7中,硬盘驱动器941被示为存储操作系统944、应用程序945、其他程序模块946(例如,系统管理程序代码)和程序数据947。注意,这些组件可与操作系统934、应用程序935、其他程序模块936和程序数据937相同,也可与它们不同。操作系统944、应用程序945、其他程序模块946和程序数据947在这里被标注了不同的附图标记是为了说明至少它们是不同的副本。用户可通过诸如平板或者电子数字化仪964、话筒963、键盘962和定点设备961(通常指的是鼠标、跟踪球或触摸垫)等输入设备向计算机910输入命令和信息。图7中未示出的其他输入设备可以包括操纵杆、游戏手柄、圆盘式卫星天线、扫描仪等。这些以及其他输入设备通常通过耦合到系统总线的用户输入接口960连接到处理单元920,但也可通过诸如并行端口、游戏端口或通用串行总线(USB)之类的其他接口和总线结构来连接。监视器991或其他类型的显示设备也经由诸如视频接口990之类的接口连接至系统总线921。监视器991也可以与触摸屏面板等集成。注意到监视器和/或触摸屏面板可以在物理上耦合至其中包括计算设备910的外壳,诸如在平板型个人计算机中。此外,诸如计算设备910等计算机还可以包括其他外围输出设备,诸如扬声器995和打印机996,它们可以通过输出外围接口994等连接。
计算机910可使用到一个或多个远程计算机(诸如,远程计算机980)的逻辑连接而在联网环境中操作。远程计算机980可以是个人计算机、服务器、路由器、网络PC、对等设备或其他常见网络节点,并且通常包括许多或所有以上相对计算机910所描述的元件,但在图7中仅例示了存储器存储设备981。图6中所示的逻辑连接包括一个或多个局域网(LAN)971和一个或多个广域网(WAN)973,但也可以包括其他网络。此类联网环境在办公室、企业范围的计算机网络、内联网和互联网中是常见的。
当在LAN联网环境中使用时,计算机910通过网络接口或适配器971连接到LAN970。当在WAN联网环境中使用时,计算机910通常包括调制解调器972或用于通过诸如因特网等WAN 973建立通信的其他手段。可为内置或可为外置的调制解调器972可以经由用户输入接口960或其他合适的机构连接至系统总线921。诸如包括接口和天线的无线联网组件974可以通过诸如接入点或对等计算机等合适的设备耦合到WAN或LAN。在联网环境中,相关于计算机910所示的程序模块或其部分可被储存在远程存储器存储设备中。作为示例而非限制,图7示出了远程应用程序985驻留在存储器设备981上。可以理解,所示的网络连接是示例,也可以使用在计算机之间建立通信链路的其他手段。
辅助子系统999(例如,用于内容的辅助显示)可经由用户界面960连接,从而即使计算机系统的主要部分处于低功率状态中,也允许诸如程序内容、系统状态和事件通知等数据被提供给用户。辅助子系统999可连接至调制解调器972和/或网络接口970,从而在主处理单元920处于低功率状态中时,也允许在这些系统之间进行通信。
作为本公开的非限制性概览,看到已经公开的内容包括一种用于管理指向数据处理系统的存储器区域的指针的机器实现的方法,其中该方法包括:(a)将被分配给存储器中的被分配区域的对应且唯一的分配标识符与指向该存储器区域的多个受保护指针中的每一者相关联;(b)将该对应且唯一的分配标识符与该多个受保护指针中的每一者的相应存储位置相关联;(c)当对应地被分配的区域正被或已被取消分配时使用该唯一分配标识符以在多输入关联高速缓存中定位该受保护指针中的一者或多者的条目;(d)删除所定位的条目;(e)从受保护指针保持列表中删除相应的被取消分配的存储器区域的该对应且唯一的分配标识符。
以上方法可以是一种方法,其中:该受保护指针中的一者或多者位于由一个或多个应用程序或例程使用的堆栈区域中。
该方法可以是一种方法,其中:数据处理系统包括管理程序,该管理程序管理数据处理系统的一个或多个存储器区域的虚拟化;并且受保护指针包括第一实例给定指针,该第一实例给定指针由管理程序给出,指向对应的虚拟存储器空间中的新分配的虚拟区域。
该方法可以是一种方法,其进一步包括:将给定指针的对应副本的相应值的标识符储存作为受保护指针跟踪表的相应跟踪条目的一部分,以及将给定指针的对应副本的相应的一个或多个边界参数的标识符储存作为受保护指针跟踪表的相应跟踪条目的一部分。
该方法可以是一种方法,其进一步包括:将给定指针的相应存储位置的标识符、它与它指向的已分配存储器区域的对应且唯一的分配标识符的关联性的指示符储存作为储存受保护指针的条目的多输入关联高速缓存的相应高速缓存条目的一部分;其中所存储的相应存储位置的标识符和所储存的指针与对应且唯一的分配标识符的关联性的指示符被构造成通过高速缓存的设置关联输入来被找到,使得高速缓存针对所储存的相应存储位置的标识符和所储存的它与对应且唯一的分配标识符的关联性的指示符中的任一者的关联匹配(命中)指示高速缓存条目存在并且对应的给定指针是指向仍然被分配的存储区区域的有效指针。
该方法可以是一种方法,其进一步包括:将指针的值和指针的边界参数中的至少一者储存作为受保护指针高速缓存的相应高速缓存条目的一部分,其中所储存的指针的值和所储存的边界参数被构造为受保护指针多输入关联高速缓存的有效载荷输出的一部分。
该方法可以是一种方法,其进一步包括:将所储存的相应存储位置的标识符和所储存的它与对应且唯一的分配标识符的关联性的指示符中的至少一者应用作为受保护指针高速缓存的设置关联输入;并且响应于受保护指针高速缓存的匹配未命中来确定对应的给定指针可能(但不必)指向被取消分配的存储器区域。
附加地,可以看出,所公开的内容包括被配置成自动地管理指向数据处理系统的存储器区域的指针的数据处理系统,该系统包括:(a)一个或多个处理器,其被配置成执行对应的一个或多个应用;(b)唯一标识符生成器,其被配置成将对应且唯一的分配标识符与对应存储器区域中的每个新分配的区域相关联(每个新分配的区域具有指向它的受保护指针);(c)受保护指针跟踪机制,其被配置成将对应且唯一的分配标识符与指向对应存储器区域的每个受保护指针的相应存储位置相关联;(d)多输入关联高速缓存,其被配置成使用唯一分配标识符在高速缓存内快速地定位与给定唯一分配标识符相关联的受保护指针的条目;以及(e)受保护指针无效机制,其可操作地耦合到多输入关联高速缓存且耦合到ID的保持列表或表格,并且被配置成从高速缓存中删除与给定唯一分配标识符相关联的所有条目,并且还从ID的保持列表或表格中删除对应的给定唯一分配标识符。
附加地,可以看出,所公开的内容包括一种数据处理机器,包括:(a)一个或多个处理器,其被配置成执行对应的一个或多个应用,该处理器响应于被储存在微代码存储区域中的微代码,其中该微代码存储区域储存:对应于给出操作码的第一实例指针的第一微代码,该第一微代码被配置成致使数据处理机器的硬件生成器生成对应且唯一的分配标识符,以用于与数据处理机器的对应存储器空间中的对应的新分配的区域的逻辑关联,其中第一实例指针指向该新分配的区域;以及对应于跟踪操作码的第二指针的第二微代码,该第二微代码被配置成自动地将受保护指针跟踪条目添加到受保护指针跟踪表中,其中该跟踪条目包括给定第二实例指针的相应存储位置的标识符和它与对应且唯一的分配标识符的关联性的指示符。
结语
尽管根据本公开的各实施例易于作出各种修改和替换构造,但其某些所解说的实施例在附图中示出并在上面被详细地描述。然而应当理解,这不旨在将本公开的各实施例限于所公开的具体形式,而是相反地,旨在覆盖落入本发明的精神和范围之内的所有修改、替换构造和等效方案。

Claims (15)

1.一种用于管理指向数据处理系统的存储器空间的已分配部分的指针的机器实现的方法,所述方法包括:
将被分配给所述存储器空间中的已分配区域的对应且唯一的分配标识符与各自指向该已分配区域的多个指针中的每一者相关联;
在多输入关联高速缓存中储存所述多个指针的至少一个子集的相关联数据,所述指针的所述至少一个子集中的每个相应的一个指针的所储存的相关联数据可标识地将所述相应指针与所述唯一分配标识符相链接,并因此与它被分配到的所述已分配区域相联接;以及
使用所述唯一分配标识符或其散列或标识其派生物的另一标识符来确定所述多个指针中的一者或多者的所述相关联数据是否存在于所述多输入关联高速缓存中。
2.根据权利要求1所述的方法,其特征在于,所述已分配区域是所述数据处理系统的虚拟存储器空间中的区域,并且所述指针的所述至少一个子集中的每个相应的一个指针的所储存的相关联数据包括储存所述对应指针处的虚拟地址。
3.根据权利要求1所述的方法,其特征在于,被储存在所述多输入关联高速缓存中的所述指针的所述至少一个子集中的每个相应的一个指针的所述相关联数据包括在所述存储器空间中所述相应指针所位于的位置的地址的散列和地址的值中的至少一者。
4.根据权利要求1所述的方法,其特征在于,被储存在所述多输入关联高速缓存中的所述指针的所述至少一个子集中的每个相应的一个指针的所述相关联数据包括针对所述相应指针的值或针对所述相应指针指向的代码或数据的一个或多个边界约束的定义。
5.根据权利要求1所述的方法,其特征在于,被储存在所述多输入关联高速缓存中的所述指针的所述至少一个子集中的每个相应的一个指针的所述相关联数据包括所述唯一分配标识符、所述唯一分配标识符的散列和可标识地将所述相应指针与所述唯一分配标识符相链接的其他数据中的至少一者。
6.根据权利要求1所述的方法,其特征在于,进一步包括:
将被分配给作为受保护指针区域的每个新分配的区域的所述唯一分配标识符添加到标识保持列表;以及
响应于所述多个指针之一的所述相关联数据不存在于所述多输入关联高速缓存中的指示,检查所述标识保持列表以确定所述唯一分配标识符在其中的存在性,所述唯一分配标识符被可识别地链接到被确定为在所述多输入关联高速缓存中不具有其相关联数据的指针。
7.根据权利要求6所述的方法,其特征在于,进一步包括:
向指针跟踪列表添加每个指向已分配区域的所述多个指针中的每一者的所述相关联数据;以及
响应于所述多个指针之一的所述相关联数据不存在于所述多输入关联高速缓存中的指示,检查所述指针跟踪列表以确定所述指针的所述相关联数据在其中的存在性,所述指针被确定为在所述多输入关联高速缓存中不具有其相关联数据。
8.根据权利要求7所述的方法,其特征在于,进一步包括:
响应于所述检查发现唯一分配标识符不存在于所述标识保持列表中的指示或响应于所述检查发现所述指针的相关联数据不存在于所述指针跟踪表中的指示,停止对指示意图使用所述指针的执行代码的执行。
9.根据权利要求7所述的方法,其特征在于,进一步包括:
从所述多输入关联高速缓存中删除被可标识地链接到所述唯一分配标识符的所有所述指针的所述相关联数据;以及
从所述标识保持列表中删除所述唯一分配标识符。
10.根据权利要求1所述的方法,其特征在于:
所述数据处理系统被配置成具有第一操作码,通过所述第一操作码,所述的在所述多输入关联高速缓存中储存所述多个指针中的至少一者的相关联数据可被自动地执行;以及
所述数据处理系统被配置成具有第二操作码,通过所述第二操作码,所述的使用所述唯一分配标识符或其散列或标识其派生物的另一标识符来确定所述多个指针中的至少一者的所述相关联数据是否存在于所述多输入关联高速缓存中可被自动地执行。
11.一种数据处理系统,所述数据处理系统被配置成自动地管理指向所述数据处理系统的存储器空间的对应部分的指针,所述系统包括:
唯一标识符生成器,所述唯一标识符生成器被配置成将对应且唯一的分配标识符与指向所述存储器空间中的新分配的区域的每个第一实例受保护指针相关联;
第一有效性验证机制,所述第一有效性验证机制使用有效标识保持表以用于储存所述已分配区域的仍然被有效地分配的相应区域的所述相应唯一分配标识符;
受保护指针跟踪机制,所述受保护指针跟踪机制使用指针跟踪表来保持跟踪所有受保护指针的位置,并且将所跟踪的受保护指针可标识地链接到它们各自的已分配区域的所述对应的唯一分配标识符;
多输入关联高速缓存,所述多输入关联高速缓存被配置成储存所述受保护指针的至少一个子集的可搜索条目,所述可搜索条目能通过所述高速缓存中的关联输入来搜索,所述关联输入包括第一关联输入并且包括第二关联输入,所述第一关联输入用于确定特定受保护指针的条目是否存在于所述高速缓存中,所述第二关联输入用于标识被可标识地链接到给定唯一分配标识符的相应受保护指针的所有条目;以及
第二有效性验证机制,所述第二有效性验证机制使用所述多输入关联高速缓存来确定可疑指针的条目是否存在于所述多输入关联高速缓存中。
12.根据权利要求11所述的系统,其特征在于,进一步包括:
第三有效性验证机制,响应于所述第二有效性验证机制的未命中确定,所述第三有效性验证机制被配置成检查所述指针跟踪表以确定所述可疑指针的条目在其中的存在性,并且还检查所述有效标识保持表以确定所述可疑指针在所述指针跟踪表内被可标识地链接到的所述唯一分配标识符在其中的存在性。
13.根据权利要求11所述的系统,其特征在于:
所述受保护指针跟踪机制包括操作码硬件和操作码固件中的至少一者,所述操作码硬件和操作码固件被配置成将由所述系统的应用软件使用的每个受保护指针的每个副本或派生物自动地储存到所述指针跟踪表中。
14.根据权利要求11所述的系统,其特征在于:
所述第二有效性验证机制包括操作码硬件和操作码固件中的至少一者,所述操作码硬件和操作码固件被配置成自动地确定可疑指针的条目是否存在于所述多输入关联高速缓存中。
15.根据权利要求11所述的系统,其特征在于,进一步包括:
受保护指针无效机制,所述受保护指针无效机制被配置成从所述多输入关联高速缓存中删除与给定唯一分配标识符相关联的所有指针条目,并且从所述有效标识保持表中删除所述给定唯一分配标识符。
CN201780016468.1A 2016-03-10 2017-03-03 受保护指针 Active CN108780425B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201662306490P 2016-03-10 2016-03-10
US62/306,490 2016-03-10
US15/198,497 US10223295B2 (en) 2016-03-10 2016-06-30 Protected pointers
US15/198,497 2016-06-30
PCT/US2017/020550 WO2017155790A1 (en) 2016-03-10 2017-03-03 Protected pointers

Publications (2)

Publication Number Publication Date
CN108780425A true CN108780425A (zh) 2018-11-09
CN108780425B CN108780425B (zh) 2023-01-10

Family

ID=59787873

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780016468.1A Active CN108780425B (zh) 2016-03-10 2017-03-03 受保护指针

Country Status (4)

Country Link
US (1) US10223295B2 (zh)
EP (1) EP3427155B1 (zh)
CN (1) CN108780425B (zh)
WO (1) WO2017155790A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112100686A (zh) * 2020-08-28 2020-12-18 浙江大学 一种基于arm指针验证的内核代码指针完整性保护方法

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10606773B2 (en) * 2017-01-04 2020-03-31 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Systems and methods for low latency access of memory between computing devices
US10872043B2 (en) * 2017-08-17 2020-12-22 Microchip Technology Incorporated Systems and methods for integrity checking of code or data in a mixed security system while preserving confidentiality
US11061575B2 (en) * 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US11074200B2 (en) * 2017-12-15 2021-07-27 Intel Corporation Use-after-free exploit prevention architecture
US11860996B1 (en) * 2018-04-06 2024-01-02 Apple Inc. Security concepts for web frameworks
US11308160B2 (en) * 2018-06-03 2022-04-19 Apple Inc. Threaded linking pointer mechanism
CN109656715A (zh) * 2018-12-10 2019-04-19 晶晨半导体(上海)股份有限公司 一种播放内存管理方法
US11568149B2 (en) * 2020-02-18 2023-01-31 Td Ameritrade Ip Company, Inc. Method and device for facilitating efficient traversal of natural language sequences
US11501002B2 (en) * 2020-07-10 2022-11-15 Dell Products L.P. Protocol security system
US11372716B2 (en) * 2020-07-28 2022-06-28 Micron Technology, Inc. Detecting special handling metadata using address verification
US20230185731A1 (en) * 2021-12-13 2023-06-15 Microchip Technology Incorporated Verification of off-chip computer-readable instructions and related systems, methods, and apparatuses
US20230208870A1 (en) * 2021-12-28 2023-06-29 SecureX.AI, Inc. Systems and methods for predictive analysis of potential attack patterns based on contextual security information
US20230208871A1 (en) * 2021-12-28 2023-06-29 SecureX.AI, Inc. Systems and methods for vulnerability assessment for cloud assets using imaging methods

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5509135A (en) * 1992-09-25 1996-04-16 Digital Equipment Corporation Multi-index multi-way set-associative cache
US6275916B1 (en) * 1997-12-18 2001-08-14 Alcatel Usa Sourcing, L.P. Object oriented program memory management system and method using fixed sized memory pools
CN101069170A (zh) * 2004-09-10 2007-11-07 卡威姆网络有限公司 数据包队列、调度和排序
CN101189575A (zh) * 2005-04-05 2008-05-28 英特尔公司 定序器地址管理
CN101533371A (zh) * 2008-03-12 2009-09-16 Arm有限公司 使用微标签的高速缓存存取
CN101681670A (zh) * 2007-04-19 2010-03-24 拉姆伯斯公司 存储器系统中的时钟同步
US20100158408A1 (en) * 2008-12-19 2010-06-24 International Business Machines Corporation Selectively transforming a multi-dimensional array
US20110219458A1 (en) * 2008-11-17 2011-09-08 Etienne Labarre Secure avionics equipment and associated method of making secure
CN102770853A (zh) * 2009-12-23 2012-11-07 思杰系统有限公司 用于在多核系统中管理大型高速缓存服务的系统和方法
CN103123604A (zh) * 2011-11-18 2013-05-29 苹果公司 跟踪数据处理系统的内存使用的方法
US20150089180A1 (en) * 2013-09-20 2015-03-26 Fujitsu Limited Arithmetic processing device, information processing device, control method for information processing device, and control program for information processing device
CN105122749A (zh) * 2013-04-23 2015-12-02 瑞典爱立信有限公司 更新链路聚合中的对话分配的方法和系统

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0481735A3 (en) * 1990-10-19 1993-01-13 Array Technology Corporation Address protection circuit
US5325496A (en) 1991-12-24 1994-06-28 Intel Corporation Selectable pointer validation in a computer system
US7752459B2 (en) 2001-12-06 2010-07-06 Novell, Inc. Pointguard: method and system for protecting programs against pointer corruption attacks
US20070005815A1 (en) * 2005-05-23 2007-01-04 Boyd William T System and method for processing block mode I/O operations using a linear block address translation protection table
US9026859B1 (en) 2012-03-14 2015-05-05 Google Inc. Safer mechanism for using pointers to code
US9165138B2 (en) 2012-07-11 2015-10-20 Leviathan Security Group, Inc. Mitigation of function pointer overwrite attacks
US8745741B1 (en) 2012-08-31 2014-06-03 Google Inc. Detecting and handling vtable pointer corruption
EP3058457A4 (en) 2013-10-15 2017-07-12 Mill Computing, Inc. Computer processor with deferred operations
US9996374B2 (en) * 2015-06-16 2018-06-12 Assured Information Security, Inc. Deployment and installation of updates in a virtual environment

Patent Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5509135A (en) * 1992-09-25 1996-04-16 Digital Equipment Corporation Multi-index multi-way set-associative cache
US6275916B1 (en) * 1997-12-18 2001-08-14 Alcatel Usa Sourcing, L.P. Object oriented program memory management system and method using fixed sized memory pools
CN101069170A (zh) * 2004-09-10 2007-11-07 卡威姆网络有限公司 数据包队列、调度和排序
CN101189575A (zh) * 2005-04-05 2008-05-28 英特尔公司 定序器地址管理
CN101681670A (zh) * 2007-04-19 2010-03-24 拉姆伯斯公司 存储器系统中的时钟同步
CN101533371A (zh) * 2008-03-12 2009-09-16 Arm有限公司 使用微标签的高速缓存存取
US20110219458A1 (en) * 2008-11-17 2011-09-08 Etienne Labarre Secure avionics equipment and associated method of making secure
US20100158408A1 (en) * 2008-12-19 2010-06-24 International Business Machines Corporation Selectively transforming a multi-dimensional array
CN102770853A (zh) * 2009-12-23 2012-11-07 思杰系统有限公司 用于在多核系统中管理大型高速缓存服务的系统和方法
CN103123604A (zh) * 2011-11-18 2013-05-29 苹果公司 跟踪数据处理系统的内存使用的方法
CN105122749A (zh) * 2013-04-23 2015-12-02 瑞典爱立信有限公司 更新链路聚合中的对话分配的方法和系统
CN105122748A (zh) * 2013-04-23 2015-12-02 瑞典爱立信有限公司 实现链路聚合组的对话敏感收集的方法和系统
US20150089180A1 (en) * 2013-09-20 2015-03-26 Fujitsu Limited Arithmetic processing device, information processing device, control method for information processing device, and control program for information processing device

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112100686A (zh) * 2020-08-28 2020-12-18 浙江大学 一种基于arm指针验证的内核代码指针完整性保护方法

Also Published As

Publication number Publication date
EP3427155B1 (en) 2021-02-24
WO2017155790A1 (en) 2017-09-14
EP3427155A1 (en) 2019-01-16
US20170262387A1 (en) 2017-09-14
CN108780425B (zh) 2023-01-10
US10223295B2 (en) 2019-03-05

Similar Documents

Publication Publication Date Title
CN108780425A (zh) 受保护指针
CN107771335B (zh) 受保护区域
CN109583152A (zh) 用于隔离的密码强制执行能力
GB2563883B (en) Invalidation of a target realm in a realm hierarchy
US11263155B2 (en) Managing fusion of memory regions and ownership attributes for fused memory regions
Silvestro et al. Guarder: A tunable secure allocator
US20200401441A1 (en) Masking of architectural state associated with a realm
EP3867763B1 (en) Trusted intermediary realm
KR20200023377A (ko) 변환 캐시 록업을 위한 영역 식별자 비교
TWI818079B (zh) 使用用於領域安全性配置參數的參數簽名的設備、方法、電腦程式以及儲存媒體
JP7376571B2 (ja) 有界ポインタの使用を制御するための装置及び方法
US20200150970A1 (en) Exception return instruction
KR20230017832A (ko) Tag 체킹 장치 및 방법
KR20200023376A (ko) 메모리 영역 로킹
Park et al. Libmpk: software abstraction for Intel memory protection keys
WO2019002813A1 (en) SUB-SCORES
KR20200023379A (ko) 영역 실행 컨텍스트 마스킹 및 세이빙
WO2019002815A1 (en) EXPORT INTERRUPTION OF MEMORY REGIONS
US11237957B2 (en) Scrub-commit state for memory region
GB2564097A (en) Memory region locking
GB2563882B (en) Interrupting sequences of command actions performed upon memory regions
Park Comprehensive Protection for Dynamically-typed Languages: Avoiding the Pitfalls of Language-level Sandboxing
Jaamoum Strategies for securing cache memories against software side-channel attacks
GB2563886A (en) Realm management unit-private memory regions

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