TW202129491A - 域轉換禁用配置參數 - Google Patents
域轉換禁用配置參數 Download PDFInfo
- Publication number
- TW202129491A TW202129491A TW109143577A TW109143577A TW202129491A TW 202129491 A TW202129491 A TW 202129491A TW 109143577 A TW109143577 A TW 109143577A TW 109143577 A TW109143577 A TW 109143577A TW 202129491 A TW202129491 A TW 202129491A
- Authority
- TW
- Taiwan
- Prior art keywords
- domain
- mode
- security
- function
- instruction
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30054—Unconditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/1416—Protection 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/1425—Protection 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/1441—Protection 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/55—Detecting local intrusion or implementing counter-measures
- G06F21/554—Detecting local intrusion or implementing counter-measures involving event detection and direct action
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/30105—Register structure
- G06F9/30116—Shadow registers, e.g. coupled registers, not forming part of the register space
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/323—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Storage Device Security (AREA)
- Executing Machine-Instructions (AREA)
- Optical Communication System (AREA)
- Steering Control In Accordance With Driving Conditions (AREA)
- Curing Cements, Concrete, And Artificial Stone (AREA)
Abstract
處理電路系統4具有安全域及次安全域。控制儲存位置32儲存域轉換禁用配置參數34,其指定在處理電路系統4之至少一種模式中啟用還是禁用安全域與次安全域之間的域轉換。在處理電路系統之該至少一種模式中,當域轉換禁用配置參數34指定在所述至少一種模式中禁用所述域轉換時,回應於在任一方向上在域之間轉換的嘗試而傳信禁用域轉換故障。對於預期僅需要另一種域之線程而言,此可有助於支持對安全域或次安全域之資源的延遲配置。
Description
本發明技術係關於資料處理之領域。
處理電路系統可具有包括安全域及次安全域之諸多安全域。記憶體存取電路系統可控制基於當前操作域而是否允許記憶體存取。可能不允許在次安全域中操作之代碼存取儲存在記憶體之安全區域中的資料或程式碼。此可有助於將安全應用程式與由次安全應用程式進行之不當存取隔離開。
至少一些實例提供一種裝置,其包括:處理電路系統,用以在包括至少安全域及次安全域之複數個安全域中的一者中執行資料處理;記憶體存取檢查電路系統,用以檢查取決於處理電路系統之當前安全域是否允許記憶體存取;以及控制儲存位置,用以儲存域轉換禁用配置參數,該域轉換禁用配置參數指定在處理電路系統之至少一種模式下啟用還是禁用安全域與次安全域之間的域轉換;其中:在處理電路系統之所述至少一種模式下,當域轉換禁用配置參數指定在所述至少一種模式下禁用所述域轉換時,處理電路系統經配置以:回應於自安全域至次安全域之轉換嘗試觸發禁用域轉換故障的傳信;以及回應於自次安全域至安全域之轉換嘗試觸發禁用域轉換故障的傳信。
至少一些實例提供一種資料處理方法,其包括:使用裝置執行資料處理,該裝置包括用以在包括至少安全域及次安全域之複數個安全域中的一者中執行資料處理之處理電路系統,及用以檢查取決於處理電路系統之當前安全域而是否允許記憶體存取之記憶體存取檢查電路系統;在控制儲存位置處儲存域轉換禁用配置參數,該域轉換禁用配置參數指定在處理電路系統之至少一種模式下啟用還是禁用安全域與次安全域之間的域轉換;以及在處理電路系統之所述至少一種模式中,回應於進行安全域與次安全域之間的域轉換之嘗試,當域轉換禁用配置參數指定在所述至少一種模式中禁用所述域轉換時,觸發禁用域轉換故障的傳信,而無論所嘗試之域轉換為自安全域至次安全域還是自次安全域至安全域。
至少一些實例提供一種電腦程式,用於控制主機資料處理裝置以提供用於執行指令的指令執行環境;該電腦程式包括:處理程式邏輯,用以在包括至少安全域及次安全域之複數個安全域中的一者中執行資料處理;記憶體存取檢查程式邏輯,用以檢查取決於處理程式邏輯之當前安全域是否允許記憶體存取;以及配置參數設定程式邏輯,用以在控制儲存位置處儲存域轉換禁用配置參數,該域轉換禁用配置參數指定在處理程式邏輯之至少一種模式下啟用還是禁用安全域與次安全域之間的域轉換;其中:在處理程式邏輯之所述至少一種模式下,當域轉換禁用配置參數指定在該至少一種模式下禁用所述域轉換時,處理程式邏輯經配置以回應於自安全域至次安全域之轉換嘗試觸發禁用域轉換故障的傳信;以及回應於自次安全域至安全域之轉換嘗試觸發禁用域轉換故障的傳信。
一種可儲存上述電腦程式之電腦可讀儲存媒體。該儲存媒體可為非暫時性儲存媒體。
模式間調用分支指令
在其中處理電路系統支持處置器模式及線程模式之系統中,人們通常期望將處置器模式用於處理異常處置器(例如,與作業系統或其他監督軟體相關聯),及將線程模式用於處理由作業系統或監督軟體所管理之線程的後台代碼。然而,有時可能存在將指向可能不受信任的設備(諸如,USB控制器或無線網路介面)之一些類型的異常。指向此些設備之中斷可由第三方提供之異常處置器代碼處理,該第三方不同於提供管理處理系統的一般操作之作業系統的一方。作業系統提供者可能不信任另一方所提供之代碼,且因而可能希望用於控制此些不受信任的設備之不受信任的異常處置器代碼不應具有與處置器模式相關聯之完全特權。因此,可能期望能夠將異常「解除特權」,以使得異常處置器可能無法存取處置器模式下之代碼通常能夠存取之所有暫存器或記憶體。又,在其中設備上運行之所有軟體皆來自同一供應商之情形下,可能期望降低特權軟體之複雜性,並因此降低特權軟體中存在安全漏洞之可能性。如此,作為深度防禦策略的一部分,即使在所有軟體皆來自單個供應商之情形下,仍可能期望將異常「解除特權」。
然而,在具有處置器模式及線程模式之典型系統中,在模式之間切換的機制可能用以使異常自線程模式切換至處置器模式,且使異常返回以切換回線程模式。簡單地觸發異常返回至線程模式可能並不適當,因為此通常會降低與原始異常相關聯之優先級,從而導致難以適當地判定不同中斷或異常之優先級。因而,時常,可能需要產生「偽」第二異常,僅用以設置異常返回控制資訊,該資訊在自第二異常返回時會導致原始異常在線程模式下而非在處置器模式下被處理。此種機制可能緩慢,因為調用第二異常不僅會導致用於設置偽異常返回操作之操作的效能成本,而且會導致額外的狀態保存及恢復操作之成本,該等額外的狀態保存及恢復操作通常對異常進入及返回執行,以便保留與在異常之前執行的進程相關聯之架構狀態。因而,若使用異常進入及返回機制來將異常處置器解除特權,則此可能會增加總的中斷/異常處理潛時,此在一些系統中可能不可接受,尤其係在旨在用於即時應用程式之系統中。又,此方法可能難以為編譯器編碼,從而導致可能的錯誤。
在以下所述實例中,提供模式間調用分支指令,其指定分支目標位址。回應於模式間調用分支指令,至少當處理電路系統處於處置器模式時,指令解碼器控制處理電路系統以將函數返回位址保存至函數返回位址儲存位置,將處理電路系統之當前模式切換為線程模式,並分支至由分支指令所指定之分支目標位址所標識的指令。因而,提供一種函數調用機制,其中指令可直接分支至將接著在線程模式中而非處置器模式中處理之指令的分支目標位址。此提供了用於將異常解除特權之更快速且更簡單的機制,從而消除了對如上所述之偽第二異常的需要。
除了處置器模式及線程模式以外,處理電路系統亦可支持在包括至少安全域及次安全域之諸多安全域中的一者中之資料處理。可提供記憶體存取檢查電路系統,以取決於處理電路系統之當前安全域來檢查是否允許進行記憶體存取。舉例而言,記憶體存取檢查電路系統可維護提供安全屬性之表,該等安全屬性將相應的位址區域定義為與安全域相關聯之安全區域或與次安全域相關聯之次安全區域。當在安全域中操作時,處理電路系統可對記憶體之安全區域及次安全區域進行存取,而在次安全域中時,處理電路系統可對次安全區域進行存取但不准許存取安全區域。
指令解碼器及處理電路系統可支持指定分支目標位址之域間調用分支指令。回應於域間調用分支指令,指令解碼器可控制處理電路系統,以將函數返回位址保存至函數返回位址儲存位置,分支至由分支目標位址所標識之指令,並切換處理電路系統之當前安全域。因而,藉由准許自一個域直接分支至另一域,亦可使得安全域之改變更為快速。在一些系統中,域間調用分支指令可在兩個方向上均受支持,自安全域至次安全域及自次安全域至安全域。然而,在其他實施中,可能不必要為切換域之兩個方向均提供域間調用分支指令。舉例而言,在一些實施中,域間調用分支指令可為觸發自安全域至次安全域之切換之安全至次安全的調用分支指令,且可提供其他機制以自次安全域轉換至安全域(例如,取而代之,安全閘道指令可能會導致域自次安全域切換至安全域,使得可藉由要求安全閘道指令存在於第一位址來限制可進入安全域之有效位置,該第一位址係在執行來自記憶體之次安全區域的指令之後自記憶體之安全區域獲取)。一些實施可使用類似方案以防止代碼在特權較低的狀態下運行,從而僅存取標記為特權之記憶體的區域。
因而,可支持諸多調用分支指令,此使得處理電路系統執行保存函數返回位址及分支至在分支目標位址處的指令之函數調用操作。此些操作可包括保持在同一模式及域內之調用分支指令,以及觸發至線程模式之切換的模式間調用分支指令及觸發安全域的改變之域間調用分支指令。然而,可能禁止回應於同一調用分支指令之模式及域的組合切換。因而,回應於模式間調用分支指令,指令解碼器可控制處理電路系統以將當前模式切換至線程模式,而不會改變處理電路系統之當前安全域。此可藉由減少被准許之安全域之有效轉換的數目而增大安全性,從而使得更簡單地驗證安全域之改變係安全的。
回應於模式間函數返回指令,處理電路系統可將處理電路系統之當前模式切換回處置器模式,且分支至先前由模式間調用分支指令保存的由函數返回位址所標識之指令。因而,當異常處置器之解除特權的部分完成時,模式間函數返回指令可用以觸發切換回處置器模式,當發生對應異常時,處理電路系統首先在處置器模式下執行。
在一些實例中,模式間函數返回指令可為專用函數返回指令,其具有由指令解碼器標識為需要函數返回操作之編碼。
然而,此並非必需的,且在一些情形下,指令是否引起模式間函數返回可能取決於在執行該指令時儲存在暫存器或記憶體中的資訊。舉例而言,模式間函數返回可能由試圖分支至已保留的不可執行之位址(以下稱作虛設函數返回位址,例如,第5圖中所示之FNC_RETURN位址140,此將在稍後更詳細地描述)觸發。因為模式間函數返回指令可能係異常處置器之解除特權部分內不受信任代碼的一部分,所以若模式間函數返回指令具有與非模式間函數返回指令(其並不旨在觸發自線程模式至處置器模式之切換,因為異常處置器之解除特權部分可能由並不知曉其異常處置器被解除特權之第三方提供)相同之指令編碼,則此可為有用的。
在一些實例中,回應於模式間調用分支指令,指令解碼器可控制處理電路系統以將虛設函數返回位址保存至鏈路暫存器。虛設函數返回位址可為已保留的位址範圍中之位址,其並非有效的可執行位址。虛設函數返回位址可包括模式間調用指示值,以指示回應於模式間調用分支指令保存了虛設函數返回位址。若指令試圖分支至虛設函數返回位址,當虛設函數返回位址包括模式間調用指示值時,則處理電路系統可將彼指令視為模式間函數返回指令,並切換至處置器模式,以及分支至自堆疊獲得之實際函數返回位址。因而,藉由將模式間調用指示值儲存在虛設函數返回位址內,可區分模式間函數返回與非模式間返回,以使得同一指令編碼可用於兩種類型之函數返回。此意謂不需要修改第三方解除特權異常處置器代碼以支持上述模式間分支技術。又,藉由使用鏈路暫存器中之不可執行的虛設函數返回位址來表示在函數返回時應自堆疊存取實際函數返回位址,此可對在模式間調用分支指令之後在線程模式下執行的解除特權代碼隱藏實際函數返回位址。
模式間函數返回指令可為可導致分支至虛設函數返回位址之諸多類型指令中的一者(例如,分支指令),或導致程式計數被設定至虛設函數返回位址之非分支指令(諸如,暫存器移動指令、加載指令或堆疊彈出指令)。因而,在一些實施中,可能處理電路系統(而非指令解碼器)標識應執行模式間函數返回且因此亦應觸發切換至處置器模式。在一些實例中,若所有類型之分支將虛設函數返回位址指定為分支目標位址,則該等所有類型之分支可能會導致函數返回處理。在其他實例中,可能存在一些類型之分支,即使其確實將虛設函數返回位址指定為分支目標位址,亦不會導致執行函數返回處理(例如,使用立即值指定目標位址之分支可能不會導致執行函數返回處理,因為其不應需要執行函數返回,因為立即指定的分支目標位址已無法回應於函數調用指令而被保存)。
不同於模式間調用分支指令,對於模式間函數返回指令而言,可能期望准許域及模式之組合切換。因而,回應於模式間函數返回指令,處理電路系統可能能夠執行自在第一安全域及線程模式中的處理至在第二安全域及處置器模式中的處理之組合域/模式切換。此對於支持尾部調用係有用的,尾部調用係一些編譯器在將第二函數稱為對第一函數執行之代碼中的最後一個動作之情境中使用的效能最佳化。因為可在與第一函數不同之安全域中處理第二函數,所以此可有用於模式間函數返回指令支持組合域/模式切換,以使得先前藉由尾部調用編譯之舊代碼仍可正常運行。
然而,在一些情形下,模式間函數返回時之組合域/模式切換可在第一安全域為安全域且第二安全域為次安全域時被准許,但在第一安全域為次安全域且第二安全域為安全域時被禁止。藉由在函數返回時之組合域/模式切換會導致轉換至安全域時將其禁止,此可藉由減少可用於至安全域中之有效進入途徑的數目來提高安全性。
如以下進一步描述,可提供域轉換禁用配置值,以指示禁用還是啟用在線程模式中時安全域與次安全域之間的轉換。此可有用於支持與安全或次安全域中的一者相關聯之資源的延遲分配。因為通常異常處置器或正執行模式間調用分支指令之其他進程可能會知曉是否已配置了在兩種域中操作所需之資源,所以回應於模式間調用分支指令來設定域轉換禁用配置值可為有用的。此藉由避免需要執行單獨的指令以設定域轉換禁用配置值而提高了效能。模式間調用分支指令具有一或更多種變體。回應於模式間調用分支指令之第一變體,指令解碼器可控制處理電路系統以設定域轉換禁用配置值,以便指示在線程模式中時安全域與次安全域之間的轉換被禁用。回應於模式間調用分支指令之第二變體,指令解碼器可控制處理電路系統以設定域轉換禁用配置值,以便指示在線程模式中時安全域與次安全域之間的轉換被啟用。一些系統可支持模式間調用分支指令之兩種變體。其他系統可能僅支持模式間調用分支指令之第一/第二變體中的一者。
回應於模式間調用分支指令,當處理電路系統之當前模式為線程模式時,指令解碼器可觸發故障的傳信。因為模式間調用分支指令旨在引起處置器模式至線程模式的轉換,所以自線程模式執行該指令可為錯誤指示。在此情形下,引發故障會防止誤用。舉例而言,因為執行模式間調用分支指令會觸發狀態的保存,此狀態指示在對應的函數返回時應進行自線程模式至處置器模式之轉換,因此攻擊者可能會趨向於在線程模式下運行進程以使用模式間調用分支指令試圖獲得對應函數返回時之特權。藉由防止在線程模式下成功執行模式間調用分支指令並在試圖執行此操作時傳信故障,此情形藉由防止此類攻擊成功而提高了安全性。
大體而言,函數返回指令可為導致分支至由先前回應於調用分支指令設定之函數返回位址所標識的指令之任何指令。模式間函數返回指令為特定類型之函數返回指令,其亦觸發在當前模式下自線程模式至處置器模式之切換(例如,可藉由儲存在暫存器或記憶體中之資訊或藉由將分支目標作為保留的虛設函數返回位址來區分模式間函數返回與非模式間函數返回)。若在當前模式為處置器模式時遭遇模式間函數返回指令,則可傳信故障。此可提高安全性。在模式間函數調用中,一些資訊可能被保存在記憶體中之堆疊資料結構上的堆疊訊框中。若在當前模式為處置器模式時試圖執行模式間函數返回,則此可表明函數返回轉換並非預期使用彼堆疊訊框之預期轉換,此情形在堆疊訊框上之資訊被誤用時會損害安全性。藉由強制僅在處置器模式下才可成功執行模式間返回分支指令,此降低了面對此些攻擊之漏洞。
處理器架構可提供鏈路暫存器,該鏈路暫存器被指定用於回應於調用分支指令來儲存函數返回位址。鏈路暫存器亦可用作通用暫存器,但在函數調用時用以儲存函數返回位址,在函數完成後,處理將分支至該函數返回位址。對於除了模式間調用分支指令以外的至少一個調用分支指令而言,可將鏈路暫存器用作函數返回位址儲存位置。然而,對於模式間調用分支指令而言,函數返回位址儲存位置可為儲存在記憶體中之堆疊資料結構上的位置。包括堆疊資料結構之記憶體區域可為線程模式不可存取之區域(例如,因為定義了對對應位址區域之存取權限的記憶體保護資料指示具有與線程模式相關聯的特權級別之代碼不可存取該區域,及/或因為用於指向堆疊資料結構之堆疊指標處於在線程模式下不可存取之暫存器中)。藉由將函數返回位址保存至堆疊中而非保存至鏈路暫存器中,此防止了在模式間函數調用之後在線程模式下執行的解除特權代碼可見函數返回位址,從而藉由減少攻擊者查看或修改與在處置器模式下執行之特權更大代碼的操作有關之資訊的機會來提高安全性。
如上所述,回應於模式間調用分支指令,可將虛設函數返回位址保存至鏈路暫存器。然而,應注意,在對應函數返回指令試圖分支至虛設函數返回位址之處,此虛設函數返回位址可能不再儲存在鏈路暫存器中。一些編譯器可能產生代碼以使得虛設函數返回位址保留在鏈路暫存器中,且若另一函數嵌套在先前調用之函數內,則編譯後的代碼可能將虛設函數返回位址保存至記憶體中之堆疊,並接著在嵌套函數完成之後將虛設函數返回位址恢復至鏈路暫存器,以使得在自第一函數返回之處,虛設函數返回位址再次位於鏈路暫存器中。然而,此並非必需的。其他編譯器可能編譯自嵌套函數調用返回時不會將虛設函數返回位址恢復至鏈路暫存器之代碼,反而藉由在需要對應函數返回時將虛設函數返回位址直接自堆疊加載至程式計數暫存器中來提高效能,從而有效地導致分支至虛設函數返回位址,此可接著被偵測為需要自堆疊獲得實際函數返回位址。因而,在函數返回時,並不必需將虛設函數返回位址仍儲存在鏈路暫存器中。應注意,在將虛設函數返回位址保存至堆疊以實現函數調用的嵌套之情形下,當執行模式間調用分支指令時,用以儲存虛設函數返回位址之堆疊可為與用以儲存實際函數返回位址之堆疊資料結構不同的堆疊資料結構。舉例而言,用以回應於模式間調用分支指令來儲存實際函數返回位址之堆疊可為與處置器模式相關聯之主要堆疊,而若在線程模式下執行之解除特權代碼內存在函數調用的嵌套,則先前在鏈路暫存器中之虛設函數返回位址可被保存至與線程模式相關聯之進程堆疊資料結構。
虛設函數返回位址可包括用於在試圖進行對應函數返回時控制操作之各段資訊。舉例而言,虛設函數返回位址可指示以下各者中之至少一者:是否回應於試圖分支至虛設函數返回位址之指令而請求自線程模式至處置器模式之切換;是否回應於試圖分支至虛設函數返回位址之該指令而請求處理電路系統之當前安全域的切換;以及複數個堆疊資料結構中之哪一者應被用作將回應於試圖分支至虛設函數返回位址之該指令而自其獲得函數返回位址之堆疊資料結構。因而,在函數返回時,處理電路系統可使用虛設函數返回位址中之資訊以判定是否切換模式、切換域,及/或判定將哪一堆疊資料結構用於獲得函數返回位址。在一些實例中,虛設函數返回位址可指示使用如下兩個位元之此三段資訊:第一位元,指示是否回應於模式間調用分支指令來設定虛設函數返回位址;及第二位元,指示從中進行模式間函數調用之安全域。可自此兩個位元推斷出應使用哪一堆疊資料結構,從而可能不需要顯式指示。然而,應瞭解,此僅為在虛設函數返回位址內對資訊編碼之一種方式,且其他方法可採取不同選項。又,一些實施可能不指示上述三種類型之資訊中的全部。
虛設函數返回位址之預定部分可指示是否將回應於試圖分支至虛設函數返回位址之指令而請求處理電路系統之當前安全域的切換。舉例而言,此預定部分可為虛設函數返回位址之最低有效位元。回應於在當前安全域為次安全域時之安全閘道指令,處理電路系統可將返回位址(例如,在鏈路暫存器中之位址)的一部分設定為指示次安全狀態之值,其中彼部分在返回位址值內處於與指示虛設函數返回位址中之域切換的部分相同之相對位置。此方法可藉由緩解如下攻擊而有助於提高安全性:基於次安全代碼,在自次安全域中調用安全函數時,將偽返回位址傳遞至安全代碼,以試圖使安全代碼中之對應返回分支跳轉至安全域中的任意位置而非返回至次安全域中之位址。安全閘道指令可為在自次安全域執行時觸發自次安全域至安全域之切換的指令,且處理電路系統可在自安全域獲取之第一指令在次安全域中執行指令之後並非安全閘道指令時觸發故障的傳信。因而,可預期安全閘道指令將出現在進入安全域之有效進入點處,因此可在進入安全域時對次安全代碼所設定之返回位址進行清理,以指示無法信任該返回位址以導致分支至安全域中之任意位址。當在安全域中執行預定類型之分支指令(其將具有被設定為指示次安全狀態之值的部分之位址指定為分支目標位址)時,此導致處理電路系統切換回次安全域,而無論該目標位址係對應於記憶體中之安全區域還是次安全區域。因而,可在預期使用由次安全域控制之分支目標位址的彼些分支處寫入安全代碼以包括預定類型之分支指令,因此此可提供對上述攻擊類型之防範。模式間函數返回分支可能面臨類似攻擊之風險,因此,藉由對虛設函數返回位址編碼以使得用以傳信是否在與被設定為指示次安全狀態的值之返回位址的部分相同之相對位置處回應於安全閘道指令而請求安全域的切換,此亦會保護模式間函數返回分支免受攻擊。
鏈路暫存器可為在線程模式下執行的代碼可存取之暫存器。因而,雖然使用儲存在鏈路暫存器中之虛設函數返回位址來提供指示是否應將對應的函數返回視為模式間調用之資訊很方便,但放置在虛設函數返回位址中之資訊可能容易被在線程模式下執行之低特權代碼修改。為了防範基於惡意修改虛設函數返回位址之攻擊,回應於模式間調用分支指令,指令解碼器可控制處理電路系統以將交叉檢查值保存在被保存至堆疊資料結構之堆疊訊框中之第一相對位置的至少一部分中。其中保存有交叉檢查值之堆疊資料結構可為在線程模式下執行之代碼不可存取的堆疊。回應於試圖分支至位址的虛設函數之至少一種類型的指令,處理電路系統可比較用於編碼模式間調用指示值之虛設函數返回位址的一部分與在自堆疊資料結構獲得之堆疊訊框的第一相對位置之至少一部分中的值,以基於該比較來判定是否觸發故障的傳信。因而,雖然虛設函數返回位址可能傳信是否確實有必要存取堆疊資料結構上之堆疊訊框,但堆疊訊框中之交叉檢查值可提供對於指示函數返回時模式改變的任何資訊皆可被信任之雙重檢查,以增大安全性。可對虛設函數返回位址中之安全域指示進行類似檢查。
回應於除了模式間調用分支指令以外之至少一種類型的調用分支指令,指令解碼器可控制處理電路系統,以將除了交叉檢查值以外之值保存在被保存至堆疊資料結構之堆疊訊框內的第一相對位置之至少一部分中。因而,交叉檢查亦可防範嘗試使用模式間函數返回作為自經由非模式間調用分支指令進入之代碼返回的機制之攻擊。此類型之失配函數調用及函數返回會導致基於記憶體中之失配堆疊訊框的漏洞。因而,若試圖修改虛設函數返回位址以指示進行模式間函數返回,但記憶體中之對應堆疊資料結構實際上係藉由非模式間調用分支指令保存至記憶體,則交叉檢查可能失敗,且因而可觸發故障。
回應於模式間調用分支指令,指令解碼器可控制處理電路系統以將指示處置器模式之值保存在被保存至堆疊資料結構之堆疊訊框中的第二相對位置之至少一部分中。第二相對位置可為與第一相對位置相同之位址(在此情形下,用於模式間調用指示值及指示處置器模式之值的交叉檢查資訊可處於堆疊上之同一資料字內的不同位元部分中),或可為堆疊訊框內對應於第一相對位置的不同位址之不同相對偏移量。回應於試圖在虛設函數返回位址包括模式間調用指示值時分支至虛設函數返回位址之至少一種類型的指令,處理電路系統可在堆疊訊框中之第二相對位置的相關部分中之值不指示處置器模式時觸發故障的傳信。因而,若虛設函數返回位址指示線程模式至處置器模式之函數返回,但記憶體中之堆疊訊框指示對應的函數調用最初並非來自處置器模式,則可觸發故障。再次,此防範了一些形式的攻擊。
一些實施可提供在第一相對位置處的交叉檢查值及在堆疊上之第二相對位置處的處置器模式指示值。其他實施可省去此些類型之交叉檢查中的一者,且可僅提供交叉檢查值或處置器模式指示值。
回應於試圖在虛設函數返回位址包括模式間調用指示值時分支至虛設函數返回位址之至少一種類型的指令,處理電路系統可執行對自堆疊資料結構獲得之函數返回位址的檢查。在將處理電路系統之當前模式切換至處置器模式之前,處理電路系統可檢查自堆疊資料結構獲得之函數返回位址是否在保留位址(禁止自該等保留位址進行指令執行)之預定範圍中。當函數返回位址在保留位址之預定範圍中時,可觸發歸因於執行線程模式之程式碼的故障。此類型之檢查可為有用的,因為當執行模式間調用分支指令時,可將函數返回位址保存至被保存至堆疊資料結構之堆疊訊框內的第三相對位置,且對於由異常條件所觸發之至少一種類型的異常轉換而言,異常控制電路系統可儲存堆疊訊框,該堆疊訊框包括儲存在該堆疊訊框內之第三相對位置處的保留位址之預定範圍之一。因而,藉由針對模式間函數返回檢查函數返回位址是否為保留位址之預定範圍之一,此會防範基於試圖基於堆疊訊框(該堆疊訊框實際上係回應於異常進入轉換並非函數調用轉換而保存的)執行函數返回之攻擊,否則攻擊會導致危及安全性之不可預測結果。對函數返回位址之檢查亦可幫助防止其他類型之攻擊。舉例而言,若在堆疊訊框內之第三個相對位置中用另一保留值(來自保留位址之預定範圍)將堆疊之開頭密封,則亦將會偵測到試圖使堆疊下溢(亦即,當堆疊為空時使用堆疊訊框)並傳信故障。
作為對模式間函數返回指令之檢查的一部分,檢查函數返回位置是否在保留的位址範圍中似乎可能冗餘,因為吾人可能希望試圖自保留位址之預定範圍執行指令而導致的故障應在試圖自保留位址之一中獲取指令時被觸發。然而,發明人認識到,對於模式間函數返回而言,若允許模式間函數返回成功地完成以使得模式切換至處置器模式,且接著隨後在試圖自函數返回位址獲取下一指令時觸發故障,則此故障可能歸因於在處置器模式下執行之代碼,而非在切換至處置器模式之前在線程模式下執行之代碼。此可能為問題,因為處置器代碼可能與作業系統相關聯,因而此故障可導致懷疑作業系統操作有故障,此可能需要執行相對侵入性之動作,諸如,完全系統重設。因此,藉由此方法,此可為攻擊者提供一種方式,用以執行旨在破壞處理系統之正確功能的拒絕服務攻擊(藉由基於異常堆疊訊框反覆地觸發函數返回)。
相反,使用在此所述之方法,其中在處理模式間函數返回指令時(在觸發自線程模式切換至處置器模式的任何模式切換之前)要先檢查函數返回位址是否在保留的位址範圍內,故障可歸因於線程模式代碼,且因而故障處理動作對系統功能之影響可能要低得多(例如,僅殺死並重新啟動單個線程),從而減少了拒絕服務攻擊之機會,並因而提高安全性。
出於可靠性及安全性目的,一些實施可具有錯誤偵測/校正電路系統,用於偵測由硬體故障或臨時故障引起之瞬時或永久的錯誤。舉例而言,錯誤偵測/校正電路系統可包括使用錯誤偵測/校正代碼來偵測儲存於暫存器或記憶體中之資料中的錯誤之電路系統,該等錯誤可能係由粒子撞擊或由儲存元件卡在(例如)0或1所引起的。錯誤偵測/校正電路系統亦可包括冗餘處理邏輯,該冗餘處理邏輯可將同一操作執行兩次或更多次,以使得可自彼些操作之冗餘結果的比較中偵測出錯誤。錯誤偵測/校正電路系統之特定形式可能取決於系統的需要而在系統之間發生明顯地變化。出於與上述拒絕服務攻擊情境類似之原因,可為有用的是將已偵測到的任何錯誤歸因於特定的資料處理上下文,以使得可更高效地解決錯誤(例如,藉由若錯誤實際上發生在與特定線程相關聯之資料處理中,則可避免需要殺死作業系統並執行侵入式系統重設)。
為了能夠隔離錯誤,回應於模式間調用分支指令,指令解碼器可控制處理電路系統以執行錯誤同步屏障操作,以將與在錯誤同步屏障操作之前執行的資料處理相關聯之錯誤偵測與和在錯誤同步屏障操作之後執行的資料處理相關聯之錯誤偵測隔離開。類似地,對於模式間函數返回指令而言,此亦可觸發錯誤同步屏障操作。舉例而言,錯誤同步屏障操作可包括:暫停處理,直至任何未完成操作皆已完成,且對在錯誤同步屏障操作之前執行的任何操作的任何錯誤檢查之結果皆可用,且已知曉早先處理之結果是否正確。因而,此允許將出現之任何錯誤更佳地指向其中發生錯誤之特定代碼。在一些系統中,模式間調用分支指令及模式間函數返回指令可始終觸發錯誤同步屏障操作。其他系統(例如,不具有可靠性/安全性錯誤檢查電路系統中之任一者的彼些系統)可能不支持錯誤同步屏障操作。在其他實例中,可提供一些配置狀態資料,其控制模式間調用分支指令及模式間函數返回指令是否觸發錯誤同步屏障操作。藉由允許由軟體配置錯誤同步屏障操作的存在,單個晶片可更佳地滿足不同市場之需求,例如,在效能比錯誤隔離更重要的地方,或反之亦然。
一些實施可提供兩個或更多個堆疊指標暫存器,其包括每個安全域之進程堆疊指標暫存器及每個安全域之主要指標暫存器(在只有一個安全域之系統中,可能只有單個進程堆疊指標暫存器及單個主要堆疊指標暫存器,而在支持多個安全域之系統中,堆疊指標暫存器可按每個安全域存入)。選擇電路系統可針對每一安全域選擇應使用哪一堆疊指標暫存器來提供用於存取記憶體中之堆疊資料結構的堆疊指標。在處置器模式中,選擇電路系統可選擇用於當前安全域之主要堆疊指標暫存器。在線程模式中,選擇電路系統可基於當前域之堆疊指標選擇值,在當前域之主要堆疊指標暫存器與進程堆疊指標暫存器之間進行選擇。為處置器模式及線程模式提供單獨的主要堆疊及進程堆疊可使異常處置器代碼之開發更簡單,因為其意謂異常處置器可能留在主要堆疊資料結構上之任何資料可能大體對於在異常返回之後在線程模式下運行的線程而言係不可存取的。在一些實施中,將單獨堆疊用於線程及處置器模式亦可有助於防範基於偽造假異常返回堆疊訊框之某些類型的攻擊。然而,在一些情境中(例如,其中可用記憶體有限),可能期望允許線程模式代碼與處置器模式而非使用單獨進程堆疊之線程模式共享由主要堆疊指標所標識之主要堆疊。因此,可提供堆疊指標選擇值(由高特權代碼控制)以定義應在線程模式中使用哪一堆疊。
回應於模式間調用分支指令,指令解碼器可控制處理電路系統以設定當前安全域之堆疊指標選擇值,以指示當處於線程模式時應選擇進程堆疊指標暫存器。此可防止將在模式間函數調用存取資訊(其為高特權代碼)之後執行的異常處置器之解除特權部分可能留在主要堆疊結構上,從而提高了安全性。
可提供模擬器電腦程式以用於控制主機資料處理裝置,以提供用於執行來自目標程式碼的指令之指令執行環境。電腦程式可具有模擬上述處理電路系統、異常控制電路系統及指令解碼器之功能的處理程式邏輯、異常控制程式邏輯及指令解碼程式邏輯。此包括支持如上所述之模式間調用分支指令。因而,此模擬器電腦程式可向在模擬器電腦程式上執行之目標代碼呈現與可由實際硬體裝置所提供之指令環境類似的指令環境,即使在執行模擬器電腦程式之主機電腦中可能沒有提供此些特徵之任何實際硬體。此可有用於在實際上不支持一種指令集架構之主機平台上執行為該架構所編寫之代碼。又,當軟體開發與支持新版本指令集架構之硬體設備的開發並行地執行時,模擬器可在針對新版本指令集架構之軟體開發期間有用,以使得可在模擬中測試正開發之軟體,從而使得可在支持新版本指令集架構之硬體設備準備就緒之前開始軟體開發。
域轉換禁用配置參數
如上所述,處理電路系統可具有包括至少安全域及次安全域之諸多安全域,且可提供記憶體存取檢查電路系統,以取決於處理電路系統之當前安全域來檢查是否允許記憶體存取。舉例而言,此記憶體存取檢查可基於屬性資料,該屬性資料定義記憶體區域被視為安全的還是次安全的,且當在次安全域中操作時,對安全區域之存取可被禁止。
可提供控制儲存位置以儲存域轉換禁用配置參數,該域轉換禁用配置參數指定在處理電路系統之至少一種模式下要啟用還是禁用安全域與次安全域之間的域轉換。在彼至少一種模式中,當域轉換禁用配置參數指定域轉換被禁用時,處理電路系統可回應於試圖自安全域轉換至次安全域而觸發禁用域轉換故障的傳信,且可回應於試圖自次安全域轉換至安全域而觸發禁用域轉換故障的傳信。此方法可能為反直觀的,因為雖然吾人出於安全原因可能希望此方法可有用於能防止自次安全域至安全域之轉換,但吾人可能會質疑為什麼其可有用於能選擇性地禁用自安全域至次安全域之轉換。然而,發明人認識到,此提供了一種將特定處理線程包含至安全域及次安全域中單一者中之方式,此可能對效能有好處,因為若已知試圖切換域將觸發禁用域轉換故障,則可抑制在線程跨越兩種域時可能需要之一些效能密集型操作。此接著准許延遲執行彼些效能密集型操作,僅在試圖切換域時才視需要執行彼些操作,以避免對所有線程推測性執行此些操作之效能成本,而無論線程是否會跨域。因而,當處理電路系統處於至少一種模式下時,提供禁用在安全域與次安全域之間在兩個方向上的轉換之域轉換禁用配置參數對於效能而言可為有益的。
此技術在如下情形下可為尤其有用的:其中在安全域中,處理電路系統使用儲存在至少一個安全配置暫存器中之資訊來控制對記憶體之存取,且在次安全域中,處理電路系統使用儲存在至少一個次安全配置暫存器中之資訊來控制對記憶體之存取。舉例而言,安全/次安全配置暫存器可包括:堆疊指標暫存器,其儲存用於存取記憶體中之相應的安全或次安全堆疊資料結構之堆疊指標;在記憶體保護單元(memory protection unit; MPU)內之暫存器,其定義用於定義對記憶體區域的存取權限之記憶體保護屬性;及/或MPU指標暫存器,其提供指向記憶體中之表(該表提供記憶體保護區域屬性)的指標。為了確保安全域及次安全域之間的隔離,可能期望定義分別由安全域及次安全域使用之MPU屬性或堆疊資料結構的單獨集合。然而,用於配置堆疊指標、在記憶體位址空間中為堆疊資料結構分配空間及/或為安全域及次安全域配置MPU區域屬性之操作可能為相對效能密集的,且因此可能期望避免對只需要在另一域中運行之線程執行針對安全域及次安全域中之一的此些操作。當需要執行如中斷處理之時間緊迫性操作時,此可為尤其重要的。因而,藉由提供域轉換禁用配置參數,此提供了一個故障,該故障可用以偵測當未執行此些配置操作之線程嘗試切換至另一域時之情形,以使得可接著按需延遲執行此些配置操作。在一個實例中,所配置之資源可包括堆疊指標暫存器,該堆疊指標暫存器儲存用於指向堆疊資料結構之堆疊指標,該堆疊指標暫存器包括與安全域相關聯之至少一個堆疊指標暫存器及與次安全域相關聯之至少一個堆疊指標暫存器。
回應於試圖執行在至少一個模式下自次安全域至安全域之至少一種類型的轉換,處理電路系統可使用域轉換禁用配置參數來執行禁用域轉換檢查,以判定是否觸發禁用域轉換故障之傳信。對於自次安全域轉換至安全域之嘗試而言,可在執行至少一個其他安全性檢查之前執行此禁用域轉換檢查,以判定是否允許自次安全域轉換至安全域之該嘗試。有可能至少一個其他安全性檢查中的至少一部分可能取決於尚未為不希望切換域之線程配置的資訊或資源,諸如,由堆疊指標暫存器引用之MPU配置或堆疊資料結構。因而,若在禁用域轉換檢查之前執行另一安全性檢查,則此可導致安全性檢查失敗僅係由於要檢查之相關資料尚未被配置,而非由於標識了一些其他安全風險。因為安全性檢查可能與故障處置器相關聯,該故障處置器比與禁用域轉換故障(其可能僅觸發資源的延遲配置)相關聯之故障處置器觸發的動作更劇烈,所以可能期望首先執行禁用域轉換檢查,以使得若資源不可用,則可在接著繼續執行另一類型的安全性檢查之前先配置該等資源。舉例而言,一些實施可執行若檢查失敗則會引發安全故障之安全性檢查。為了確保安全狀態之完整性,與安全故障相關聯之異常處置器可終止整個次安全狀態之執行。此故障可能由以次安全及低特權狀態運行之軟體故意觸發,作為對以次安全狀態運行之作業系統執行拒絕服務攻擊的一種手段。
對於試圖自安全域至次安全域之轉換而言,亦可使用域轉換禁用配置參數來執行禁用域轉換檢查。然而,由於此轉換係自安全域至次安全域,因而其可能沒必要執行其他安全性檢查,因此禁用域轉換檢查與其他安全性檢查之間的排序可能並不相關。或者,一些系統可能仍會在自安全域返回至次安全域時執行安全性檢查,在此情形下,禁用域轉換檢查與其他安全性檢查之間的排序可能取決於是否預期回應於禁用域轉換故障而配置之任何資訊將用於彼另一安全性檢查中。
禁用域轉換檢查可能由試圖執行自次安全域至安全域或自安全域至次安全域之至少一種類型的轉換觸發。有時,禁用域轉換檢查可由可能未必實際地引起安全域與次安全域之間的轉換之事件或指令觸發。舉例而言,在一些情形下,當遭遇可能潛在地導致安全域之間轉換之事件或指令時,但在標識出事件或指令是否實際上觸發域改變之前,可執行禁用域轉換檢查。因而,雖然回應於改變域之實際嘗試而至少檢查了域轉換禁用配置參數,但此並不排除在禁用域轉換檢查通過並判定了將啟用域轉換時亦可有時對實際上並未導致域改變之事件上進行檢查。
域轉換禁用配置參數可在安全域及次安全域中為可修改的。在一些實施中,亦可對於是否允許程式碼之特定段修改域轉換禁用配置參數強加其他條件。舉例而言,在具有特權狀態及低特權狀態之系統中,域轉換禁用配置參數可僅在特權狀態下為可修改的。然而,即使當前安全域為次安全域,亦可允許處理電路系統修改域轉換禁用配置參數。此可能似乎反直覺,因為通常會希望自安全域配置限制安全域改變之配置參數。然而,因為可將禁用域轉換故障之觸發用作用以提高效能而非安全性之機制,所以可為可接受的是自次安全域修改域轉換禁用配置參數。此利用了如下事實:若線程未為安全域建立適當的安全資源,則啟用安全域之改變對線程可能幾乎無益處,因為在彼情形下,若線程試圖切換至安全域,則處理將失敗,因為尚未建立起任何此類資源。
如上所述,處理電路系統可具有線程模式及處置器模式。此些模式可與安全域正交,因為在安全域中,處理電路系統可在線程模式或處置器模式下操作,且類似地,在次安全域中,處理電路系統可在線程模式或處置器模式下操作。上述處理電路系統之至少一種模式可為線程模式。因而,當在線程模式中時,域轉換禁用配置參數可選擇性地禁用安全域之轉換。然而,該至少一種模式可排除處置器模式,從而在處置器模式下,處理電路系統可獨立於域轉換禁用配置參數來判定是否准許域轉換。因而,即使域轉換禁用配置參數指示在線程模式下禁用了安全域與次安全域之間的轉換,在處置器模式下仍可准許此種安全/次安全域轉換。更有可能的是,在具有安全域及次安全域之系統中,在處置器模式下執行之處置器代碼(例如,其可能與作業系統相關聯)可涉及安全的及次安全的處理,且因此需要來自兩種域之資源,因而在處置器模式下,禁用安全/次安全域轉換之值較小。又,在處置器模式下執行之處置器代碼可為如下代碼:在線程模式代碼觸發了禁用域轉換故障之情形下,該代碼會進入並延遲配置用於另一域之資源,因而即使線程模式已禁用了域轉換,准許處置器模式繼續在兩種域中運行還可為有用的。
如早先所論述,指令解碼器可支持模式間調用分支指令,該模式間調用分支指令除了保存函數返回位址並分支至分支目標位址以外,亦將處理電路系統之當前模式自處置器模式切換至線程模式。可為有用的是,亦回應於此指令來設定域轉換禁用配置參數,以指定啟用還是禁用域轉換。可定義模式間調用分支指令之第一及第二變體中的至少一者,其中第一變體導致域轉換禁用配置參數被設定為指定在該至少一種模式下禁用域轉換,且第二變體導致該參數被設定為指定在該至少一種模式下啟用域轉換。支持兩種變體之系統可尤其有用,因為此使處置器代碼能夠在調用異常處置器代碼之解除特權部分的同一模式間調用分支指令中傳信是否已配置了用於解除特權部分在兩種域中運行之資源。
類似地,對於早先所論述之模式間函數返回指令而言,此亦可觸發設定域轉換禁用配置參數。對於函數返回而言,將域轉換禁用配置參數設置為指定在該至少一種模式下啟用域轉換之值可為尤其有用的。此為有用的,因為如上所述,模式間函數調用分支及模式間函數返回之一種使用情形可為允許異常處置器在線程模式下調用要解除特權之函數,且此代碼可由第三方提供者提供。處置器模式中之高特權代碼可執行將在代碼之解除特權部分之前及之後執行的「包裝函式」代碼。藉由回應於模式間函數返回指令將域轉換禁用配置參數設定為預設值,此意謂在解除特權部分之末尾處的包裝函式代碼始終以一致的已知狀態執行,而無論該解除特權部分是否實際地使用了安全域及次安全域。又,藉由使用「啟用」指示而非「禁用」指示作為在模式間函數返回之後的預設值集合,此意謂為不支持域轉換禁用配置參數(其將希望會允許線程模式域轉換)之系統編寫的後續舊代碼仍可以運行而不會觸發額外故障。
又,回應於模式間函數返回指令,以及更新域轉換禁用配置參數以指示在至少一種模式下啟用域轉換,處理電路系統亦可記錄一指示,該指示為在執行模式間函數返回指令之前域轉換禁用配置參數是否已指定了在至少一種模式下啟用或禁用域轉換。域轉換禁用配置參數之先前狀態的此指示可用於允許後續處置器代碼判定在模式間調用與模式間函數返回之間執行的代碼是否已改變屬於另一安全狀態(諸如,MPU狀態或堆疊指標)之配置暫存器中的資訊,以使得若用於另一安全狀態之配置暫存器尚未被改變,則可省去用以恢復先前配置之任何操作以提高效能。
在對域轉換禁用配置參數的檢查之後,若在試圖自第一安全域轉換至第二安全域時傳信了禁用域轉換故障,則異常控制電路系統可控制處理電路系統以在第一安全域中處理異常處置器。因而,若由於試圖自次安全域切換至安全域而觸發了故障,則故障將在次安全域中被處理,且若試圖自安全域轉換至次安全域,則故障將在安全域中被處理。此為有用的,因為通常相應線程在域切換之前在其中運行的域將為線程在其中首次初始化之域,且因而為與管理彼線程之管理進程相關聯的域。舉例而言,在安全域中創建之安全線程可由安全作業系統管理,且在次安全域中創建之次安全線程可由次安全作業系統管理,且因此可能期望將任何禁用域轉換故障皆指向與試圖進行禁用域轉換之線程相關聯的管理進程。雖然可在第一安全域中處理故障,但由異常處置器回應於故障而執行之資源配置可為與第二安全域相關聯之資源。因為禁用域轉換故障所以之為目標之域不同於需要延遲配置其資源之狀態,所以在處置器模式下,可能需要程式碼在次安全狀態及安全狀態下運行之間的緊密協調。因此,可能有利的是自其中執行禁用域轉換檢查之至少一種模式當中排除處置器模式。
在發生異常條件時,異常控制電路系統可更新域轉換禁用配置參數,以指定在至少一種模式下啟用安全/次安全域轉換。再次,此為異常處置器提供了安全的、已知的、預設的狀態,以使得異常處置器可以一致之方式運行,而無論與在發生異常時正處理的後台代碼相關聯之域轉換禁用配置參數的值如何。又,藉由回應於異常條件預設啟用轉換,此可提高與異常處置器中之舊代碼的相容性,該等異常處置器可能係為不支持域轉換禁用功能之系統編寫的。
當異常條件發生時,異常控制電路系統可觸發某一狀態保存,以保存與異常條件發生之前所執行的處理相關聯之架構狀態。異常控制電路系統之硬體不一定保存與該先前處理相關聯之所有架構狀態,且在一些情形下,硬體可僅保存架構狀態之子集。若其他狀態駐留其中之暫存器將被異常處置器覆寫,則後續異常處置器可能會負責保存未被保存在硬體中之其他架構狀態。
當回應於異常執行此狀態保存時,在該狀態保存中所保存之架構狀態可包括域轉換禁用配置參數。因而,域轉換禁用配置參數可在異常發生時由硬體自動保留,以使得一旦異常處理完成且處理返回至在異常發生之前所執行的先前處理,則可將域轉換禁用配置參數恢復至控制儲存位置,以使得後台代碼之後續處理可以如同從未發生過異常一樣之方式運行。
在一些實施中,回應於異常條件,可將域轉換禁用配置參數保存為被保存至堆疊資料結構之堆疊訊框的一部分,其中堆疊訊框亦包括其他架構狀態,諸如,通用暫存器內容或異常返回位址。然而,在一些實施中,堆疊訊框內可能幾乎無備用空間用於編碼域轉換禁用配置參數,且保留任何備用編碼空間以用於其他目的可為較佳。
因而,在一些實例中,在狀態保存期間,異常控制電路系統可將包括異常返回位址及架構狀態的第一子集之第一堆疊訊框保存至堆疊資料結構,但可替代地將指示域轉換禁用配置參數之值保存至預定暫存器中,而非被包括在第一堆疊訊框中(例如,預定暫存器可為鏈路暫存器)。此避免了需要耗費堆疊訊框內之額外位元。應注意,指示域轉換禁用配置參數之已保存值不需要具有與域轉換禁用配置參數本身等同之編碼—可將任何值保存至堆疊,此使得能夠判定在發生異常時域轉換禁用配置參數具有何值。
然而,預定暫存器對於回應於異常條件而被執行的異常處置器而言可為可存取的。至少對於引起自安全域至次安全域之轉換的異常而言,可能並不期望允許在異常之後執行的次安全代碼修改指示在異常之前所執行的處理中是否已禁用安全域轉換之值。
為了防範此情境,至少回應於觸發自安全域至次安全域之轉換的異常條件,異常控制電路系統可不僅將上述第一堆疊訊框而且將第二堆疊訊框保存至堆疊資料結構,該第二堆疊訊框包括架構狀態之第二子集及用於檢查指示域轉換禁用配置參數的值之交叉檢查資訊。至少在自次安全域至安全域之異常返回轉換時,異常控制電路系統可比較指示域轉換禁用配置參數之值與第二堆疊訊框中之交叉檢查資訊,並當在該比較中偵測到失配時觸發故障的傳信。應注意,雖然可回應於初始異常將指示域轉換禁用配置參數之值保存至預定暫存器,但在執行異常返回轉換時,域轉換禁用配置參數可能不再在預定暫存器中,而可能在自記憶體中之堆疊資料結構加載的值內,或在虛設的不可執行位址(分支至該虛設的不可執行位址以觸發異常返回)內之欄位中。藉由提供第二堆疊訊框中之交叉檢查資訊,此可允許偵測到次安全異常處置器試圖修改最初放置在預定暫存器中之域轉換禁用配置參數的已保存值,以防止違反安全性。雖然此方法可能看起來更為複雜,但第二堆疊訊框可記錄保存至記憶體之額外狀態,以對次安全異常處置器隱藏該額外狀態,且相比於為所有異常進入提供已保存之狀態子集的第一堆疊訊框,該第二堆疊訊框可能具有用於額外資訊之更多備用容量。因此,將交叉檢查資訊記錄在第二堆疊訊框中意謂:對於彼些僅需要第一堆疊訊框之異常而言,則無需招致保存任何額外堆疊狀態用於保留在預轉換禁用配置參數中之記憶體成本及中斷潛時(因為在此情形下可安全地依賴預定暫存器),但在彼些需要第二堆疊訊框之安全至次安全異常轉換時,則可將交叉檢查保存至堆疊中以提高安全性。
可能存在多種方式,其中處理電路系統可准許執行安全域與次安全域之間的域轉換,且取決於用以在安全域之間進行轉換之路由,可以略微不同之方式來執行對域轉換禁用配置參數的檢查。
如早先所提及,切換域之一種方式係使用域間調用分支指令,該域間調用分支指令請求自安全域至次安全域之轉換,回應於此,指令解碼器可控制處理電路系統以執行域間調用分支操作,該域間調用分支操作包括將函數返回位址保存至函數返回位址儲存位置(例如,記憶體中之堆疊資料結構),將虛設函數返回位址保存至預定暫存器(例如,鏈路暫存器),將處理電路系統切換至次安全域,及分支至由藉由域間調用分支指令指定的分支目標位址所標識之指令。藉由准許自安全域至次安全域之直接函數調用,此避免了需要調用異常處置器或監控代碼來監督域轉換,從而提供了提高的效能。
對於域間調用分支指令而言,可檢查域轉換禁用配置參數,且當域轉換禁用配置參數指定在至少一種模式下啟用域間轉換時,則可執行域間調用分支操作。又,無關於域轉換禁用配置參數之值,若處理電路系統目前處於除了該至少一種模式以外之模式中(例如,當當前模式為處置器模式時),則可執行域間調用分支操作。相反,當處於該至少一種模式(例如,線程模式)中且域轉換禁用配置參數指示在彼至少一種模式中禁用域轉換時,則可觸發禁用域轉換故障的傳信。
在域之間轉換的另一種方式可能為試圖執行域間返回分支指令,該域間返回分支指令請求自安全域至次安全域之轉換,並分支至由藉由域間返回分支指令指定的分支目標位址所標識之指令。試圖執行該指令可能會觸發檢查域轉換禁用配置參數,且當域轉換禁用配置參數指定在該至少一種模式下啟用域間轉換時,則可執行域間返回分支操作。又,無關於域轉換禁用配置參數之值,若處理電路系統目前處於除了該至少一種模式以外之模式中(例如,當當前模式為處置器模式時),則可執行域間返回分支操作。相反,當處於該至少一種模式(例如,線程模式)中且域轉換禁用配置參數指示在彼至少一種模式中禁用域轉換時,則可觸發禁用域轉換故障的傳信。
在域之間轉換的另一種方式可能為試圖分支至虛設函數返回位址,該虛設函數返回位址係由如早先所論述之早先函數調用分支指令設置的。當執行域間調用分支指令以請求自安全域至次安全域之轉換時,可將用於函數調用之函數返回位址保存至堆疊資料結構以防止其在次安全代碼中可見,且可將虛設函數返回位址保存至次安全代碼可見之鏈路暫存器。虛設函數返回位址可包括指示在對應函數返回時應執行域轉換以返回至安全域之資訊。因而,當稍後試圖分支至虛設函數返回位址且虛設函數返回位址指示域間函數返回時,若處理電路系統當前處於該至少一種模式中且域轉換禁用配置參數指定應在該至少一種模式中禁用域轉換,則處理電路系統可觸發禁用域轉換故障的傳信。
自次安全域轉換至安全域之另一種方式可能為自安全位址區域獲取指令時。由記憶體存取檢查電路系統維護之安全屬性資料可將位址區域定義為次安全位址區域或安全位址區域。可僅自安全域執行儲存在記憶體之安全位址區域中的指令。在當前處於次安全域中時,若試圖獲取具有在安全位址區域中之位址的指令,則此可能需要執行一些安全性檢查,以檢查是否可准許至安全域之轉換。舉例而言,該檢查可包括檢查在安全位址區域中之位址處的指令是否為標記了進入安全域的有效進入點之某種類型的安全閘道指令。在一些情形下,若在安全位址區域中之位址處的指令為安全閘道指令,則對安全閘道指令之解碼可能觸發安全域自次安全域至安全域之改變。在其他情形下,僅當獲取指令之嘗試以特定類型的安全記憶體為目標(其可能為次安全的可調用安全記憶體)時,才允許自次安全域至安全域之轉換。一些實施可執行安全閘道指令檢查及次安全的可調用安全記憶體檢查。
然而,如早先所提及,對於自次安全域至安全域之轉換而言,安全性檢查可能取決於尚未為預期保留在單個安全域內之線程配置的資源(例如,檢查可取決於所設定之安全區域的記憶體保護單元屬性,以使得可獲取及解碼自安全區域獲取之指令)。因此,若預期僅駐留在次安全域中之線程試圖切換狀態,則安全性檢查本身可能會崩潰。為了防止彼等安全性檢查崩潰,可能期望儘可能早地執行對域轉換禁用配置參數的檢查。
因而,可回應於試圖獲取具有在安全位址區域中之位址的指令而執行此檢查,而非等至獲取及解碼彼指令為止。藉由在管線之早先級執行對域轉換禁用配置參數的檢查,此可減少由於缺少配置之資源而導致安全性檢查失敗的機會。在此檢查完成時,可能尚不知曉正獲取之指令是否實際上為將觸發至安全域的轉換之指令(例如,若所獲取之指令並非安全閘道指令,則其可能尚未觸發進入安全域)。因而,對域轉換禁用配置參數的檢查可能為保守的,因為若正自安全位址區域中之位址獲取指令且當前域為次安全域,則無論所獲取指令之類型如何,皆可對其進行檢查。將瞭解,在一些實施中,管線內之各種檢查的位置可能會變化,但藉由稍後在管線中執行域轉換禁用檢查但比其他故障的傳信更優先地考慮任何所導致之域轉換禁用故障的傳信,可實現首先執行此檢查的相同效果。
至於早先所述之模式間調用分支指令,可在模擬環境中使用域轉換禁用配置參數,在該模擬環境中,在主機資料處理裝置上執行之模擬電腦程式在目標程式碼係在真實硬體設備上執行時模擬與預期指令執行環境等效的指令執行環境,該真實硬體設備具有儲存域轉換禁用配置參數之控制存儲位置的特徵以及如上所述之用於設定並使用該參數之相關聯邏輯。因而,電腦程式可具有處理程式邏輯、記憶體存取檢查程式邏輯及配置參數設定程式邏輯,其模擬處理電路系統、記憶體存取檢查電路系統及用於維護如上所述在控制儲存位置處的域轉換禁用配置參數之電路系統的功能。
特定實例之描述
第1圖示意性地繪示資料處理系統2之實例,該資料處理系統2包括用於回應於自記憶體系統6獲取之指令來執行資料處理的處理電路系統4。記憶體系統6可包括快取記憶體(例如,資料快取記憶體及/或指令快取記憶體之一或更多個層級)以及主記憶體。處理電路系統4包括處理管線,該處理管線包括諸多管線級,包括(例如)獲取級8,該獲取級8用於自記憶體系統6獲取要執行之指令;解碼級10,該解碼級10用於解碼所獲取指令以產生用於控制其餘管線級執行資料處理之控制信號;及執行級12,該執行級12用於執行已解碼指令以執行資料處理操作。提供暫存器14用於儲存由管線4處理之指令的輸入運算元。暫存器14包括諸多類型之暫存器,包括用於儲存整數值之通用(整數)暫存器16,及控制暫存器20,該控制暫存器20用於儲存用於控制處理電路系統4對指令的執行及其他操作(諸如,異常處理、安全性檢查,等)之控制參數。亦可提供其他類型之暫存器,例如,用於儲存浮點值之浮點暫存器,或用於儲存包括多個獨立資料值的向量運算元之向量暫存器。
將瞭解,第1圖中所示之管線級為簡化表示,且亦可提供其他類型之管線級,諸如,用於執行暫存器重命名之重命名級、用於排隊等待執行之指令並在該等指令所需運算元可用時將其發布以執行之發佈級,及用於處理指令之提交並將結果寫回至暫存器14之寫回級。該管線可為有序或無序之管線。
提供可靠性、可用性及可維修性(reliability, availability and serviceability; RAS)錯誤偵測/校正電路系統29以執行錯誤偵測或校正操作,該等錯誤偵測或校正操作用於偵測或校正在處理系統之運行中隨機出現的硬體故障。舉例而言,硬體故障可能由於粒子撞擊導致已儲存之狀態位元或處理邏輯路徑上之信號在0與1之間翻轉而引起。又,硬體故障可能由於電子電路隨時間流逝之物理劣化而引起,例如,電子遷移可能最終導致儲存元件卡在0或1,而無論寫入至其之位元值如何。為了偵測此種故障,RAS可包括一或更多種錯誤偵測/校正機制。舉例而言,一種機制可提供用以冗餘地執行與處理電路系統4相同之操作的冗餘處理邏輯,及用以比較主處理及冗餘處理之結果以偵測任何故障的比較邏輯。另一種機制可管理與寫入至記憶體之資料相關聯地儲存之錯誤偵測代碼或錯誤校正代碼的設定及檢查,以使得在自記憶體讀回資料時,可重新計算對應的錯誤偵測/校正代碼並與已儲存之錯誤偵測/校正代碼進行比較以偵測錯誤(且在可能存在時校正錯誤)。若偵測到RAS錯誤,則在可能的情況下校正該錯誤,並繼續向前處理(例如,藉由三核鎖步技術或藉由使用錯誤校正代碼有可能發生此情形)。或者,若錯誤為不可校正的,則可傳信故障,此可能導致處理線程終止並重新啟動。將瞭解,可使用用於錯誤偵測/校正及回復之任何已知技術。
系統2亦包括記憶體存取檢查電路系統22,用於基於為記憶體位址空間之各種區域所指定的屬性資料來檢查是否准許對記憶體系統6之存取。記憶體存取檢查電路系統包括安全屬性單元(security attribute unit; SAU)24,用於儲存安全域定義資料,該資料定義與記憶體位址空間之每一相應區域相關聯的安全域。基於安全屬性資料,安全屬性單元24可取決於處理電路系統之當前安全性操作域且取決於與包括記憶體存取之目標位址的區域相關聯之安全域來檢查是否允許記憶體存取。在其他實施例中,SAU可能並不直接儲存安全域定義資料,反而存取儲存在別處之安全域定義資料以便執行記憶體存取檢查。在一些系統中,可將安全域定義資料儲存在記憶體系統6中,或可儲存在系統2中別處之配置暫存器中。處理電路系統4可在當前安全性操作域中操作,該當前安全性操作域可大體對應於與當前正執行之指令的位址相關聯之安全域(儘管可能存在一些例外,例如,當處理域之間的轉換時)。當指令自由SAU 24指定為在一個域中之區域中的位址分支至與不同域相關聯之區域中的位址時,此可觸發處理電路系統4正在其中操作之當前安全域的轉換。在其他實施例中,此分支可能並不直接觸發當前安全域之轉換,反而觸發額外的安全性檢查(諸如,是否存在閘道指令),在此些實施例中,可能係閘道指令本身觸發了當前安全域的改變。大體而言,當在安全域中操作時,處理電路系統可存取與安全域及次安全域相關聯之記憶體區域中的資料,而當在次安全域中操作時,處理電路系統可存取與次安全域相關聯之區域中的資料,但可能不被准許存取在SAU 24指定為與安全域相關聯的位址空間之區域中的資料。此使得能夠保護敏感資料,使其免受來自在次安全域中運行的代碼之未經授權的存取。
又,記憶體存取檢查電路系統可包括記憶體保護單元(memory protection unit; MPU)26,該記憶體保護單元(MPU)26檢查對記憶體系統6之記憶體存取是否滿足存取權限,該等存取權限可指定(例如)允許處理電路系統4之哪些特權級別來存取記憶體之給定區域,或可指定位址空間之記憶體區域可被讀取及寫入操作存取還是為寫入被禁止之唯讀區域。MPU 26所使用之存取權限可(例如)由高特權進程(諸如,超管理器或作業系統)指定,以控制允許低特權進程(諸如,應用程式)存取記憶體之哪些區域,及如何存取(唯讀或讀取/寫入,且記憶體是否為可執行的)。在一些實施中,MPU 26亦可應用對允許特權進程存取記憶體之哪些區域及如何存取(唯讀或讀取/寫入,且記憶體是否為可執行的)的檢查。MPU 26可允許為低特權存取與特權存取指定不同的權限。MPU 26所提供之權限可正交於SAU 24所提供之彼些權限,以使得對於將允許之給定記憶體存取而言,其應通過基於為MPU 26及SAU 24所定義的存取權限之檢查。MPU 26可包括單獨的安全MPU 26-S及次安全MPU 26-NS(各自與安全域之一相關聯),以使得可取決於當前域為安全域還是次安全域而為給定的記憶體區域指定不同的記憶體存取權限(例如,區域可在次安全域中唯讀但在安全域中可讀取且可寫入)。
因而,如第2圖中所示,處理電路系統4可支持在諸多安全域(包括至少安全域(S)及次安全域(亦稱作非安全域,NS))中之一者中執行資料處理。儘管第2圖示出了僅具有兩個安全域之系統,但有可能提供與不同安全性級別相關聯之三個或更多個域,在此情形下,所示S及NS域可為所提供之三個或更多個域中的任何兩者。
又,在給定安全域內,如第2圖中所示,處理電路系統可在諸多模式(包括用於異常處理之處置器模式(H)及用於後台處理之線程模式(T))中之一者下執行資料處理。如第1圖中所示,可提供異常控制電路系統28以控制異常處理操作,包括異常進入轉換及異常返回轉換,及在此些轉換期間對架構狀態之任何保存/恢復。將異常處理分離至專用處置器模式H中可有助於簡化對處理電路系統允許存取哪些暫存器之管理(例如,用於異常處理之一些暫存器在處置器模式H下可能為可存取的,但在線程模式T下可能為不可存取的)。大體而言,當在處置器模式H下操作時,則處理電路系統4可能被預設為假設具有高特權之操作模式,以使得根據特權級別之某一級別而非最低特權級別來控制對記憶體及暫存器之存取,而在線程模式T下時,處理電路系統可取決於儲存在控制暫存器20中之其他架構狀態而具有諸多不同特權級別中的一者。
因而,如第2圖中所示,安全域與操作處理電路系統4所在之模式的組合可判定如何藉由處理電路系統4進行處理之態樣。第2圖示出此些模式之四種不同組合,包括:
l 安全線程模式(安全域與線程模式之組合的簡稱)
l 次安全線程模式(次安全域與線程模式之組合)
l 安全處置器模式(安全域與處置器模式之組合),以及
l 次安全處置器模式(次安全域與處置器模式之組合)。
如以下所論述,回應於異常條件及異常返回條件,所執行之動作可能取決於在安全域及模式之此些相應組合之間進行的特定轉換。安全屬性單元(secure attribution unit; SAU)24中之屬性管轄安全域與次安全域之間的邊界。
安全MPU 26-S中之屬性可用以管轄在安全線程模式中運行的不同線程之間及在此些線程與安全作業系統之間的邊界。次安全MPU 26-NS中之屬性可用以管轄在次安全線程模式中運行的不同線程之間及在此些線程與次安全作業系統之間的邊界。
第3圖示出處理系統之暫存器14中的一些暫存器。將瞭解,此表示未示出可提供之所有可能暫存器,且亦可提供許多其他暫存器。如第13圖中所示,暫存器14包括通用暫存器16,及諸多控制暫存器20(第3圖中僅示出控制暫存器中之一些,亦可提供其他控制暫存器)。在此實例中,提供了16個通用暫存器,標記為R0至R15。在一些實施例中,通用暫存器16亦可包括程式狀態暫存器(XPSR),該程式狀態暫存器(XPSR)可保持條件旗標值及與當前上下文有關之其他資訊。
在通用暫存器R0至R15當中,暫存器R0至R12用於儲存通用運算元,諸如,用於算術或邏輯指令之輸入運算元,或用以導出用於存取記憶體系統6之加載/儲存指令的位址之運算元。有可能將通用暫存器R13至R15用於此些通用運算元,但其亦可服務於其他控制函數。
將暫存器R15用作儲存程式計數之程式計數器(program counter; PC)暫存器,該程式計數器提供了處理電路系統4所到達之當前程式點的指示。程式計算暫存器可由獲取級8用以判定自記憶體系統獲取哪些指令。
將暫存器14用作鏈路暫存器(link register; LR),其用於在函數被調用時儲存函數返回位址,以使得當與該函數相關聯之處理完成時,鏈路暫存器中之位址可用以將程式流程重新指向在函數調用指令之後的下一指令。又,可在發生異常時使用鏈路暫存器來儲存異常返回值,該異常返回值提供了用於在遭遇對應的異常返回條件時控制架構狀態之拆堆的資訊。類似地,亦可使用鏈路暫存器在執行模式間或域間函數調用時儲存虛設函數返回位址。以下將更詳細地論述此些情形。
將暫存器R13用作堆疊指標暫存器,其提供指示記憶體中之堆疊資料結構的位址之堆疊指標。該堆疊資料結構可用於在異常條件發生時保存架構狀態及用於在異常返回條件發生時恢復架構狀態。如第3圖中所示,向暫存器R13存入,以使得在硬體中提供了諸多不同的實體暫存器,使用暫存器指定符R13可存取其中每一者,當指定了R13時如何選擇特定的存入暫存器可能取決於諸多因素,包括處理電路系統之當前的安全域及模式,還有配置暫存器之值。
舉例而言,存入的堆疊指標暫存器可包括安全主要堆疊指標暫存器(MSP_S)、安全進程堆疊指標暫存器(PSP_S)、次安全主要堆疊指標暫存器(MSP_NS)及次安全進程堆疊指標暫存器(PSP_NS)。大體而言,安全堆疊指標暫存器MSP_S及PSP_S在處於安全域S中時可由處理電路系統4存取,但在處於次安全域NS中時為不可存取的。次安全堆疊指標暫存器MSP_NS及PSP_NS在次安全域中為可存取的。一些實施可提供存取已存入的堆疊指標之額外方式,此可使安全域存取與次安全域(MSP_NS及PSP_NS)相關聯之堆疊指標。大體而言,預期在線程模式T內使用進程堆疊指標PSP_S或PSP_NS,且預期在處置器模式H內使用主要堆疊指標MSP_S或MSP_NS。為處置器模式及線程模式提供單獨的主要堆疊及進程堆疊可使異常處置器代碼之開發更簡單,因為其意謂異常處置器可能留在主要堆疊上之任何資料可能大體對於在異常返回之後在線程模式下運行的線程而言係不可存取的。此可簡化異常處置器代碼之開發,因為異常處置器不需要包括用於自主要堆疊資料結構中清除其所有資料之指令。然而,有可能使在線程模式T中之進程使用主要堆疊指標,其中儲存在控制暫存器32中之堆疊指標選擇值30控制當在線程模式T中時應使用主要堆疊指標還是進程堆疊指標。因而,可不僅基於當前模式(線程或處置器)與當前域(安全的或次安全的)之組合而且基於堆疊指標選擇值30來判定應使用哪一堆疊指標。如第3圖中所示,可將堆疊指標選擇值30存入在安全性狀態之間,以使得安全域及次安全域可使用堆疊指標選擇值30之單獨的安全版本30-S及次安全版本30-NS獨立地控制安全線程模式及次安全線程模式分別使用主要堆疊指標還是進程堆疊指標。當前安全域控制讀取/寫入哪一已存入版本30-S、30-NS。
大體而言,在以處置器模式H操作之異常處置器或以線程模式T操作之線程的主體內,對安全或非安全堆疊指標的選擇可取決於處理電路系統4在其中執行代碼之當前安全域。對於異常進入及返回而言,自堆疊指標所標識之堆疊中執行狀態的堆疊及拆堆,該堆疊指標與在異常發生之前運行的後台代碼之安全域相關聯。
控制暫存器32亦可包括特權控制值(nPRIV)31,其控制在線程模式中執行之代碼為有特權的還是無特權的。可為安全域及次安全域不同地設定特權控制值(例如,安全線程模式可為無特權的,而次安全線程模式可為有特權的,或反之亦然)。或者,安全線程模式及次安全線程模式可在相同的特權級別上運行。將瞭解,特權控制值31僅為一個實例,且可能存在其他方式以使用儲存在控制暫存器中之架構狀態來控制在安全/次安全的線程模式下分配給代碼之特權級別。在第3圖之實例中,存入特權控制值31,使得提供單獨的安全特權控制值31-S及次安全特權控制值31_NS,用於分別控制在安全域及次安全域中由線程模式使用之特權級別。然而,另一方法可為提供在域轉換時切換之單個控制位元。
如第3圖中所示,控制參數32亦包括線程模式互通禁用(thread mode interstating disable; TMID)參數34,亦稱作域轉換禁用配置參數,其用於控制啟用還是禁用在線程模式下安全域與次安全域之間的轉換。以下將更詳細地論述此情形。不同於堆疊指標選擇值30及特權值31,TMID值34在安全性狀態之間共享。TMID參數34可用以在線程模式下禁用安全域與次安全域之間的轉換,如以下進一步描述,此可用於使得能夠延遲配置用於安全/次安全域中之一者的資源,因為禁用域轉換(若試圖執行禁用的域轉換,則會觸發故障)意謂可將線程限制在單個域中。
如第3圖中所示,控制暫存器20亦包括提供異常編號36之暫存器。異常編號36可能並非儲存在此控制暫存器中之唯一值—其他狀態可被儲存在同一暫存器中。當系統處在處置器模式中時,異常編號標識出與當前執行之異常處置器相關聯的異常。當系統處在線程模式中時,則異常編號36被設定為某一預設值(例如,0),該預設值指示當前並未處理異常。因而,異常編號36亦有效地指示系統當前處在線程模式還是處置器模式,因為若註冊之異常編號36指定了特殊值(例如,0),則系統處在線程模式下,且若指定了任何其他值,則系統處在處置器模式下且特定的非零值標識出當前正在處理之異常。因而,可能不需要單獨暫存器來指示系統正在其中運行之當前模式。雖然第3圖中未示出,但可能存在控制暫存器,該控制暫存器指示當前域為安全域還是次安全域。或者,此種暫存器可能並非必要的,因為自判定正在處理之指令的位址係在記憶體之安全區域還是次安全區域(如由SAU 24定義)時,此可為隱含的。
第4圖示出用以定址記憶體系統6之記憶體位址空間的實例。記憶體位址空間100可包括在安全域及次安全域中均可存取之一或更多個次安全區域102,及在安全域中可存取且在次安全域中不可存取之一或更多個安全區域104。儘管為了易於解釋,第4圖僅示出一個次安全區域102及一個安全區域104,但可能存在每種類型之多個區域,且此些區域可彼此穿插,因此不一定使所有安全區域皆位於連續區塊中且所有次安全區域皆位於連續區塊中。次安全區域可包括次安全程式碼110、堆疊資料結構112(使用次安全堆疊指標MSP_NS及PSP_NS來存取)及次安全資料114。類似地,安全區域104可包括安全程式碼122、堆疊資料結構124(使用安全堆疊指標MSP_S及PSP_S來存取)及安全資料126。再次,不一定將安全區域104或次安全區域102內之程序碼、堆疊及資料組織成如第4圖中所示之連續區塊,且實務上,堆疊及程式碼可分佈在與其他資料穿插之諸多不連續區塊處。在位址的可執行範圍內之記憶體的特定分配可由在處理系統上執行之軟體來選擇,且並非由硬體來固定。
如第4圖中所示,記憶體位址空間100包括保留區域130,該保留區域130在此實例中包括大於或等於0xF0000000之位址(以十六進製表示—將瞭解,其他實例可選擇不同的位址範圍作為保留區域130)。保留區域130表示不被允許提供可執行指令之位址的範圍。可出於特殊目的(諸如,指示函數返回或異常返回,如以下進一步描述)指派此些保留位址中的一些。若試圖自保留位址130中之一者獲取指令,則指令獲取級8可傳信故障。此些保留位址可為架構之未來版本提供機會,以為特殊目的分配額外位址,以使得自此些位址中之一者獲取指令的嘗試可被解釋為傳信要處理給定事件。
如第5圖中所示,分配位址之保留範圍的部分以表示特殊的虛設函數返回位址140及虛設異常返回位址142,其用以指示用於某些域/模式轉換及異常返回操作之函數返回。虛設函數返回位址140為保留範圍130內之一組位址當中其最高有效位元部分144被設定為某一函數返回標頭值144之任一者。在此實例中,函數標頭具有大於或等於0xF0之值,以使得虛設函數返回位址在保留範圍130中。虛設函數返回位址用以表示:若試圖自彼虛設函數返回位址獲取或執行指令,則應執行函數返回操作。在一些實施中,試圖將程式計數器(PC)(藉由分支或以PC為目標之某一其他指令(如,加載))設定為虛設保留位址可能會觸發函數返回操作而非指令獲取。為了簡化硬體,可能僅可設定PC之指令子集(其通常用以執行函數返回)可實際上觸發函數返回操作。此提供了一種機制,該機制避免了需要在鏈路暫存器R14中暴露用於模式間或域間函數調用之真實函數返回位址,以使得該位址無法被次安全或低特權的代碼存取。
虛設函數返回位址140包括狀態資訊之諸多片段,該狀態資訊可在執行模式間或域間函數調用時進行設定,以指示函數調用之性質及/或關於將如何處理對應函數返回之資訊。在此實例中,虛設函數返回位址140包括模式間調用旗標(M)146,該模式間調用旗標(M)146指示是否將回應於自處置器模式至線程模式之模式間函數調用或保持在同一模式內之非模式間調用(保持在處置器模式中或保持在線程模式中)來設定虛設函數返回位址。在此實例中,編碼模式間調用旗標146,使得若其具有為0之值,則此指示模式間調用,且若旗標146為1,則此指示模式在對應函數調用期間保持不變。可在函數返回時使用模式間調用旗標146,以判定當前模式應自線程模式切換回處置器模式還是應保持不變。
又,虛設函數返回位址140包括安全域指示符(S)148,其指示應自次安全域還是安全域進行對應的函數調用。在此實例中,編碼安全域指示符,以使得若調用係自安全域進行,則該安全域指示符被設定為1,且若調用係自次安全域進行,則其為0。將瞭解,虛設函數返回位址140中所示之旗標146、148的特定編碼僅為一個實例,且其他方法可使用不同編碼。又,虛設函數返回位址可包括第5圖中未示出之額外的狀態旗標。在一些實施中,將安全閘道指令放置在自次安全域調用之安全函數的開始。此安全閘道指令可使處理電路系統執行自次安全域至安全域之轉換。因此,後續函數返回可判定係自安全域還是自次安全域調用了該函數,且因此可判定執行應返回至哪個域,若安全閘道指令執行了自次安全域至安全域之轉換,則安全閘道指令可清除鏈路暫存器中之返回位址的最低有效位元。如稍後將論述,將S 148放置在虛設函數返回位址之最低有效位元中及編碼S 148指示符以使得0指示次安全域可在與上述安全閘道指令行為相結合使用時提供額外的安全保護。將瞭解,儘管在上述實施中,S 148之值0指示次安全狀態且安全閘道指令清除了返回位址之最低有效位元,但亦可藉由對S 148欄位之其他編碼來實現期望的行為。舉例而言,若S 148之為1的值指示次安全狀態,則安全閘道指令可將返回位址之最低有效位元設定為1。
回應於某些異常進入轉換,將虛設異常返回位址142保存至鏈路暫存器,且以與虛設函數返回位址140類似之方式,提供了一種機制,該機制用於使得能夠將實際異常返回位址保存至堆疊(且隨後自堆疊恢復),以對在異常之後執行的次安全進程隱藏該實際異常返回位址。虛設異常返回位址142包括在虛設異常返回位址142之最高有效位元部分中的異常返回標頭150,該異常返回標頭150再次具有大於或等於0xF0之值,以確保異常返回位址在保留範圍130中。異常返回標頭150不同於函數標頭144,以使得虛設函數返回位址140/虛設異常返回位址142可彼此區分開。
虛設異常返回位址142包括模式旗標152,用以指示其中發生異常之模式(線程或處置器);及安全域旗標(S)156,用以指示其中發生異常之安全域(安全的或次安全的)。在一些實施中,亦可存在異常安全域旗標(ES)157,其指示最初發生異常之安全域(安全的或次安全的)。又,異常返回值包括線程模式互通啟用(thread mode interstating enabled; TMIE)值158,其指示在發生異常之前,TMID旗標34是否指示域轉換在發生異常之上下文中在線程模式下被禁用或啟用。出於向後相容性之原因(使得預期將對應於158之位元設定為1的舊代碼會將TMIE旗標158表示為在線程模式下啟用域轉換),虛設異常返回位址中之TMIE旗標158具有與控制暫存器32中之TMID旗標34相反的編碼,以使得當設定虛設異常返回位址142中之TMIE旗標158時,當前安全域之TMID旗標的值被反轉。TMIE旗標158本身並不需要控制異常返回操作,但將TMIE旗標158保存至虛設異常返回位址有效地提供了上下文保存/恢復功能,使得在自異常返回時,可將控制暫存器32中之用於返回的進程之TMID旗標34的值恢復至其在發生異常之前的狀態。在自異常返回時,TMIE旗標158之值再次反轉,且反轉的值被寫入至控制暫存器32中之TMID旗標34。雖然第5圖示出了對TMIE旗標158之特定編碼,但此編碼並非必需的,且可使用表示將恢復至TMID 34之值的其他方式。
注意,因為記錄在虛設函數返回位址140及虛設異常返回位址142中之狀態資訊146、148、152、156、157、158可發生不同的值,所以此意謂在保留範圍130中存在各自表現為虛設函數返回位址140中多個不同位址,及各自表現為虛設異常返回位址142之多個不同位址。因而,基於要在狀態旗標中編碼之資訊,選擇在調用函數或進入異常時被保存至鏈路暫存器R14之特定虛設位址。
第6圖示出不同堆疊訊框之實例,該等堆疊訊框可在執行模式間或域間函數調用時或在進入異常時被保存至記憶體中之堆疊資料結構。保存堆疊訊框之特定堆疊資料結構取決於在函數調用或異常時之當前模式及安全域,且若當前處於線程模式,則所選堆疊亦取決於與早先所述的當前域相關聯之堆疊指標選擇值30。
如第6圖之部分170中所示,對於除了域間/模式間函數調用以外之函數調用(其不觸發模式或域之任何轉換)而言,不需要將堆疊訊框儲存至堆疊,因為對於在相同模式及域內之函數調用而言,實際函數返回位址可簡單地保存至鏈路暫存器R14中,且無需在函數調用之後對正執行的代碼隱藏函數返回位址。
對於自安全域至次安全域之域間函數調用或模式間函數調用而言,將函數返回堆疊訊框172保存至堆疊。對於自安全域至次安全域之域間函數調用而言,將堆疊訊框172保存至由安全堆疊指標中之一者所指示的安全堆疊。若域間函數調用係自處置器模式進行的,則此將為安全主要堆疊指標MSP_S,而若域間調用係自線程模式進行的,則堆疊訊框被保存至安全主要堆疊(MSP_S)及安全進程堆疊(PSP_S)中的一者,其指標係由安全域之堆疊指標選擇值30-S指示。
對於模式間函數調用而言,預設此些情形係自處置器模式進行的,且因此使用與當前安全域相關聯之主要堆疊指標。
如第6圖中所示,函數返回堆疊訊框172包括返回位址174,該返回位址174表示當被調用函數返回時處理將返回到之實際函數返回位址。可將實際函數返回位址設定為自函數調用分支指令之位址依序跟隨之下一指令的位址。又,函數返回堆疊訊框包括狀態資料字176(FRETPSR),該狀態資料字176(FRETPSR)提供用於判定如何處理對應的函數返回之資訊。在此實例中,此包括解除特權為線程模式(HDT)旗標178之處置器,該線程模式(HDT)旗標178指示是否回應於自處置器模式至線程模式之模式間函數調用來保存函數返回堆疊訊框172。舉例而言,若該函數調用並非模式間函數調用,則HDT旗標可具有為0之值且因此不會導致處置器模式解除特權為線程模式,且若該函數調用為模式間函數調用,則HDT旗標可具有為1之值。又,狀態資料字176包括異常編號值179,其對應於在函數被調用時異常編號暫存器36之值。此充當「處置器模式指示值」,其指示是否回應於自處置器模式或線程模式調用之函數保存了函數返回堆疊訊框。將瞭解,亦可將其他資訊儲存在函數返回狀態字176內或函數返回堆疊訊框172之其他部分內。
在第6圖之上部部分中示出異常堆疊訊框180、182之實例。回應於異常,將第一(調用方)堆疊訊框180及第二(被調用方)堆疊訊框182中之一者或兩者保存至堆疊。出於效能原因,可能有用的為將可能需要回應於異常進入事件保存之暫存器劃分為兩個群組,稱作「調用方」暫存器及「被調用方」暫存器。調用方暫存器為如下暫存器:對於該等暫存器而言,以硬體實施之異常控制電路系統28負責將其保存至堆疊。因而,不需要異常處置器之軟體包括用於將調用方暫存器保存至堆疊資料結構之指令。
如第6圖中所示,調用方暫存器(包括在調用方堆疊訊框180中)可包括通用暫存器之子集。在此實例中,調用方狀態包括:通用暫存器R0、R1、R2、R3及R12;鏈路暫存器LR(R14);返回位址181之指示,處理將在異常的處理之後返回至該返回位址181(該指示可被設定為在發生異常時自程式計數暫存器R15導出之值);及異常返回程式狀態值(ERETPSR),其係基於程式狀態暫存器XPSR中之值進行設定,該程式狀態暫存器XPSR可提供用於控制條件指令之結果的條件代碼及關於處理之當前狀態的其他狀態資訊。ERETPSR亦可指定在發生異常之前執行的處理之異常編號36,若處理電路系統在發生異常之前在線程模式下運行,則該異常編號36可具有為0之預設值。將瞭解,此僅為其中暫存器狀態可包括在調用方暫存器狀態中之一個特定實例。一些實例亦可包括在調用方堆疊訊框中之浮點暫存器狀態,且其可配置是否應包括浮點暫存器狀態(例如,取決於正在執行之線程是否具有被啟用之浮點狀態)。
對於其中僅將調用方堆疊訊框180保存至堆疊之異常而言,在調用方堆疊訊框180已由異常控制電路系統28回應於異常事件保存至堆疊之後,可開始執行異常處理代碼,且若異常處理軟體知曉在其執行期間將覆寫此狀態,則異常處置器軟體可將來自於額外被調用方暫存器之狀態保存至該堆疊上。然而,藉由控制處理電路系統4之加載/儲存單元以回應於異常處置器代碼中所提供之加載/儲存指令將相關資料保存至記憶體,來執行由異常處置器對此狀態的保存,此可能比異常控制電路系統28控制硬體中之堆疊的情形慢。然而,可能有益的是,允許在調用方及被調用方暫存器狀態之間分區,以使得在進入異常之後執行的軟體可影響需要保存哪些暫存器。若異常處置器永遠不會存取特定的被調用方暫存器(例如,通用暫存器R7),則異常處置器不需要保存對應的架構狀態,且亦避免了與在異常控制電路系統28及硬體中完成該狀態保存相關聯精力及時間。可鼓勵異常處置器之代碼編寫器或此代碼之編譯器在使用額外被調用方暫存器之前首先使用調用方暫存器,以減少需要軟體中之額外狀態保存的機會。
然而,若異常進入導致自安全域至次安全域之轉換且在異常之前係在安全域中執行原始後台處理,則若異常控制電路系統28僅將調用方暫存器保存至記憶體,則此可能會使得被調用方暫存器在暫存器組14內可被將在最後異常之後執行的次安全異常處置器存取。此可能為非所期望的,因為被調用方暫存器可包括自記憶體位址空間之安全區域導出的資訊,否則SAU 24將阻止次安全異常處置器存取。
因此,對於自安全域至次安全域之某些轉換而言(其中後台處理先前已在安全域中執行),除了保存調用方暫存器以外,異常處理電路系統28亦將被調用方暫存器保存至相關的堆疊資料結構,且可清除已保存之暫存器(包括調用方暫存器及被調用方暫存器)的內容。因而,藉由在硬體中執行額外的狀態保存,此意謂在此情形下,通常會保存被調用方暫存器之次安全軟體無法獲得對在異常發生前已儲存在此些暫存器中之潛在安全資訊的存取。
因而,對於某些異常進入轉換而言,除了儲存調用方堆疊訊框180以外,亦可將第二(被調用方)堆疊訊框182保存至堆疊(在硬體控制下藉由異常處理電路系統28進行,亦即,不需要藉由處理電路系統4執行之顯式加載/儲存指令)。注意,雖然在第6圖中將被調用方堆疊訊框稱作與調用方堆疊訊框分離之堆疊訊框,但他人可將被調用方堆疊訊框視為調用方堆疊訊框之擴展,以使得可將180、182之組合視為單個堆疊訊框。兩種方法可被視為等同的。
被調用方堆疊訊框182包括額外的被調用方狀態,其包括未保存在調用方堆疊訊框180中之暫存器R4至R11。視情況,被調用方堆疊訊框182中亦可包括浮點上下文。由硬體保存之額外狀態亦可包括預定完整性簽名190。當異常控制硬體28保存了調用方及被調用方狀態時,完整性簽名190被包括在被調用方堆疊訊框182中,但自調用方異常堆疊訊框180中丟失。完整性簽名190具有對應於不可執行位址之保留範圍130中的一者之值,使得若試圖自其中獲取指令,則會傳信故障。完整性簽名190可具有無法匹配任何有效的虛設函數返回位址140或虛設異常返回位址142之值。完整性簽名190可用以偵測可能安裝在處理電路系統上以試圖繞過硬體所提供的安全性保護之某些形式的攻擊,從而迫使在安全域與次安全域之間進行分區。攻擊的一種可能途徑在於,攻擊者試圖執行異常進入轉換以進入異常的處理中,但接著將不同類型之返回轉換偽造成預期自異常進入返回之轉換,諸如,執行函數返回轉換。簽名190在堆疊訊框上位於與在函數返回堆疊訊框172中用以儲存函數返回位址174之相對位置相同的相對位置。因而,若在函數返回時偵測到返回位址174匹配完整性簽名190(或該返回位址174對應於不可執行的保留位址130中之任一者),則可觸發故障,因為此意謂用以執行函數返回之堆疊訊框實際上已回應於異常進入事件被保存至堆疊中,此可能指示攻擊正在執行。又,在自其中與被調用方暫存器相關聯之額外架構狀態存在於堆疊上之異常返回時,安全性檢查的一部分可能係檢查堆疊中對應於完整性簽名190之相關偏移量處的值是否具有預期值,因為缺少簽名可能指示基於回應於函數調用而保存至記憶體之堆疊訊框正執行異常返回事件,此又可能導致違反安全性的風險。
如第6圖中所示,作為預定簽名值190的一部分,TMIE交叉檢查值192可被儲存在預定簽名190的位元之一內(因此可有效地存在預定簽名190之兩個或更多個的有效值,其中每個值係在位址之保留範圍130內,但與用於虛設函數返回值及虛設異常返回值之位址分離開)。當發生其中被調用方堆疊訊框182被保存之異常時,TMIE交叉檢查值192被設定為指示寫入至鏈路暫存器中之虛設異常返回位址142的TMIE旗標158之狀態的值(例如,交叉檢查值192可等於TMIE旗標158,或可相對於TMIE旗標158反轉,或使用另一種編碼來表示TMIE旗標之狀態)。在被調用方堆疊訊框182被保存至堆疊之情形下,此指示在異常之前所執行的原始後台處理處於安全域中之情形下,該異常正自安全域轉移至次安全域,因而可能存在以下風險:在異常之後執行的次安全代碼可能會修改虛設異常返回位址142中之TMIE值,以試圖阻止安全代碼在異常返回之後正常地運行。TMIE交叉檢查值192提供交叉檢查以偵測對TMIE值158之篡改。
在一些系統實施中,可能有時期望某些類型之異常使其異常處置器在無特權狀態下被執行。此可為有用的,因為對於與由不受信任的第三方提供之庫代碼控制的與設備相關聯之某些類型的異常,可能不期望允許由不受信任的第三方提供之異常處置器具有可用於處置器模式之完全特權,因為無法信任該等異常處置器不會修改(例如)某一狀態資訊。然而,如第2圖中所示,預設處置器模式在特權狀態下運行,且因而對於在無特權狀態下運行之異常處置器而言,此會需要切換回線程模式。然而,在典型實施中,用於自處置器模式切換至線程模式之機制可經由異常返回。大體不期望原始異常觸發異常返回(在修改了返回位址之後,因而該返回去向無特權庫代碼,而非先前的後台處理),因為此會降低原始異常之執行優先級。以此方式降低執行優先級可阻止對異常處理例程正確地優先級排序。因而,若有可能使處理原始異常之處置器代碼能夠切換至線程模式而不會觸發異常返回,則此可為較佳的。
在典型系統中,因為自處置器模式切換至線程模式之唯一機制為經由異常返回,接著如第7圖中所示能夠將用於處理原始異常之異常處置器解除特權,則此將需要產生另一異常(例如,監督調用異常SVC),使得可在記憶體中設定異常返回堆疊訊框,該堆疊訊框不代表在異常之前正在執行的實際處理上下文而為偽造的,以便確保當自SVC異常返回時,處理將切換至線程模式以使得先前發生之異常的主體可在線程模式中在無特權狀態下被處理。
舉例而言,如第7圖中所示,當在線程模式下在線程T1中處理一些後台代碼時,發生中斷IRQ,其為將被傳遞至無特權庫之類型。在第7圖之步驟1中,該中斷使異常控制電路系統28觸發將暫存器狀態堆疊至進程堆疊,以保留線程T1之暫存器狀態。該中斷導致自線程模式至處置器模式之轉換,因為預設最初在處置器模式下發生異常。雖然用於處理IRQ異常之異常處置器的主體200將由不受信任之庫執行,但用於處理IRQ異常之異常處置器具備包裝函式代碼202,該包裝函式代碼202係在主要異常處置器主體200之前及之後執行,其中包裝函式代碼係在處置器模式下執行,並控制用於產生SVC異常之操作,以確保可在線程模式下處理主體。
因而,在第7圖中之步驟2中,處在處置器模式中之包裝函式代碼產生SVC異常,該SVC異常實際上並不處理原始IRQ中斷,而僅為了使IRQ處置器能夠切換至線程模式而產生。SVC異常使得異常控制電路系統28執行將暫存器狀態堆疊至與當前域相關聯之主要堆疊指標MSP所指向的主要堆疊(因為當前模式為處置器模式,所以使用主要堆疊)。回應於SVC異常而執行之SVC異常處置器將進程堆疊指標切換為指向不同堆疊結構PSPIRQ
,該堆疊結構PSPIRQ
與線程TRQ
相關聯,該線程TRQ
用以執行用於處理原始IRQ異常之主要異常處置器主體200。SVC異常處置器在進程堆疊上偽造堆疊訊框,該進程堆疊在其異常返回狀態資訊(ERETPSR)中指示為零之異常編號,以指示對應異常返回應返回至線程模式。注意,此值為偽造的,因為在SVC異常之前執行的處理實際上處在處置器模式中。
當SVC異常處置器完成時,其導致分支至偽虛設異常返回位址,該偽虛設異常返回位址在由PSPIRQ
指向之堆疊上創建的偽異常返回堆疊訊框而非步驟2中在主要堆疊上創建的異常堆疊訊框來觸發異常返回。接著藉由異常處理電路系統28來執行異常返回,在第7圖之步驟3中,異常處理電路系統28導致自PSPIRQ
堆疊進行硬體拆堆。硬體偵測到偽虛設異常返回位址142中之M位元152指示該返回應返回至線程模式,且因此在步驟4中,可藉由無特權庫在線程模式下執行用於處理IRQ異常之異常處置器的後續主體200。注意,這係在沒有自原始IRQ異常返回的情況下完成的,且因此並未降低用於處理IRQ異常之常處置器的優先級。
一旦主要異常處置器主體200完成,則在步驟5中進行另一個SVC異常調用(SVC為一種可由軟體自動觸發之異常類型,而非由非預期的或錯誤的事件觸發之異常類型),此再次導致進一步硬體堆疊至PSPIRQ
所指向之進程堆疊,且被調用的SVC處置器接著銷毀剛在PSPIRQ
所指向之進程堆疊上創建的堆疊訊框,並接著更新當前安全域之進程堆疊指標以便恢復與後台線程T1
相關聯之先前堆疊指標PSP1
。在第7圖之步驟6中,SVC異常產生異常返回,該異常返回接著使用MSP觸發自主要堆疊之進一步硬體拆堆(亦即,拆堆在步驟2期間所創建之堆疊訊框),且接著在處置器模式下執行了任何其餘的包裝函式函數202之後,接著在步驟7中產生另外異常返回,該另外異常返回導致自PSP1
所指向之進程堆疊中硬體拆堆與線程T1
相關聯的暫存器狀態(亦即,拆堆在步驟1期間所創建之堆疊訊框)。處理接著在以線程模式執行之線程T1
的後台代碼中繼續進行。
第7圖中所示之進程使得能夠將某些類型之異常解除特權,以使得其異常處置器在線程模式中運行。然而,此具有諸多劣勢。首先,由於需要偽造異常堆疊訊框而難以產生用於控制此進程之軟體代碼,且因此進程可能容易由於程式設計者而出錯,此可能會提供漏洞,攻擊者可能會利用該等漏洞,或者該等漏洞可能停止系統正確地運行,或為攻擊者提供一種提取秘密值(諸如,加密密鑰)之方式。
另一劣勢在於,為了使此方法起作用,SVC異常(在主要異常處置器主體200之開頭及結尾執行以創建偽堆疊訊框,並在自原始異常返回之前被清除)之異常優先級必須高於需要被解除特權之每一個中斷IRQ的優先級。此可使即時系統之設計更為複雜,因為SVC異常始終有相同的優先級,且因此其他IRQ異常之最壞情況中斷潛時會被延長最長SVC調用之持續時間。此可能並非所期望的。
又,第7圖中所示之方法很慢,此為使用具有嚴重中斷潛時之無特權庫的主要障礙。此種不良效能係由多個因素引起的,包括在處理第7圖之步驟2及步驟3之間的SVC異常時手動創建異常堆疊訊框,及需要兩個不同SVC異常之事實,該事實觸發在第7圖之步驟2、3、5及6中之四個額外暫存器狀態堆疊及拆堆事件,該等事件表示若僅在處置器模式下執行用於處理IRQ之異常處置器,則不需要記憶體存取潛時。因而,效能成本可意謂,一些系統設計人員可能會覺得他們根本無法使用與不受信任之庫代碼相關聯的設備(諸如,無線網路介面或USB控制器),此可能會限制系統設計之靈活性。如在第7圖之底部部分中所示,整個解除特權進程在此實例中係在次安全域中執行的,但將瞭解,此進程亦可在安全域內執行。
第8圖示出一種替代方法,該方法使用如本申請案中所述之模式間調用分支指令來提高異常解除特權之效能。藉由提供一種模式間調用分支指令(該模式間調用分支指令能夠在一條指令所指定之目標位址處分支至該指令,並設定函數返回位址以指示在函數完成後處理應返回到之位址)以及觸發自處置器模式至線程模式之切換,此意謂可更快地將中斷解除特權並減少效能降低、複雜性及上述與第7圖中所示之方法相關聯的其他問題。藉由此方法,對於將在無特權狀態下處理之IRQ異常的回應可更為簡單。
第8圖之步驟1與第7圖中相同。在步驟2中,執行用於準備執行主要中斷處置器主體201之一些包裝函式代碼203,該包裝函式代碼203將指定作為分支目標位址(將在主要異常處置器主體201中執行之第一指令的位址)之模式間調用分支指令作為其在主要中斷處置器主體201之前的最後指令。在一些作業系統中,包裝函式203可等同於包裝函式202,不同之處在於,包裝函式203執行模式間分支指令而非觸發SVC異常。在一些實施中,模式間調用分支指令可為專用指令編碼,其不同於不自處置器轉換為線程模式之非模式間調用分支指令的指令編碼。因而,在第8圖之步驟3中,執行模式間調用分支指令會觸發自處置器模式至線程模式之切換,且接著主要異常處置器主體201在第8圖之步驟4中繼續在線程模式下執行。不需要調用SVC異常。
在進行模式間函數調用時,可將資訊儲存在虛設函數返回位址140中,以(使用模式間調用指示符146)指示該函數調用為模式間調用,以使得當在第8圖之步驟5中觸發對應的函數返回時,處理電路系統4便可偵測指示符146,並偵測除了分支至與先前函數調用(儲存在函數返回堆疊訊框178中)相關聯之函數返回位址174以外,亦應將當前模式自線程模式切換回處置器模式。接著在第8圖之步驟6中在處置器模式中執行一些其餘包裝函式碼203,之後為步驟7,在步驟7中執行異常返回以自處置器返回至在IRQ異常發生之前執行的後台線程T1
。在一些系統中,主要中斷處置器主體201(第8圖中)可等同於主要中斷處置器主體200(第7圖中),不同之處在於,不觸發SVC異常自無特權主要中斷處置器主體返回,可藉由在第8圖之步驟3中簡單地分支至放置在鏈路暫存器中的虛設函數返回位址140來請求該返回。如此,主要中斷處置器主體201(第8圖中)可為標準C函數,且不需要任何特殊處理。
因而,藉由此方法,僅需要硬體堆疊及拆堆操作,其用於保存及恢復與後台代碼T1
相關聯之暫存器狀態,且不需要與兩個SVC異常相關聯之其他硬體堆疊及拆堆操作。又,此方法對於編譯器或程式設計者而言更易於編碼,從而減少了出錯的機會,且不需要使SVC異常具有比將要解除特權之所有異常更高的優先級。
為了藉由限制切換安全域之機會數目來提高安全性,可能不允許模式間函數調用改變安全域,而僅可在模式之間改變。因而,當執行模式間函數調用分支指令時,處理電路系統4可以使當前安全域與在執行模式間函數調用分支指令之前相同。如第9圖中所示,可禁止自次安全線程模式至安全處置器模式之組合域/模式函數返回轉換,以保持安全性。可藉由在模式間函數返回時對是否正在請求至安全域的返回之顯式檢查而強制如此,且若偵測到此請求,則可觸發故障,如以下參考第15圖所描述。
然而,對於模式間函數返回而言,如第10圖中所示,可能期望准許組合模式/域轉換,至少對於模式間函數返回係自安全線程模式至次安全處置器模式的情形而言如此。此可使編譯器能夠使用稱為尾部調用之技術,如第11A圖至第11C圖中所繪示。在一些實施中,出於安全性原因,為了安全可能已禁止尾部調用進行次安全函數調用。如此,儘管可能需要如第10圖中所示之安全線程至次安全處置器之模式間返回轉換,但可能並不需要如第9圖中所示之次安全線程至安全處置器之模式間返回轉換。
如第11A圖中所示,一些高級代碼(將被編譯成處理系統之指令解碼器10所支持的彙編代碼)可能包括嵌套函數調用,其中在第一函數fn1內調用第二函數fn2,且對函數fn2之調用的位置使得在fn2的末尾與fn1的末尾之間無fn1的其他指令。
在此情境下,如第11B圖中所示,編譯器產生彙編代碼之一種選項可為針對對fn1及fn2之每次調用產生調用分支指令(BL,亦稱為分支與鏈路指令),該調用分支指令觸發將函數返回位址保存至鏈路暫存器LR(R14),並分支至代表彼函數之函數代碼開始之目標位址,之後為函數返回指令(間接分支指令BX,其將鏈路暫存器指定為其位址運算元),該函數返回指令指示處理應返回至先前保存至鏈路暫存器之返回位址。調用fn1之調用分支指令未在第11B圖中示出,因為其係調用了fn1之代碼的一部分,且第11B圖僅示出了fn1及fn2之函數代碼。因而,對於fn1,編譯器產生BL指令283(用以調用fn2)及BX指令286(用以自fn1返回至調用fn1之代碼)。對於f2n,編譯器產生BX指令284,用於自fn2返回至fn1。為了確保在調用fn2時保留fn1之返回位址,fn1代碼亦包括用以在調用fn2之前將鏈路暫存器的內容壓入堆疊之壓入指令282,及用於在自fn1返回之前自堆疊恢復鏈路暫存器之彈出指令285。實務上,因為fn2為fn1內要執行之最後一個活動,所以函數1之鏈路暫存器與堆疊之間的此壓入及彈出會引起一些不必要之記憶體效能的額外負擔。
因而,如第11C圖中所示,用於編譯函數之替代方法可為使用不更新鏈路暫存器之非調用分支指令287來調用與fn2相關聯之代碼,從而將在鏈路暫存器中為fn1保存之返回位址有效地傳遞給fn2。此意謂當執行最終返回分支288時,處理返回至在fn1之前正處理之後台代碼。此方法稱為尾部調用,且可藉由避免需要PUSH 282、POP 285及BX 286指令來提高效能。
然而,在其中函數1處在次安全線程模式下並由如第10圖之實例所示的模式間函數調用進行調用且函數2處在安全線程模式並由域間函數調用進行調用(自次安全域NS調用至安全域S)的情境下,此意謂為了支持尾部調用,後續的返回分支指令288將需要觸發自安全線程模式返回導引至次安全處置器模式。若不支持組合域/模式轉換,則尾部調用將係不可能的,尾部調用可能需要重新編譯許多現有的舊代碼,因此當組合域/模式轉換係自安全線程模式至次安全處置器模式時,支持組合域/模式轉換可為更高效的。然而,藉由禁止自次安全域至安全域之模式間函數返回,此可提高安全性,因為此限制了可進入安全域之途徑。如早先所解釋,可能不需要此種轉換組合,因為在舊代碼中可能已禁止了自安全域至次安全域之尾部調用。
第12圖為繪示回應於函數調用分支指令(BLX)而執行之步驟的流程圖。該等步驟係由處理電路系統4在指令解碼器10的控制下回應於解碼被標識為函數調用分支指令之指令執行的。在步驟300中,判定函數調用分支指令是否為模式間調用分支指令(其為特定類型之函數調用分支指令),該模式間調用分支指令係藉由與其他類型之函數調用分支指令不同的指令編碼來區分。舉例而言,模式間調用分支指令可具有與非模式間調用分支指令不同之操作碼,或可具有相同操作碼,但具有在指令編碼中指定之單獨參數,該參數用以區分其是否為模式間調用分支指令。在第12圖中所示之實例實施例中,存在模式間調用分支指令之兩種變體BLXT及BLXTI,其均觸發模式間函數調用,但其在控制暫存器32中設定TMID參數34之方式不同。將瞭解,一些系統實施可能不支持模式間調用分支指令之兩種變體,而僅可具有BLXT及BLXTI變體中之一者。又,一些實施可具有模式間調用分支指令之另外變體。
若函數調用分支指令並非模式間調用分支指令,則在步驟302中,處理電路系統4(在指令解碼器10的控制下)判定該函數調用是否為自安全域至次安全域之域間函數調用。在一些實施中,此安全至次安全的域間調用可由函數調用分支指令之另一種變體BLXNS傳信,該BLXNS具有專用指令編碼以將其與其他類型之函數調用分支區分開。又,在一些實施中,BLXNS指令是否觸發域間調用亦可取決於該指令所指定之分支目標位址,尤其係該分支目標位址之最低有效位元是否為0。在一些實例中,在有效函數調用或自次安全代碼分支至安全域時,回應於安全閘道指令(該安全閘道指令係在函數調用之後作為安全代碼中之第一指令被執行),可將函數返回位址之最低有效位元清理為0,以確保後續函數返回繼而返回至次安全域,以使得次安全代碼無法藉由提供在安全區域中之函數返回位址來誘騙安全代碼分支至SAU 24所定義之安全位址區域內的任意位置。因為清理分支目標位址之最低有效位元可用以確保安全至次安全的域間函數返回(使用BXNS指令)之安全性,所以使用類似方案來確保安全至次安全的域間函調用(使用BLXNS指令)之安全性可能很方便。因而,在偵測到存在具有被設定為0之分支目標位址的最低有效位元之域間調用指令BLXNS時,可將此視為安全至次安全的域間調用。在一些實施中,當處理電路系統4在安全域中操作時,安全至次安全的域間調用指令(BLXNS)可能僅在指令集中可用(且因此可被解碼級10偵測到)。在此實施中,試圖自次安全狀態執行BLXNS指令可能導致在解碼級10中無法將該指令識別為針對當前狀態之有效指令,且因此處理不會到達步驟300。
若函數調用並非安全至次安全的域間調用,則在步驟304中,可在無任何特定安全隱患的情況下處理該函數調用,且在步驟304中將鏈路暫存器(R14)設定為函數返回位址。該函數返回位址具有在位址空間100中的函數調用指令之後的指令位址的值(亦即,函數調用指令之位址加上函數調用指令操作碼之長度)。在步驟306中,基於由函數調用分支指令指定之分支目標位址來更新程式計數暫存器R15,以使得處理繼而分支成在該分支目標位址處的指令。此表示對函數調用之分支處理的正常情況,其不會觸發任何的域改變或模式改變。
若在步驟302中判定了函數調用分支為安全至次安全的域間調用,則在步驟307中,處理電路系統4(基於異常編號36是否為特殊線程模式值0)判定當前模式是否為線程模式,且亦判定線程模式交互禁用(thread mode interstating disable; TMID)參數34是否指示在線程模式下禁用域轉換。若當前模式為線程模式且域間轉換在線程模式下被禁用,則在步驟308中,處理電路系統傳信故障。所傳信之特定類型的故障可為專用故障類型,其僅用於由於在線程模式下切換安全域(在TMID旗標34指示此切換被禁用時)之嘗試而觸發之異常。或者,該故障可針對用以處理多種故障條件之異常處置器,且在此些情形下,可設定與域間轉換禁用檢查相關聯之綜合特徵旗標,以使得異常處理例程可容易地識別出故障原因及需要執行之後續動作。在第12圖中,將此指示為INVTMI(無效線程模式互通)UsageFault,儘管此類型故障之確切命名約定顯然可能會有變化。對於安全至次安全的域間調用而言,INVTMI故障係在安全域(在試圖進行調用之前的當前域)中處理,此為有用的,因為用於管理原本請求安全至次安全的轉換之線程的進程將為管理安全線程之安全作業系統,該安全作業系統可較佳被放置成處理INVTMI故障,以使得可配置用於彼線程在次安全域中運行之任何所需資源。
若在步驟307中,判定了當前模式為處置器模式(例如,當異常編號36不為零時)或TMID參數34為0從而指示域轉換在線程模式下被啟用,則在步驟310中,處理電路系統將鏈路暫存器R14設定為如第5圖中所示之有效虛設函數返回地址值140中的一者。在虛設函數返回位址140中,模式間旗標(M)146被設定為1從而指示此並非模式間函數調用,且安全域旗標(S)148亦被設定為1從而指示調用係自安全域進行的。在步驟312中,將函數返回堆疊訊框172保存至由安全主要堆疊指標MSP_S或安全進程堆疊指標PSP_S(取決於當前模式係處置器模式還是線程模式,以及若處在線程模式中則取決於安全域13_S之堆疊指標選擇值30)所指向之堆疊資料結構。已保存之函數返回堆疊訊框172指定HDT旗標178等於0,從而指示此並非模式間函數調用。又,函數返回堆疊訊框172中之異常編號欄位179被設定為等於控制暫存器20中之異常編號36的當前值,以指示調用係自處置器模式還是線程模式進行的。此異常編號欄位179充當處置器模式指示值,其指示當前模式是否為處置器模式。函數返回堆疊訊框亦包括函數返回位址174,該函數返回位址174係以與步驟304相同之方式設定的,但此次將其保存至堆疊中而非鏈路暫存器中,以使得將在域間調用之後執行的次安全代碼無法了解在函數調用之前在安全代碼中執行何指令。在步驟314中,處理電路系統接著將當前域切換至次安全域,且接著方法進行至步驟306,在步驟306中以與先前所述相同之方式執行分支至由函數調用分支指令所指定之分支目標位址。
再次參考步驟300,若函數調用分支指令為模式間調用分支指令,則在步驟320中處理電路系統判定當前操作模式是否為線程模式,且若當前模式為線程模式,則在步驟322中傳信使用故障。此可為與INVTMI UsageFault不同類型之使用故障。因為模式間調用分支指令旨在觸發自處置器模式切換至線程模式以支持中斷解除特權,所以試圖自線程模式來執行該模式間調用分支指令為錯誤。當處在線程模式下時抑制模式間調用分支之指令執行可避免潛在的不可預測之結果,該等結果可能係由於回應於調用分支設定錯誤的堆疊訊框(其可能導致安全性漏洞)而引起的。因而,可僅自處置器模式執行模式間調用分支指令。
若在步驟320中判定了當前模式為處置器模式,則方法進行至步驟324,在步驟324中將鏈路暫存器設定為特殊虛設函數返回位址值140中之一者,但不同於在步驟310中,在步驟324中將模式間旗標(M)146設定為0,以指示應將對應函數返回視為模式間函數返回。又,函數返回值140中之安全域旗標(S)148指示在執行了模式調用分支指令時(模式間調用可自安全域或次安全域進行)之當前操作域。
在步驟326中,處理電路系統將函數返回堆疊訊框172保存至基於在執行模式間調用指令之前的操作域及模式以及堆疊指標選擇值30而選擇之堆疊。函數返回堆疊值再次包括函數返回位址174(以與步驟304或312中相同之方式設定),及處置器模式指示對應於異常編號36之當前值的值。當模式間調用係自處置器模式進行時,則預期異常編號欄位179將不為零。對於模式間調用而言,將函數返回堆疊訊框中之HDT旗標178設定為1,以指示此函數返回堆疊訊框係回應於模式間調用而保存的,該模式間調用可提供交叉檢查資訊,用以在使用虛設函數返回位址140之對應函數返回時檢查模式間旗標146為正確的還是已被不受信任之代碼篡改。注意,在步驟312或326中保存函數返回堆疊訊框之後,若在拆堆目前已保存的堆疊訊框之前需要進行進一步堆疊,則對應的堆疊指標亦將被更新為指向應將進一步堆疊之資訊保存至該堆疊的位置。
在步驟328中,視情況,處理電路系統回應於模式間調用分支指令而觸發要執行之錯誤同步屏障操作。舉例而言,錯誤同步屏障操作可涉及:處理電路系統4暫停指令的進一步執行,直至判定了用於檢查任何先前所執行之指令的有效性之至少一些類型的錯誤偵測或校正操作的結果已完成且確認了此些操作無錯誤(涉及可被校正之錯誤)或涉及可正確地歸因於在自處置器改變為線程模式之前的指令執行之錯誤為止。錯誤同步屏障操作為如下操作:確保由可靠性、可用性及可維修性(reliability, availability, and serviceability; RAS)錯誤偵測/校正電路系統29偵測到之至少一些類型的錯誤可歸因於在模式改變之前所執行的代碼,該模式改變係由模式間調用分支指令引起且區別於當在模式間調用分支指令所引起的模式改變之後執行處理代碼時出現之錯誤。對於模式間調用分支而言,可為有用的是能夠準確地指出所偵測到的RAS錯誤會影響到在由模式間函數調用引起的模式改變之前執行的高特權代碼還是在模式改變之後執行的低特權代碼。此係因為,相比於解決與高特權代碼相關聯之錯誤,通常解決與低特權代碼相關聯之錯誤可能對系統可用性的影響要低得多。舉例而言,高特權代碼可為作業系統且因此處理歸因於作業系統之錯誤可能需要完全系統重設,而可藉由殺死個別線程但不影響其他線程及作業系統來簡單地處理歸因於與該線程相關聯之低特權代碼的錯誤。因而,藉由回應於模式間調用來執行錯誤同步屏障操作,此可藉由限制處理在錯誤可安全地歸因於在模式間函數調用所引起的模式改變之後執行低特權代碼的情形下的任何已偵測到之錯誤的影響而提高系統的可用性。將瞭解,可能存在可能超出錯誤同步屏障範圍且因此可能無法藉由使用此類屏障進行遏制之一些類型的錯誤。此些不可遏制之錯誤可能仍需要完全系統重設。然而,使用錯誤同步屏障可能會增大錯誤歸因於單個線程之可能性,且因此會降低將需要完全系統重設之可能性。
並不必需在所有情境中觸發錯誤同步屏障操作。一些系統可能偏向於藉由不人為地阻止在模式間函數調用之後所執行之後續指令的執行來提高常規程式執行之效能。舉例而言,對於某些即時關鍵中斷,中斷處理潛時可能必須儘可能地短,且因此可能較佳不要觸發錯誤同步屏障操作,但若偵測到RAS錯誤,則此會以更大的效能成本為代價,而對於具有次即時關鍵要求或與安全關鍵行為相關聯之其他類型的中斷,則可能較佳觸發錯誤同步屏障操作,以使得,儘管由於在模式間調用之後推遲執行指令直至錯誤偵測/校正結果可用為止會略微減慢常規中斷潛時,但若偵測到錯誤,便可指出錯誤之位置,並可儘可能地避免系統重設之全部影響。因而,在一些實施中,控制暫存器20可儲存配置參數,該配置參數指定是否應回應於模式間調用指令來觸發錯誤同步屏障操作。在一些系統中,在安全域之間存入用於指定是否應執行錯誤同步屏障操作之配置參數,以使得次安全域及安全域可獨立地選擇是否應執行屏障操作。
無關於是否執行錯誤同步屏障操作,在步驟330中,回應於模式間調用分支指令,處理電路系統亦設定當前安全域之堆疊指標選擇值30-S或30-NS,以指示應為在模式間函數調用之後在線程模式下執行的後續操作選擇進程堆疊指標。此確保了將在模式間調用之後執行的異常處置器之低特權部分無法存取或損壞由包裝函式代碼(該包裝函式代碼係在模式間調用指令之前在處置器模式下執行)的高特權部分所使用之主要堆疊指標,即使在彼異常處置器處理該異常之前執行的線程模式代碼確實能存取主要堆疊指標。
在步驟332中,處理電路系統4判定正執行之模式間調用分支指令是否為指令之BLXTI變體。若為如此,則在步驟334中,將TMID參數34設定為0,以指示在線程模式下啟用安全域與次安全域之間的域轉換。此對應於如早先所提及之模式間調用分支指令的第二變體。若模式間調用分支指令為BLXT變體(第一變體),則在步驟336中,將TMID參數34設定為1,以指示在線程模式下之域轉換被禁用。取決於是否已為將在模式間函數調用之後執行的線程建立起安全域及次安全域之資源,程式設計者可選擇使用BLXT還是BLXTI變體。在其中兩種域之資源皆已建立而使得必要時在安全域與次安全域之間進行切換為安全的之情形下,可選擇BLXTI變體,而在其中僅已配置了用於S/NS域中之一者之資源的情形下,可選擇BLXT變體。
此些資源可包括在安全MPU 26-S及次安全MPU 26-NS中之相關者內的MPU配置(其中MPU配置可包括定義對相應記憶體區域之存取權限的一些記憶體區域屬性及/或指向記憶體系統6中提供彼些記憶體屬性的表之指標中的一者或兩者)。又,該等資源可包括在安全的或次安全的堆疊指標暫存器(如第3圖中所示之R13的已存入版本)中之堆疊指標,且若記憶體中之適當堆疊結構尚不可用,則亦包括儲存在記憶體中之對應堆疊結構的分配。藉由提供在線程模式下禁用域轉換之能力,此使得線程能夠使其資源僅為一個域配置,且接著僅需要在試圖切換域時延遲分配用於其他域之資源,否則將會觸發故障,如以上在步驟308中所示,或如早先針對其他類型之域間轉換所述。藉由使用BLXTI或BLXT指令亦設定線程最模式互通禁用參數34,此避免了需要單獨的指令來單獨地設定旗標。
無論執行模式間調用分支指令之哪一變體,在步驟338中,處理電路相同均更新異常編號36以指示非異常處理值(例如,0),且因此處理器切換至線程模式。再次,方法繼而進行至步驟306,以分支至由函數調用分支指令所指定之分支目標位址。後續程式執行將接著自儲存在該分支目標位址處之指令繼續進行。將瞭解,該分支目標位址可由函數調用分支指令以諸多方式指定。對於間接分支,可使用運算元選擇含有目標位址之暫存器來定義分支目標位址。直接分支可使用直接在指令編碼中編碼之立即值指定目標位址。程式相對計數分支(其可為間接的或直接的)可指定要添加至當前程式計數值之偏移量以便獲得分支目標位址。
第13圖繪示在進入異常時執行之步驟。在步驟350中,發生異常。該異常可為軟體觸發之異常(諸如,監督調用(supervisor call; SVC)),或由軟體直接導致之故障的發生而引起之異常,諸如,試圖執行未定義之指令,試圖自保留位址範圍130獲取指令,或對記憶體存取(該存取由於在記憶體存取檢查電路系統22處之失敗的記憶體權限檢查而觸發位址故障)。又,該異常可為硬體觸發之中斷,其係由於自外部設備或周邊設備接收到信號或訊息而引起的。
無關於引起異常之原因,當發生異常時,則在步驟352中,處理電路系統4受異常控制電路系統28控制,以將鏈路暫存器R14設定為早先所描述之特殊虛設異常返回值142。更特定而言,選擇若干虛設異常返回值中之一者,以及基於發生異常時操作之當前模式及域來選擇當前模式旗標152及當前域旗標156處的值。又,將線程模式互通啟用(TMIE)旗標158設定為控制暫存器32中之TMID旗標34的當前值之倒數。此在異常處理期間保留了TMID旗標中之資訊,使得該資訊可在異常返回時被恢復。將瞭解,將TMID旗標反轉以設定TMIE旗標之實施僅為一種可能的實施,且其他實例可使用與TMID值相同的編碼來編碼TMIE值並只需直接複製TMID值即可,或可使用完全不同的編碼,該編碼不需要用單位元旗標來表示,而可使用多位元值。
在步驟354中,異常控制電路系統28觸發將暫存器狀態自暫存器1至由已存入堆疊指標暫存器中之堆疊指標中的一者所標識之記憶體中的堆疊資料結構之硬體觸發狀態保存。要選擇之特定堆疊指標取決於異常發生之前的當前域及模式以及所使用之堆疊指標選擇值30。狀態保存可涉及僅儲存第6圖中所示之調用方堆疊訊框180,或儲存調用方堆疊訊框180及被調用方堆疊訊框182。決定僅保存調用方堆疊訊框還是保存調用方及被調用方堆疊訊框可取決於發生異常時之當前操作域及將在其中處理異常之域,且在一些情形下係基於儲存在控制暫存器20中之狀態資料。
若該異常是自本身並不處理異常之後台代碼中發生的,且已處理了任何先前發生之異常,且後台代碼係在次安全域中處理的,則僅需要保存調用方堆疊訊框180且不需要保存被調用方堆疊訊框182。又,若後台代碼係在安全域中處理的,但異常將在安全域中發生,則再次不需要保存被調用方堆疊訊框182。
在異常係自在安全域中處理之後台代碼發生的但異常要在次安全域中被處理的事件中,將存在次安全異常處置器能夠藉由在異常之前運行的安全代碼來存取放置在暫存器14中之暫存器狀態的風險。因此,在此情形下,調用方堆疊訊框180及被調用方堆疊訊框182均被保存至由安全主要堆疊指標及安全進程堆疊指標中的一者所標識之安全堆疊,且可清除通用暫存器16以隱藏安全資料以免於自次安全處置器存取該安全資料。
前一段落描述了在自後台代碼中發生異常時判定是否保存額外的被調用方堆疊訊框之一般原則。然而,當另一異常搶先於尚未完成其異常處置器之早先異常時,或當執行了異常之尾部鏈接時(其中在返回至後台代碼之前,在完成一個異常時又發生另一異常),則可能存在對於是否保存調用方堆疊訊框及/或被調用方堆疊訊框之更複雜決定。已公開的PCT申請案WO 2013/117899 A1號及WO2014/0538048 A1中描述了用於判定回應於異常來保存調用方及被調用方狀態中之哪一者的決定過程之實例,該等申請案內容以引用方式併入,且可用於決定在本申請案之第13圖中的步驟354中可應用哪些用以堆疊之暫存器。特別參見WO 2013/117899 A1之第12圖及相關描述。
在步驟354中,若決定將被調用方堆疊訊框182保存至堆疊,則在預定簽名190內,指定TMIE交叉檢查資訊192,將其設定為與在步驟352中所設定之虛設異常返回位址內的TMIE旗標158相同的值(或在替代實施中,設定為可用以檢查是否已正確地設定了TMIE旗標158之另一值)。這提供了一些保護,以防範以下風險:在異常發生之後運行的次安全代碼可能以在自異常返回之後處理的安全代碼在將TMIE旗標158用以將TMID旗標34恢復至控制暫存器32之後會有接收互通禁用旗標TMID 34之錯誤值之風險的方式來篡改虛設異常返回位址中之TMIE旗標158。此防範了由於基於TMID 34(其係基於篡改TMIE旗標34而設定)產生之虛假故障而導致的拒絕服務攻擊。
吾人可能會問為什麼在被調用方堆疊訊框182中而非在調用方堆疊訊框180中指定TMIE交叉檢查值190,因為吾人可能會認為,若將保留後台代碼之TMID旗標34的值保存至調用方堆疊訊框180,則可保持安全,而不會被鏈路暫存器中之異常後處置器存取,與關於在異常返回值142中之TMIE旗標158的情形一樣。然而,實務上,調用方堆疊訊框180可能不具有用於額外資訊之更多備用容量,因為狀態欄位ERETPSR可能已具有許多要編碼的資訊,且因此可不存在用於交叉檢查資訊192之空間。在一些實施中,可能在ERETPSR值中有足夠空間用於添加TMIE旗標,但ERETPSR值中之其餘空間仍受限制,且較佳保留彼空間以供將來向架構添加。對於所有類型之異常而言,皆不保存被調用方堆疊訊框182,且因此無法依賴於被調用方堆疊訊框182來儲存TMIE值158之主要副本,該主要副本指示在異常返回時將恢復至TMID旗標34的值。因此,第5圖及第6圖中所示之方法(其中TMIE旗標158被放置在鏈路暫存器中作為虛設異常返回位址的一部分,但交叉檢查資訊190被包括在被調用方堆疊訊框182中)使得所有類型之異常能夠保留TMID旗標34的值,儘管調用方堆疊訊框180中缺少空間,但對於其中存在TMIE旗標158被篡改之風險的彼些情境而言,此些情境亦可與藉由保存額外的被調用方堆疊訊框182來保護暫存器狀態的情境相同,且因此被保存至被調用方堆疊訊框182之交叉檢查資訊192保護TMIE旗標158免受篡改。
在步驟356中,作為異常進入轉換的一部分,異常控制電路系統28觸發處理電路系統4將控制暫存器32中之TMID旗標34設定為0,以指示在線程模式下啟用域轉換。此確保了所有異常處置器皆會看到是否在線程模式下啟用域轉換之一致檢視,而無論是否為在異常之前執行的代碼禁用了域轉換。與在創建TMID旗標34之前寫成之軟體的向後相容性可能會需要以此方式在線程模式下啟用域轉換。
在步驟358中,異常控制電路系統28控制處理電路系統4分支至異常處理例程。可基於異常向量表來判定要在異常處理例程的開始處執行之指令的位址,該異常向量表將不同類型之異常映射至相應的異常處理例位址。該異常處理例程係在處置器模式下處理,因而若處理電路系統4當前處在線程模式下,則回應於要發生異常,當前模式會切換至處置器模式。若當前模式在異常發生時已為處置器模式,則不改變當前模式。因而,儘管在處置器模式下處理了一些代碼之後有可能執行如早先所述之模式間函數調用以切換至線程模式,但最初不可能針對線程模式發生異常。
又,在異常進入時,異常控制電路系統28可視情況觸發處理電路系統4在必要時切換安全域。不同的異常可與不同的安全域相關聯。一些異常可能始終需要在特定域(諸如,安全域或次安全域)中發生。其他異常可在異常發生時之當前域中發生。因而,若要在與當前域不同之域中處理異常,則除了分支至異常處理例程以外,異常控制電路系統28亦可觸發安全域之改變。
第14圖為流程圖,其繪示出回應於並非第12圖中所示之類型的函數調用分支指令之分支指令而執行的步驟。在步驟400中,處理電路系統檢查目標位址是否在保留位址範圍130中。若不在,在此為指向可執行指令之位址的常規分支指令。在步驟402中,偵測該分支是否在請求自安全域至次安全域之轉換。此可藉由檢查處理電路系統4之當前操作2及檢查分支目標位址之最低有效位元來標識。若分支目標位址之最低有效位元為0,則其指示返回至次安全域之分支。或者,在一些實施中,可藉由使用專用域轉換分支指令(其可稱為BXNS)來指示請求自安全域至次安全域之轉換的分支。專用域轉換分支指令可被與其他類型的分支指令不同之操作碼值偵測到,或可由與其他類型的分支指令相同(但具有指示安全域至次安全域的轉換被請求之參數值)之操作碼偵測到。一些實施可組合兩種方法,以使得自安全域至次安全域的轉換既請求分支目標位址之最低有效位元為0,又請求使用專用域轉換指令。
若該分支並未請求安全至次安全之分支,則在步驟404中,可按常規處理該分支,並基於分支指令所指定之分支目標位址來更新程式計數暫存器R15,且接著程式流程繼續在分支目標位址處(在與執行該分支之前相同的域中)執行指令。將瞭解,在一些實施中,並不預期將所有類型之非函數調用分支皆用於函數返回。舉例而言,基於在指令操作碼內編碼的立即值來判定目標位址之分支可能始終分支至同一位置,如此,該等分支可能不適用於函數返回分支,在此情形下,程式流程可能需要分支返回至調用了函數自其返回之多種不同函數。為了簡化設計,一些實施可選擇僅對於可用以執行函數返回之非函數調用分支的子集執行第14圖中所述之步驟。如上所述,可能存在具有執行分支的效果之許多類型的指令,即使該指令可能並非專用分支指令(例如,其可為將已加載值寫入程序計數中之加載指令)。第14圖中所述步驟亦可應用於具有執行分支的效果之此些非分支指令的子集。
若在步驟402中判定分支為安全至次安全之分支,則在步驟406中,處理電路系統檢查當前模式是否為線程模式以及域轉換禁用配置參數(TMID)是否為1,其指示在線程模式下域間轉換被禁用。若當前模式為線程模式且TMID指示在線程模式下域轉換被禁用,則在步驟408中,觸發在安全域中處理之INVTMI UsageFault。此允許管理安全線程之安全作業系統視需要配置任何MPU或堆疊資源,以便允許安全線程亦可在次安全域中運行。
或者,若在步驟406中判定當前模式為處置器模式或控制暫存器32中之TMID值34為0從而指示域轉換(互通)被啟用,則在步驟410中安全域切換至次安全域(NS),且接著在步驟404中,執行如早先所述之分支至目標位址。
若在步驟400中判定目標位址在保留範圍中,則此指示該分支可能旨在表示函數返回或異常返回。在步驟412中,處理電路系統4之執行級12判定該分支之目標位址是否為有效虛設函數返回位址140(由在其最高有效位元部分處的函數返回標頭144所指示)中的一者。若目標位址為有效虛設函數返回位址140中的一者,則在步驟414中執行函數返回分支處理,將在以下參考第15圖更詳細地描述。
或者,若分支之目標位址並非有效虛設函數返回位址中的一者,則在步驟416中判定該目標位址是否為如第5圖中所示之有效虛設異常返回位址142。若非如此,則試圖分支至目標位址為錯誤,因為該位址表示不可執行之指令位址,且其並非用以傳信異常函數返回之虛設位址,且因此在步驟418中可觸發故障。或者,並非回應於偵測到該分支為不可執行的位址直接觸發故障,而是可按常規執行該分支,以將程式計數暫存器設定為分支目標位址(因而第14圖在步驟416處判定為「否」的情況下自步驟416過渡至步驟404),且接著隨後在指令獲取電路系統8試圖自該不可執行的位址獲取指令時,此會導致故障被傳信。因而,故障的產生可能間接由該分支引起,但可能不會回應於分支指令自身而被直接傳信。每種方法均可有效。
若在步驟416中判定目標位址為有效虛設異常返回位址142中之一者,則在步驟420中,至少當異常返回涉及次安全域至安全域的轉換時(此可自虛設異常返回位址中之安全域旗標156判定),則在虛設異常返回位址142中之TMIE旗標158與作為調用堆疊訊框182的一部分而保存之TMIE交叉檢查資訊190之間進行交叉檢查比較。若偵測到失配,則在步驟422中觸發故障,因為此可指示已試圖篡改鏈路暫存器中之TMIE旗標158或者已出現了意外錯誤。若TMIE旗標158匹配交叉檢查資訊192,或者該異常返回轉換不需要此交叉檢查,則方法進行至步驟424,在步驟424中處理異常返回。
步驟420及424中之異常返回處理亦可包括如早先參考之PCT公開案WO 2013/117899 A1及WO 2014/053804 A1中所述的其他操作。在步驟420中檢查TMIE值之前,步驟424中之異常返回處理可包括自暫存器14之堆疊拆堆暫存器狀態。可基於狀態旗標(其可在發生異常時作為異常返回值142的一部分被儲存)來判定該拆堆應只涉及調用方堆疊訊框180的拆堆還是涉及調用者堆疊訊框180及被調用者堆疊訊框182的拆堆。關於哪些暫存器需要被拆堆之決定的更多細節,參見WO 2013/117899 A1之第13圖及WO 2014/053804 A1之第13圖。
又,異常返回處理可包括檢查是否預期預定簽名190作為被調用方堆疊訊框182的一部分存在於堆疊上。此可根據WO 2014/053804 A1之第14圖來判定。若預期存在預定簽名190但堆疊上該位置上的內容相比較於該預定簽名的內容並不匹配,則可觸發故障,因為此可偵測到其中已基於回應於函數調用而保存之堆疊訊框嘗試了異常返回機制的情形。該故障的產生在WO 2014/053804 A1之第7圖中示出。
異常返回處理操作亦可包括其他操作,諸如,更新基於已加載堆疊訊框中之ERETPSR值而恢復之異常編號值36,及基於處理正返回到之處的優先級來改變異常優先級的級別。
另外,在步驟424中,基於包括在所分支到之虛設異常返回位址內之TMIE旗標158,可恢復控制暫存器32中之TMID值34。TMID旗標34之恢復值可對應於TMIE旗標158之值的倒數,以便指示應啟用還是禁用線程模式中之域轉換,以匹配TMID 34在對應異常發生之前所具有的值。將瞭解,亦可在處理異常返回時執行許多其他操作,在此不進行論述。
第15圖更詳細地示出在第14圖的步驟414中針對分支至函數返回位址執行之操作。在步驟440中,處理電路系統判定被偵測為分支的分支目標位址之虛設函數返回位址140是否指示模式間函數返回。舉例而言,此可為檢查模式間指示符146是否為0從而指示對應的函數返回值係在自處置器至線程模式之模式間調用時被設定的。若試圖進行之函數返回並非模式間函數返回,則其為域間函數返回(因為若對應的函數調用既非模式間調用亦非域間調用,則鏈路暫存器將被簡單地設定為函數返回位址,且可能已不需要使用虛設函數返回位址)。
在步驟442中,對於域間函數返回,執行對線程模式互通禁用旗標TMID 34之檢查。若當前模式為線程模式且TMID旗標34為1從而指示在線程模式中禁用域轉換,則在步驟444中,如第12圖之步驟308或第14圖之408處那樣再次觸發INVTMI UsageFault。然而,在步驟444中,在當試圖分支時無論當前域為哪種域的情況下(亦即,試圖進行域間函數返回之源域,而非步驟308及408中情形之安全域)處理INVTMI故障。此確保了負責管理請求分支之線程的進程可處理故障,並接著視需要為目的地域配置所需資源。
若在步驟442中判定當前模式為處置器模式或判定TMID旗標34為0從而指示互通被啟用,則在步驟446中,可准許分支進行。自相關堆疊中讀取將要進行分支的函數返回位址174,該相關堆疊係基於當前操作模式、所要轉換到的安全域及若在線程模式中則基於堆疊指標選擇值30來判定。執行驗證是否允許域間轉換所需之任何完整性檢查。此些完整性檢查可(例如)包括:函數返回堆疊訊框172中之異常編號179是否指示該堆疊訊框係在與當前操作模式相同之模式下創建的(亦即,異常編號179在當前操作模式為線程模式時為零,且在當前操作模式為處置器模式時不為零),以及檢查域間函數返回所預期之HDT旗標178是否為0。又,可檢查限制所允許域轉換之任何其他要求。若通過了完整性檢查,則准許至函數返回位址174之分支成功進行,且接著後續處理自從函數返回位址174(此為自函數返回堆疊訊框172加載之實際函數返回位址,而非虛設函數返回位址140,該虛設函數返回位址140實際上被指定為在第14圖之步驟400中遭遇之嘗試分支的目標位址)所獲取之指令繼續。可調整指向函數返回堆疊訊框172之堆疊指標,以考慮到函數返回堆疊自堆疊資料結構之拆堆及移除。若所需的完整性檢查中之任一者失敗,則傳信故障(此可為安全性故障,其可能在安全域中被處理)。
若在步驟440中判定嘗試的函數返回為模式間函數返回,則在步驟450中,處理電路系統判定當前域是否為次安全域且虛設函數返回位址140中之安全域指示符148是否指示請求至安全域之返回。若如此,則在步驟452中,觸發將在當前域(次安全域)中處理之INVPC使用故障。觸發此故障,以防止如以上在第9圖中所示之自次安全線程模式至安全處置器模式之被禁止的組合域/模式轉換,否則其會構成安全性漏洞。
若所嘗試之模式間函數返回並非自次安全域至安全域(保持在相同域內或係自安全域至次安全域),則方法進行至步驟454,此處若已經配置,則類似於第12圖之步驟328處的操作,觸發錯誤同步屏障操作。再次,藉由在模式間函數返回時觸發錯誤同步屏障,此可幫助指出錯誤,以便若錯誤可歸因於在模式間函數返回之前執行的低特權處理,則可減少對侵入式系統重設操作的需要。
在步驟456中,回應於模式間函數返回指令,處理電路系統自與返回所要進行到之目的地安全域相關聯之主要堆疊中加載函數返回堆疊訊框172。在步驟458中,處理電路系統執行完整性交叉檢查操作,並判定彼完整性交叉檢查之結果是否成功。此完整性交叉檢查可檢查函數返回堆疊訊框上之諸多項目。舉例而言,處理電路系統可檢查函數返回位址174是否為位址之保留範圍130中的一者。若函數返回位址為位址之保留範圍中的一者,則此可指示試圖基於實際上為異常堆疊訊框之堆疊訊框進行函數返回,該異常堆疊訊框包括預定簽名190(該預定簽名190在該堆疊上處在與函數返回堆疊訊框172內之函數返回位址174相同的相對位置處),且異常與函數進入及返回之間的此失配可能為攻擊的途徑。因而,若在堆疊訊框上之函數返回位址174為保留位址130,則完整性交叉檢查失敗。
又,作為完整性交叉檢查的一部分,處理電路系統基於控制暫存器20中之異常編號值36來檢查當前模式是否為線程模式。若當前模式為處置器模式,則完整性交叉檢查失敗。
又,完整性交叉檢查包括檢查函數返回堆疊訊框中之異常編號欄位179,若該異常編號欄位179為0,則觸發完整性交叉檢查失敗,因為預期模式間函數返回係自線程模式返回至處置器模式。
又,完整性交叉檢查使用HDT旗標178來偵測是否回應於模式間調用分支指令而保存了函數返回堆疊訊框。若HDT旗標為0,在此指示函數返回堆疊訊框係回應於域間函數調用而非模式間函數調用被設置的(參見第12圖之步驟312),且因此繼而完整性交叉檢查失敗。再次,此防止了函數調用及返回之序列失配以限制基於失配的堆疊訊框之攻擊的機會,且亦防範了當虛設函數返回位址140內之模式間旗標146被保存在大體可存取之鏈路暫存器中時對該模式間旗標146之可能修改,其中HDT旗標178充當用於檢查及確保模式間旗標正確之交叉檢查值。
若完整性交叉檢查中之任一者失敗,則在步驟460處,觸發INVPC使用故障,該INVPC使用故障指示已發生了安全檢查失敗,且此種類型之故障將在與所試圖分支到的代碼相關聯之目的地安全域中進行處理。
或者,若通過了所有完整性交叉檢查,則在步驟462中,可啟動模式間函數返回。當執行模式間函數返回時,則在步驟462中執行諸多動作。將安全性狀態更新為由虛設函數返回位址140中之安全域指示符148所指示的安全性狀態。此確保了安全域將恢復為在進行對應的模式間功能調用之前正在執行的域。
又,在步驟462中,在模式間函數返回之前,保存指示,以記錄TMID旗標34為0還是1。此指示與在異常進入時所保存之TMIE旗標158分離。儲存TMID之先前值之指示的位置可在實施例之間變化。舉例而言,可將該指示保存至通用暫存器16,或可保存至控制暫存器20,諸如,在旗標暫存器中之條件旗標,其可由後續條件指令直接測試。
又,在步驟462中,可將控制暫存器32中之TMID值34設定為0,以指示現再次啟用線程模式域轉換。此確保了無論在模式間函數返回之前所執行的異常處置器代碼的解除特權部分是否試圖切換安全域,在返回至高特權包裝函式代碼時,域轉換禁用配置值34可處於一致的狀態。
又,在步驟462中,在模式間函數返回時,可調整自其加載函數返回堆疊訊框之目的地堆疊指標,以考慮到已自堆疊移除之已拆堆資料。又,更新針對目的地域之堆疊指標選擇值30,以指示應選擇主要堆疊指標,且藉由自函數返回堆疊訊框172中之異常編號欄位179恢復異常編號暫存器36而將當前操作模式切換至處置器模式(先前在步驟458處之完整性檢查可能已檢查到異常編號欄位179不為零,且因此恢復異常編號暫存器36將使當前模式切換至處置器模式)。在步驟464中,執行至自函數返回堆疊訊框172獲得之實際函數返回位址174的分支,以使得要處理之下一指令為函數返回位址處之指令。
因而,藉由在調用函數(ISR 201之主體)時使用所保存的虛設函數返回位址140來傳信後續函數返回是否應為模式間函數返回,此意謂觸發函數返回之指令本身不需要知曉其是否在切換模式,此意謂仍可使用完全不知曉對模式間函數調用及返回之支持而寫入的舊異常處理產生代碼。對於以上參考第7圖及第8圖所描述之中斷解除特權情境而言此可為尤其有用的。亦即,函數返回分支指令可具有相同的編碼,而無論其是否為模式間分支。
注意,在第14圖及第15圖中,觸發分支至給定目標位址之指令可為使程式計數暫存器R15被修改為分支目標位址之多種指令中的任一者。在一些情形下,此可為專用分支指令,但其亦可為將分支目標位址移動至程式計數暫存器中之暫存器移動指令,或堆疊彈出指令,該堆疊彈出指令自堆疊資料結構彈出資訊並將其加載至程式計數暫存器中。尤其在分支係至虛設函數返回位址140或虛設異常返回位址142中之一者的情形下,若在對應的函數/異常返回之前已進行了另一函數調用,則該者可能最終被保存至堆疊中,可能會使編譯器產生代碼更為高效的是將來自堆疊之返回位址直接彈出至程式計數暫存器中,而非先將其加載至鏈路暫存器中並接著執行指定鏈路暫存器之返回分支。因而,儘管實際函數返回位址、虛設函數返回或虛設異常返回位址可在調用函數或發生異常時最初保存至鏈路暫存器中,但在執行對應的返回之前,其可能不再處在鏈路暫存器中,且將瞭解,觸發第14圖及第15圖中之分支操作的指令可能實際上並非專用分支指令。
第16A圖至第16D圖繪示使用上述檢查可防止之可能攻擊的實例。此些攻擊可能基於異常或函數調用及返回之失配序列,其可能會嘗試利用由調用設置並在返回時期望之失配堆疊訊框。
在第16A圖之實例中,在安全處置器模式下之處理期間在步驟1處發生異常,且該異常將在次安全域中發生,且因此,調用方堆疊訊框180及被調用方堆疊訊框182均被保存至堆疊。在第16A圖中之步驟2處,進行一連串異常返回及/或函數調用,此最終導致在處理係在安全線程模式下執行。一旦處於安全線程模式下,則在步驟3處,試圖基於在步驟1處設定之異常堆疊訊框180、182來執行模式間功能返回。舉例而言,此可藉由分支至虛設函數返回值140中之一者來進行。可偵測到此種類型之攻擊,因為在第15圖之步驟458中對函數返回進行完整性交叉檢查將偵測到函數返回位址174為位址之保留範圍130中的一者(因為預定簽名190將位於在步驟3中加載之異常堆疊訊框而非預期函數返回堆疊訊框172的底部)。
第16B圖示出第二實例,其中在步驟1處進行自安全域至次安全域之域間函數調用,導致函數返回堆疊訊框172被保存至安全主要堆疊。再次,在步驟2處,進行一連串其他轉換,且接著在步驟3處基於在步驟1處所設定之域間堆疊訊框來試圖進行模式間函數返回。不應允許此模式間函數返回成功,因為對應的調用為域間調用,而非模式間調用。可偵測到這種情況,因為在步驟1處之域間函數調用時,函數返回堆疊訊框中之HDT值178將設定為0,且對於步驟3處之模式間函數返回而言,該HDT值178應為1,且因此在第15圖之步驟458中的完整性交叉檢查將失敗。
第16C圖繪示另一可能攻擊,其中首先在步驟1處進行模式間函數調用,該模式間函數調用自處置器模式解除特權為線程模式,且接著在步驟2處繼續一連串的其他轉換,稍後在步驟3處基於在步驟1處所設定之模式間函數返回堆疊訊框進行用以執行域間函數返回之嘗試以便自次安全域轉換為安全域。在第15圖之步驟446中,執行對於函數返回堆疊訊框172中之HDT值178是否等於0之完整性檢查,且若HDT值等於1,則可觸發故障。因而,在第16C圖之情境下(其中進行模式間函數調用),試圖進行域間函數返回,接著HDT檢查將偵測到失配並確保在步驟1處所創建之模式間堆疊訊框不會被解釋為步驟3處之域間堆疊訊框。注意,可將步驟446及458處之HDT檢查視為等效於虛設函數返回位址中之模式間旗標M 146與函數返回堆疊訊框中之HDT旗標178之間的比較,因為在模式間返回(第16B圖)之情形下或在域間返回(第16C圖)之情形下,在此比較中所標識出的任何失配將會觸發故障。
仍參考第16C圖,不在步驟3處執行域間返回(其中模式間旗標M=0),攻擊者可能已嘗試了模式間函數返回(其中模式間旗標M=1)。雖然對應的函數調用確實為模式間調用,但其仍無法匹配所嘗試之模式間函數返回,因為在步驟3之前的當前模式為處置器模式而非線程模式。在此情形下,則雖然模式間調用值146可匹配在步驟1處在模式間調用時所設定之函數返回堆疊訊框內的HDT值178,但攻擊仍被阻止,因為在當前狀態為處置器模式時不允許模式間函數返回,該攻擊將被第15圖之步驟458中的完整性檢查(其檢查當前模式是否為線程模式)捕獲。
第16D圖示出另一實例,其中在步驟1處由於自安全域至次安全域之域間分支指令而設置域間堆疊訊框,且隨後在步驟2處進行一連串轉換以返回至安全域,且接著在步驟3處進行用以使用在步驟1處由域間分支所設定的堆疊訊框來執行模式間函數返回之嘗試。此類型之攻擊不能夠成功,因為函數返回堆疊訊框172中之異常編號欄位179會指示在步驟1處所設定之堆疊訊框係在線程模式下而非處置器模式(模式間函數返回將請求進入處置器模式)下設定的。或者,若如步驟2中所示,嘗試進行自非安全線程模式至安全處置器模式之域與模式的組合轉換,則再次此會導致故障,因為在步驟450中會阻止未經准許之組合轉換。
將瞭解,一些檢查可能重疊,且相同類型之攻擊可能會觸發一種以上類型之檢查的失敗。對於一些架構實施而言,若此些檢查中的一些被視為冗餘,則可將其自架構要求中移除,且因此,取決於何者被視為對於進行防範很重要,不一定執行所有不同類型之攻擊防止機制。然而,可提供此些檢查中之任何一或更多者。將瞭解,第16圖中所示之攻擊僅為類似失配類型攻擊之大量不同組合中的一小部分,在該等類似失配類型攻擊中,攻擊者尋求藉由試圖進行返回操作(函數返回或異常返回)而破壞系統之狀態,該返回操作不匹配原始轉換且因此不匹配已創建之堆疊訊框類型。
第12圖、第14圖及第15圖中之步驟307、406及442示出了檢查分別用於函數調用分支、非函數調用分支及函數返回之域轉換禁用配置參數(TMID)34的特定實例。然而,在一些架構中,亦可能存在有可能觸發域之間的轉換之其他有效手段,且第17圖示出處理對TMID值之檢查的更一般方法。在步驟500中,偵測到用以執行當前模式內之安全域至次安全域的轉換或當前模式內之次安全域至安全域的轉換之可能嘗試。該嘗試可能為用以執行域轉換之實際嘗試,或可能僅為在通過了其他安全性或完整性檢查時有時會觸發此種域轉換而可能並不始終觸發域轉換的操作,若足夠早地執行了TMID檢查,則不可能偵測到是否將實際地准許域轉換,或是否另一檢查是否並將引發故障。
在步驟502中,若偵測到觸發域轉換之可能嘗試,則判定當前模式會否為線程模式。若當前模式為線程模式,則在步驟504中,處理電路系統判定TMID值34是否指示域轉換在線程模式下被禁用。若當前模式為線程模式且域轉換在線程模式下被禁用,則在步驟506中,傳信禁用域轉換故障(例如,上述INVTMI UsageFault)。在試圖進行域轉換之前,該故障係在當前安全域中處理,因此若所嘗試之域轉換為自安全至次安全,則該故障在安全域中被處理,且若所嘗試之轉換為自次安全至安全,則該故障在次安全域中被處理。又,視情況,可將一些綜合特徵資訊儲存至控制暫存器,以指示有關所嘗試轉換(其為故障)之資訊。在一些實施中,設定綜合特徵資訊可包括設定UsageFault狀態暫存器(UFSR)中之INVTMI位元。
若在步驟502中判定了當前模式為處置器模式或在步驟504中偵測到TMID值34指示域轉換在線程模式下被啟用,則方法進行至步驟508,在步驟508中,至少當所嘗試轉換為自次安全域至安全域時,檢查是否已通過了任何其他所需的安全性檢查,且若其皆已通過,則在步驟510中,准許該轉換。若不需要安全性檢查(例如,可能一些類型之安全域至次安全域轉換不需要檢查,因為可信任安全代碼不會攻擊次安全代碼),則可在步驟510中准許該轉換,而不用執行任何安全性檢查(亦即,對於此些轉換而言可省略步驟508)。或者,若安全性檢查失敗,則在步驟512中,可觸發故障,且此故障可在安全域中被處理,因為其與不准許進入或退出安全狀態有關。在步驟512中觸發之故障類型及所設定之任何綜合特徵可取決於失敗之安全性檢查的類型。
雖然第17圖示出步驟502及504係按順序執行的,但其在一些實施例中亦可以相反次序或並行地執行。
第18圖至第20圖示出涉及TMID值34之使用情形的一些實例。第18圖本質上對應於第8圖之實例,其涉及模式間調用以使得異常處置器被解除特權,使得其包括在線程模式下處理之主體201。在此實例中,該異常為非安全的(亦稱為次安全的)異常,且因此包括包裝函式203及主體201之異常處置器處理全在非安全域中進行。跨安全/次安全的域邊界之任何線程可能皆需要建立起安全資源及次安全資源(諸如,MPU配置及記憶體中所分配之相關聯堆疊的堆疊指標)。對於在第18圖中所示之僅在一個域中運行的線程(諸如,T2
)而言,可能期望避免分配用於其他域之資源,以避免記憶體的浪費及增加上下文切換時間。因而,較佳地,無論是否將使用額外資源,系統皆可避免為所有線程分配額外資源之成本。此種不為所有線程同時配置安全及次安全資源之能力亦可幫助改良需要被解除特權回到線程模式之中斷的中斷潛時(如第18圖中所示),因為此將意謂包裝函式代碼203不需要花費長時間來執行,因為其可省去配置安全及非安全MPU中之一者以及安全及非安全堆疊指標中之一者。
解決此問題之一種方法為,可對於單個安全性狀態(例如,第18圖中之第二線程的實例中之次安全域)為線程分配堆疊及MPU配置,且接著僅在彼線程試圖切換至另一安全域時才會分配用於該另一域之資源。然而,在無TMID參數34的情況下,則強制進行此操作並產生觸發延遲分配所需之故障的唯一方式係重新配置MPU 26,以使得當試圖存取對其而言該進程無存取權限或對其區域而言尚未在MPU 26中定義權限資料之位址時,會產生位址故障。此將為不利的,因為此會要求按線程而非按進程來處理MPU配置,且亦會要求相當多的更安全/非安全之交互,因為此將涉及兩個安全域之MPU 26-S、26-NS,從而消除了能夠跳過安全域中之一的MPU配置操作的優勢。舉例而言,在運行安全線程之前,次安全作業系統可能需要重新配置其次安全MPU 26-NS,以使得試圖分支至次安全狀態會引發故障。因而,使用MPU 26來產生故障可能困難且效能密集,且對於提供安全及次安全作業系統代碼之不同方的代碼而言則更難。或者,若事先知曉哪些線程將僅使用一個安全域及哪些線程將使用兩個安全域,則可使用此資訊來避免延遲分配,然而,此並不可依賴,因為有可能軟件會崩潰並試圖存取另一狀態,或攻擊者可能會試圖利用此情形,因此可能仍期望當僅為一個域設置資源時提供一種機制以在偵測到至另一域的轉換時引發故障。
相反,藉由提供選擇性地禁用線程模式下之域轉換的TMID參數34,此意謂預期僅處在次安全域中之線程(如第18圖中之T2
)最初可使其TMID參數34被設定為禁用域轉換,且接著僅當其確實試圖切換域時才產生故障,以使得可配置適當資源。
因而,第18圖示出一個實例,其中線程模式轉換在進入解除特權異常處置器主體201時被禁用(因為使用模式間調用分支指令之BLXT變體來調用進入異常處置器主體201)。在此情形下,異常處置器之主體201保持在次安全域內且並不試圖切換至安全域,使得在主體201稍後進行至包裝函式代碼203之函數返回之前,在為線程T2
之安全域配置MPU或堆疊資源時不會浪費處理資源或記憶體分配。因而,此提高了效能。當主體201之處理完成時,在步驟604中執行至模式間虛設函數返回位址140之分支。此觸發了返回至處置器模式,且在一些實施中,如在第15圖之步驟462中所述,控制暫存器32中之TMID旗標34的指示在被清除之前得以保存(例如,保存至通用暫存器)。程式流程接著繼續返回至包裝函式203,此處該包裝函式檢查YMID旗標34之已保存指示,並判定在步驟604中的模式間函數返回之前TMID旗標34為1。因此,包裝函式203判定與安全狀態相關聯之資源仍為後台線程T2
配置,且在執行異常返回以返回至T2
的後台處理之前不需要重新配置此些資源。
第19圖示出類似情境,但在此情形下,在使用BLXT指令調用解除特權之異常處置器主體201並因而當在線程模式下時禁用域間轉換之後,此時主體確實試圖切換至安全域,且此觸發了如早先所述之使用故障。此故障使得接著由處置器代碼608在處置器模式下處理之異常,該異常可接著請求在返回至異常處置器主體201(其可接著在第19圖之點600處重新試圖進行次安全域至安全域之轉換)之前,對安全MPU 26-S及安全堆疊指標暫存器中用於線程T2
之資源進行分配或配置(為了清楚起見,在第19圖中誇大了處理返回至非安全T2
的點與域間轉換600之間的間隙—將瞭解,域間轉換600實際上可能會在返回至T2
之後的第一條指令上發生)。在完成了要求在安全域中之處理部分之後,可在點602處執行模式間返回,且接著後續處理與第18圖中相同。
第19圖繪示出一種情境,其中當在第19圖之部分604處執行模式間返回時,為了自解除特權之異常處置器主體201轉換回包裝函式代碼203,儲存一個指示,用以指示對於為線程T2
執行線程模式下的非安全處理,在彼模式間返回之前TMID值34為0還是1。此係在模式間返回時清除TMID旗標之前進行的,以重新啟用包裝函式代碼203之域轉換。如以上在第15圖之步驟462中所解釋,在第19圖之步驟604之前可將TMID 34為0還是1之此指示保存至任何方便的位置,諸如,控制暫存器、通用暫存器或條件代碼中之一者。此為有用的,因為一旦處理已返回至將在處置器模式下處理之非安全包裝函式代碼203,則此會允許610處之後續代碼將第18圖中所示之情況與第19圖中所示之情況區分開。因為在第18圖中所示之情境下,可能安全域中無處理,所以任何安全堆疊指標及MPU配置可能仍與先前在點606處在安全域中之後台代碼的先前處理期間所設定的一樣。相反,在第19圖中,在步驟601中試圖進入線程T2
之安全域(隨後在步驟600處重試時成功)意謂在第19圖之點608處對用於線程T2
之MPU/堆疊資源的配置將改變針對線程模式之相關MPU內容及堆疊指標暫存器。因而,在第18圖及第19圖之部分610處執行的其餘包裝函式代碼203可能需要在處理返回至線程T1之安全部分之前判定有必要更新安全堆疊指標及安全MPU配置還是恢復在部分606處已存在之資訊。TMID在模式間函數返回時在步驟604之前等於0還是1的指示可用以作出該決定。
在其他實施中,並不必需保存在模式間返回之前在線程模式下禁用還是啟用域轉換的指示,且在此情形下,則在第18圖及第19圖之步驟610中,包裝函式代碼203可簡單地始終執行用於恢復在步驟606中已存在的安全資源之操作。然而,藉由在不需要時避免冗餘的堆疊指標更新操作可使第19圖中所示實例(其保存是否禁用線程模式互通之指示)的效能更佳。
為了比較,第20圖示出另一情境,其中當IRQ異常處置器被解除特權時,此時預期異常處置器將使用安全域及次安全域,且因此在點620處執行包裝函式代碼206期間,執行用以配置用於兩種域之安全資源及次安全資源的適當操作,且將藉由模式間函數調用分支之BLXTI變體而非如第18圖及第19圖中所示之BLXT來調用將以線程模式在解除特權狀態下執行之異常處置器的主體201。因此,此時在執行自處置器模式至線程模式之模式間函數調用時,將TMID值34設定為0,以指示在線程模式下啟用域轉換,且因此此時在步驟622中,當中斷處置器主體試圖轉換至安全域時,此係被准許的且不需要如第19圖之實例所示那樣引起故障。再次,在模式間返回之前保存在模式間函數返回64時TMID為0可由626處所執行的包裝函式代碼203用以判定是否有必要將與線程T1相關聯之安全側堆疊指標或MPU配置恢復為其在中斷發生之前在點628處所處於之狀態。在包裝函式代碼之一些實施中,包裝函式代碼203可能不檢查在第20圖之實例中在模式間函數返回期間所保存之TMID旗標的指示,因為在執行主體201之前包裝函式執行兩種域之配置,該包裝函式將預先知曉在返回至後台線程T1之前需要恢復用於兩種域的資源。儘管相比於冗餘地檢查在模式間函數返回期間保存之TMID的指示,此似乎為一種更簡單的方法,但此可能意謂在用於不同異常處置器之不同包裝函式之間更佳難以共享代碼。因此,兩種方法均可為有用的。
第21圖示出更特定情境之另一實例,其中當試圖切換域時檢查TMID值34可為有用的。此為在第17圖之通用方法範圍內的另一特定實例。可發生域轉換之另一種方式為,在次安全域中,當試圖自SAU 24所定義之安全位址區域之一中的位址獲取指令。在步驟700中,指令獲取電路系統8判定當前域是否為次安全域,且已試圖獲取具有在SAU 24所定義之安全區域之一中的位址之指令。若非如此,則指令獲取繼續照常進行。若當前域為次安全域且係試圖自安全位址區域獲取指令,則在步驟702中,檢查當前模式是否為線程模式且互通禁用旗標(TMID 34)是否指示在線程模式下域轉換被禁用,且若如此,則在步驟704中,觸發INVTMI UsageFault以防止域轉換發生。在當前域(亦即,次安全域)中處理此故障。注意,有可能自安全位址區域獲取之指令實際上可能尚未觸發域轉換,但儘管如此在假設在後續安全性檢查通過時仍可能發生轉換的情況下,則保守地產生該故障。藉由在獲取級8處產生故障,此確保了與可能需要執行之其他類型的安全性檢查相比較而言,由禁用域轉換觸發之UsageFault相對早地被評估,使得彼些其他安全性檢查不會僅因為尚未配置安全資源而失敗。
另一方面,若在步驟702中在獲取級8處判定當前域為處置器模式或TMID 34指示線程模式域轉換被啟用,則在步驟706中,指令獲取進行。若在解碼級10處將自安全位址區域獲取之指令標識為係觸發域改變之指令(例如,安全閘道指令,其標記指向安全域之有效進入指標),則一旦指令到達執行級12,其便經受任何額外的安全性檢查,且若皆通過了此些檢查,則准許至安全域之轉換。
因而,第21圖為一實例,其中對TMID值34之檢查不一定在執行級12發生,而可在指令獲取時執行。
第22圖繪示可使用之模擬器實施。雖然早先所述之實施例在用於操作支持相關技術之特定處理硬體之裝置及方法方面實施了本發明,但亦有可能根據本文所述實施例提供一種經由使用電腦程式來實施之指令執行環境。可時常將此些電腦程式稱作模擬器,只要其提供硬體架構的基於軟體之實施即可。模擬器電腦程式之種類包括模擬器、虛擬機、模型,及二進位轉譯器,包括動態二進位轉譯器。通常,模擬器實施可在主機處理器830上運行,該主機處理器830視情況運行主機作業系統820,該主機作業系統820支持模擬器程式810。在一些佈置中,在硬體與所提供之指令執行環境及/或被提供在同一主機處理器上之多個相異的指令執行環境之間可能存在多個模擬層。從歷史上看,需要強大之處理器來提供以合理速度執行之模擬器實施,但在某些情境下此方法可能是合理的,諸如,當出於兼容性或重複使用原因而期望運行原生於另一處理器之程式碼時。舉例而言,模擬器實施可提供具有額外功能(主機處理器硬體不支持該額外功能)之指令執行環境,或提供通常與不同硬體架構相關聯之指令執行環境。在「一些高效架構模擬技術(Some Efficient Architecture Simulation Techniques)」(Robert Bedichek,1990年冬季USENIX會議,第53-63頁)中給出模擬之概述。
鑒於先前已參考特定硬體構造或特徵描述了實施例,在模擬實施例中,可藉由適當軟體構造或特徵提供等效功能。舉例而言,可在模擬實施例中將特定電路系統實施為電腦程式邏輯。類似地,可在模擬實施例中將諸如暫存器或快取記憶體之記憶體硬體實施為軟體資料結構。在其中前述實施例中所引用之硬體元件中的一或更多者存在於主機硬體(例如,主機處理器830)上之佈置中,一些模擬實施例可在適當情況下使用主機硬體。
可將模擬器程式810儲存在電腦可讀儲存媒體(其可為非暫時性媒體)上,且該模擬器程式810提供至目標代碼800(其可包括應用程式、作業系統及超管理器)之程式介面(指令執行環境),該程式介面與藉由模擬器程式810模型化之硬體架構的應用程式介面相同。因此,可使用模擬器程式800自指令執行環境內執行目標代碼810之程式指令(包括如上所述之模式間調用分支指令),以使得並不實際上具有上述裝置2之硬體特徵的主機電腦830可模擬此些特徵。
如第22圖中所示,模擬器程式810包括執行與上述指令解碼器10、執行級12、異常控制電路系統28及記憶體存取檢查電路系統22等效的功能之指令解碼程式邏輯811、處理程式邏輯812、異常控制程式邏輯813及記憶體存取檢查程式邏輯814。指令解碼程式邏輯811解碼目標代碼800之指令,且取決於已編碼的指令類型來選擇處理程式邏輯812中之諸多程式代碼序列中的一者,該等程式代碼序列控制主機硬體830以執行與在模擬指令集架構中為目標代碼800之已解碼指令定義的彼些操作等效之操作。若出現模擬異常,則異常控制程式邏輯813以與上述異常控制電路系統28類似的方式來控制異常處理。模擬器程式810亦包括暫存器模擬程式邏輯815,其將目標代碼800之指令所需的暫存器引用映射至對由主機裝置所使用之主機記憶體位址空間的等效記憶體存取,以使得可在主機記憶體位址空間中維護資料結構,該等資料結構對應於由模擬器程式所模擬之目標資料處理裝置之暫存器14的內容。類似地,記憶體存取程式邏輯817將目標代碼800所需之記憶體存取及指令獲取(其係使用來自模擬位址空間816之位址來定義)映射至主機資料處理硬體830所使用之主機記憶體位址空間上。舉例而言,記憶體存取程式邏輯817可控制對實際上儲存在主機記憶體位址空間中(但自目標代碼800的角度來看似乎儲存在模擬位址空間816中)之堆疊資料結構818的存取。
因而,暫存器模擬程式邏輯815所模擬之控制暫存器可包括上述TMID旗標34,且處理程式邏輯812可基於TMID旗標34來模擬線模式下之域間轉換是否被准許。暫存器模擬程式邏輯815可包括配置參數設定程式邏輯819,其回應於事件(諸如模式間函數調用及返回的執行、異常進入或返回,或用於寫入至TMID旗標34的其他指令)來設定TMID旗標34。又,指令解碼程式邏輯811可回應模式間調用分支指令,以如上所述將處理程式邏輯812所表示之模擬處理器的當前模式自處置器模式切換至線程模式。
在本申請案中,詞語「經配置以……」用以意謂裝置之元件具有能夠執行所定義操作的配置。在此上下文中,「配置」意謂硬體或軟體的佈置或互連方式。舉例而言,裝置可具有提供已定義操作之專用硬體,或可經程式化以執行該功能之處理器或其他處理設備。「經配置以……」並不暗指裝置元件需要以任何方式改變以提供所定義操作。
儘管本文中已參考隨附圖式詳細描述了本發明之說明性實施例,但應理解,本發明並不限於彼些精確實施例,且熟習此項技術者可在不脫離如由附加申請專利範圍所限定之本發明的範疇及精神的情況下在其中進行各種改變及修改。
2:資料處理系統
4:處理電路系統
6:記憶體系統
8:獲取級
10:解碼級
12:執行級
14:暫存器
16:通用(整數)暫存器
20:控制暫存器
22:記憶體存取檢查電路系統
24:安全屬性單元(SAU)
26:記憶體保護單元(MPU)
26-NS:次安全MPU
26-S:安全MPU
28:異常控制電路系統
29:可靠性、可用性及可維修性(RAS)錯誤偵測/校正電路系統
30:堆疊指針選擇值
30_NS:次安全版本
30_S:安全版本
31:特權控制值(nPRIV)
31_NS:次安全特權控制值
31_S:安全特權控制值
32:控制暫存器
34:線程模式互通禁用(TMID)參數
36:異常編號
100:記憶體存取空間
102:次安全區域
104:安全區域
110:次安全程式碼
112:堆疊資料結構
114:次安全資料
122:安全程式碼
124:堆疊資料結構
126:安全資料
130:保留區域
140:虛設函數返回位址
142:虛設異常返回位址
144:函數返回標頭值
146:模式間調用旗標(M)
148:安全域指示符(S)
150:異常返回標頭
152:模式旗標
156:安全域旗標(S)
157:異常安全域旗標(ES)
158:線程模式互通啟用(TMIE)值
170:部分
172:函數返回堆疊訊框
174:返回位址
176:狀態資料字
178:線程模式(HDT)旗標
179:異常編號值
180:第一(調用方)堆疊訊框
181:返回位址
182:第二(被調用方)堆疊訊框
190:預定完整性簽名
192:TMIE交叉檢查值
200:主要異常處置器主體
201:主要中斷處置器主體
202:包裝函式代碼
203:包裝函式代碼
282:壓入指令
283:BL指令
284:BX指令
285:彈出指令
286:BX指令
287:非調用分支指令
288:最終返回分支
300:步驟
302:步驟
304:步驟
306:步驟
307:步驟
308:步驟
310:步驟
312:步驟
314:步驟
320:步驟
322:步驟
324:步驟
326:步驟
328:步驟
330:步驟
332:步驟
334:步驟
336:步驟
338:步驟
350:步驟
352:步驟
354:步驟
356:步驟
358:步驟
400:步驟
402:步驟
404:步驟
406:步驟
408:步驟
410:步驟
412:步驟
414:步驟
416:步驟
418:步驟
420:步驟
422:步驟
424:步驟
440:步驟
442:步驟
444:步驟
446:步驟
450:步驟
452:步驟
454:步驟
456:步驟
458:步驟
460:步驟
462:步驟
464:步驟
500:步驟
502:步驟
504:步驟
506:步驟
508:步驟
510:步驟
512:步驟
600:域間轉換
602:點
604:步驟
606:步驟
608:處置器代碼
610:步驟
620:點
622:步驟
624:
626:步驟
628:點
700:步驟
702:步驟
704:步驟
706:步驟
800:目標代碼
810:模擬器程式
811:指令解碼程式邏輯
812:處理程式邏輯
813:異常控制程式邏輯
814:記憶體存取檢查程式邏輯
815:暫存器模擬程式邏輯
816:模擬位址空間
817:記憶體存取程式邏輯
818:堆疊資料結構
819:配置參數設定程式邏輯
820:主機作業系統
830:主機處理器
NS:次安全域
S:安全域
T:線程模式
H:處置器模式
本發明技術之其他態樣、特徵及優勢將自以下結合隨附圖式閱讀之實例描述顯而易見。
第1圖示意性地繪示具有支持不同操作模式的處理電路系統之資料處理系統的實例。
第2圖示出處理電路系統之不同域及操作模式的實例。
第3圖示出處理電路系統之暫存器的實例。
第4圖繪示不可用於可執行指令之保留位址範圍的提供。
第5圖繪示虛設函數返回位址及虛設異常返回位址。
第6圖繪示可回應於函數調用或異常保存至堆疊之不同堆疊訊框。
第7圖為了比較而示出在不支持模式間調用分支指令時進行異常解除特權之實例。
第8圖示出使用模式間調用分支指令進行異常解除特權之實例。
第9圖示出禁止的組合域/模式切換之實例。
第10圖示出准許的組合域/模式切換之實例。
第11A圖至第11C圖繪示對其而言第10圖之組合域/模式切換可有用之尾部調用的實例。
第12圖為示出在調用函數時執行之步驟的流程圖。
第13圖為示出在異常進入時執行之步驟的流程圖。
第14圖為示出回應於除了函數調用以外的分支指令執行之步驟的流程圖。
第15圖為示出回應於分支至虛設函數返回位址所執行之步驟的流程圖。
第16A圖至第16D圖繪示可使用第15圖中所示之完整性交叉檢查偵測到之可能攻擊。
第17圖為繪示在線程模式下禁用域轉換之流程圖。
第18圖至第20圖繪示使用域轉換禁用配置參數之實例。
第21圖為繪示在獲取具有在安全位址區域中的位址之指令時檢查域轉換禁用配置參數之流程圖。
第22圖繪示可使用之模擬器實例。
國內寄存資訊(請依寄存機構、日期、號碼順序註記)
無
國外寄存資訊(請依寄存國家、機構、日期、號碼順序註記)
無
500:步驟
502:步驟
504:步驟
506:步驟
508:步驟
510:步驟
512:步驟
Claims (25)
- 一種裝置,包括: 處理電路系統,用以在包括至少一安全域及一次安全域之複數個安全域中的一者中執行資料處理; 記憶體存取檢查電路系統,用以檢查取決於該處理電路系統之一當前安全域是否允許一記憶體存取;以及 一控制儲存位置,用以儲存一域轉換禁用配置參數,該域轉換禁用配置參數指定在該處理電路系統之至少一種模式下啟用還是禁用該安全域與該次安全域之間的域轉換;其中: 在該處理電路系統之所述至少一種模式下,當該域轉換禁用配置參數指定在所述至少一種模式下禁用該等域轉換時,該處理電路系統經配置以: 回應於自該安全域至該次安全域之一轉換嘗試觸發一禁用域轉換故障的傳信;以及 回應於自該次安全域至該安全域之一轉換嘗試觸發該禁用域轉換故障的傳信。
- 如請求項1所述之裝置,其中: 在該安全域中,該處理電路系統經配置以使用儲存在至少一個安全配置暫存器中之資訊來控制對記憶體之存取;以及 在該次安全域中,該處理電路系統經配置以使用儲存在至少一個次安全配置暫存器中之資訊來控制對記憶體之存取。
- 如請求項1及2中任一項所述之裝置,包括用以儲存用於指向堆疊資料結構之堆疊指標的複數個堆疊指標暫存器,包括與該安全域相關聯之至少一個堆疊指標暫存器及與該次安全域相關聯之至少一個堆疊指標暫存器。
- 如請求項1及2中任一項所述之裝置,其中回應於在所述至少一種模式下執行自該次安全域至該安全域之至少一種類型的轉換之一嘗試,該處理電路系統經配置以在執行至少一個其他安全檢查以判定是否允許自該次安全域轉換至該安全域之該嘗試之前,使用該域轉換禁用配置參數執行禁用域轉換檢查以判定是否觸發所述禁用域轉換故障的傳信。
- 如請求項1及2中任一項所述之裝置,其中該處理電路系統經配置以在一特權狀態及一低特權狀態中之一者下執行該資料處理;以及 當該處理電路系統處於該特權狀態下時,可在該安全域及該次安全域中修改該域轉換禁用配置參數。
- 如請求項1及2中任一項所述之裝置,其中該處理電路系統具有一線程模式及一處置器模式; 回應於一異常條件,異常控制電路系統經配置以控制該處理電路系統經配置以切換至在該處置器模式下對一異常處置器的處理;以及 該處理電路系統之所述至少一種模式包括該線程模式。
- 如請求項6所述之裝置,其中: 在該處置器模式中,該處理電路系統經配置以獨立於該域轉換禁用配置參數來判定所述域轉換是否被准許。
- 如請求項6所述之裝置,其中: 至少當該處理電路系統處於該處置器模式中時,回應於指定一分支目標位址之一模式間調用分支指令,一指令解碼器經配置以控制該處理電路系統以: 將一函數返回位址保存至一函數返回位址儲存位置; 將該處理電路系統之一當前模式切換至該線程模式; 設定該域轉換禁用配置參數以指定在該至少一種模式中啟用還是禁用所述域轉換;以及 分支至由該分支目標位址所標識之一指令。
- 如請求項8所述之裝置,其中: 回應於該模式間調用分支指令之一第一變體,該指令解碼器經配置以控制該處理電路系統以設定該域轉換禁用配置參數,以指定在所述至少一種模式中禁用所述域轉換;以及 回應於該模式間調用分支指令之一第二變體,該指令解碼器經配置以控制該處理電路系統以設定該域轉換禁用配置參數,以指定在所述至少一種模式中啟用所述域轉換。
- 如請求項6所述之裝置,其中: 回應於一模式間函數返回指令,該處理電路系統經配置以: 將該處理電路系統之一當前模式切換至該處置器模式; 更新該域轉換禁用配置參數;以及 分支至由一函數返回位址所標識之一指令。
- 如請求項10所述之裝置,其中: 回應於所述模式間函數返回指令,該處理電路系統經配置以設定該域轉換禁用配置參數,以指定在所述至少一種模式中啟用所述域轉換。
- 如請求項10所述之裝置,其中回應於該模式間函數返回指令,該處理電路系統經配置以記錄在該模式間函數返回指令之前該域轉換禁用配置參數指示在所述至少一種模式中啟用還是禁用所述域轉換之一指示。
- 如請求項1及2中任一項所述之裝置,其中當回應於自一第一安全域轉換至一第二安全域之一嘗試而傳信該禁用域轉換故障時,當該處理電路系統處於所述至少一種模式中時,異常控制電路系統經配置以控制該處理電路系統以在該第一安全域中處理一異常處置器。
- 如請求項1及2中任一項所述之裝置,其中異常控制電路系統回應一異常條件而更新該域轉換禁用配置參數,以指定在所述至少一種模式中啟用所述域轉換。
- 如請求項1及2中任一項所述之裝置,其中異常控制電路系統回應一異常條件而執行狀態保存以保存與在該異常條件發生之前所執行的處理相關聯之架構狀態,且在該狀態保存中所保存之該架構狀態包括指示在該異常條件之前的該域轉換禁用配置參數之一值。
- 如請求項15所述之裝置,其中在該狀態保存中,該異常控制電路系統經配置以將包括一異常返回位址及架構狀態的一第一子集之一第一堆疊訊框保存至一堆疊資料結構,且將指示該域轉換禁用配置參數之該值保存至一預定暫存器,該預定暫存器可被回應於該異常條件而執行之一異常處置器存取。
- 如請求項16所述之裝置,其中: 至少回應於觸發自該安全域至該次安全域的一轉換之一異常條件,該異常控制電路系統經配置以將該第一堆疊訊框及一第二堆疊訊框保存至該堆疊資料結構,該第二堆疊訊框包括架構狀態的一第二子集及用於檢查該域轉換禁用配置參數之交叉檢查資訊;以及 至少在自該次安全域至該安全域之一異常返回轉換時,該異常控制電路系統經配置以當在指示該域轉換禁用配置參數之該值與該第二堆疊訊框中之該交叉檢查資訊之間偵測到一失配時觸發一故障的傳信。
- 如請求項1及2中任一項所述之裝置,其中: 回應於請求自該安全域至該次安全域的一轉換之一域間調用分支指令,一指令解碼器經配置以控制該處理電路系統以執行一域間調用分支操作,包括: 將一函數返回位址保存至一函數返回位址儲存位置; 將該處理電路系統切換至該次安全域;以及 分支至由該域間調用分支指令所指定的一分支目標位址所標識之一指令。
- 如請求項18所述之裝置,其中: 回應於該域間調用分支指令,該指令解碼器經配置以控制該處理電路系統以: 當該域轉換禁用配置參數指定在所述至少一種模式中啟用所述域轉換或該處理電路系統處於除了所述至少一種模式以外之一模式中時,執行所述域間調用分支操作;以及 當該處理電路系統處於所述至少一種模式中且該域轉換禁用配置參數指定在所述至少一種模式中禁用所述域轉換時,觸發該禁用域轉換故障的傳信。
- 如請求項1及2中任一項所述之裝置,其中: 回應於請求自該安全域至該次安全域的一轉換之一域間調用分支指令,一指令解碼器經配置以控制該處理電路系統以將一函數返回位址保存至一堆疊資料結構且將一虛設函數返回位址保存至一鏈路暫存器; 回應於當該虛設函數返回位址指示一域間函數返回時分支至該虛設函數返回位址之一嘗試,該處理電路系統經配置以控制該處理電路系統,以在該處理電路系統處於所述至少一種模式中且該域轉換禁用配置參數指定在所述至少一種模式中禁用所述域轉換時觸發該禁用域轉換故障的傳信。
- 如請求項1及2中任一項所述之裝置,其中: 該記憶體存取檢查電路系統經配置以維持安全屬性資料,其指示相應位址區域為安全位址區域還是次安全位址區域; 該裝置包括指令獲取電路系統,以自一快取記憶體或記憶體獲取用於由該指令解碼器解碼之一指令;以及 回應於獲取具有在一安全位址區域中之一位址的一指令之一嘗試,當該處理電路系統處於該次安全域中,該處理電路系統處於所述至少一種模式中且該域轉換禁用配置參數指定在所述至少一種模式中禁用所述域轉換時,該指令獲取電路系統經配置以觸發該禁用域轉換故障的傳信。
- 如請求項1及2中任一項所述之裝置,其中觸發該禁用域轉換故障的傳信包括設定指示一禁用域轉換故障之一綜合特徵旗標。
- 一種資料處理方法,包括: 使用一裝置執行資料處理,該裝置包括用以在包括至少一安全域及一次安全域之複數個安全域中的一者中執行資料處理之處理電路系統,及用以檢查取決於該處理電路系統之一當前安全域而是否允許一記憶體存取之記憶體存取檢查電路系統; 在一控制儲存位置處儲存一域轉換禁用配置參數,該域轉換禁用配置參數指定在該處理電路系統之至少一種模式下啟用還是禁用該安全域與該次安全域之間的域轉換;以及 在該處理電路系統之所述至少一種模式中,回應於進行該安全域與該次安全域之間的一域轉換之一嘗試,當該域轉換禁用配置參數指定在所述至少一種模式中禁用所述域轉換時,觸發一禁用域轉換故障的傳信,而無論所嘗試之該域轉換為自該安全域至該次安全域還是自該次安全域至該安全域。
- 一種電腦程式,用於控制一主機資料處理裝置以提供用於執行指令的一指令執行環境;該電腦程式包括: 處理程式邏輯,用以在包括至少一安全域及一次安全域之複數個安全域中的一者中執行資料處理; 記憶體存取檢查程式邏輯,用以檢查取決於該處理程式邏輯之一當前安全域是否允許一記憶體存取;以及 配置參數設定程式邏輯,用以在一控制儲存位置處儲存一域轉換禁用配置參數,該域轉換禁用配置參數指定在該處理程式邏輯之至少一種模式下啟用還是禁用該安全域與該次安全域之間的域轉換;其中: 在該處理程式邏輯之所述至少一種模式下,當該域轉換禁用配置參數指定在該至少一種模式下禁用所述域轉換時,該處理程式邏輯經配置以: 回應於自該安全域至該次安全域之一嘗試觸發一禁用域轉換故障的傳信;以及 回應於自該次安全域至該安全域之一嘗試觸發該禁用域轉換故障的傳信。
- 一種儲存如請求項24所述之該電腦程式的電腦可讀儲存媒體。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| GB1918216.1A GB2589897B (en) | 2019-12-11 | 2019-12-11 | Domain transition disable configuration parameter |
| GB1918216.1 | 2019-12-11 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| TW202129491A true TW202129491A (zh) | 2021-08-01 |
| TWI908749B TWI908749B (zh) | 2025-12-21 |
Family
ID=
Also Published As
| Publication number | Publication date |
|---|---|
| WO2021116654A1 (en) | 2021-06-17 |
| IL293184A (en) | 2022-07-01 |
| KR20220108176A (ko) | 2022-08-02 |
| US20220366037A1 (en) | 2022-11-17 |
| KR102864273B1 (ko) | 2025-09-26 |
| JP2023505149A (ja) | 2023-02-08 |
| GB2589897A (en) | 2021-06-16 |
| EP4073634A1 (en) | 2022-10-19 |
| GB201918216D0 (en) | 2020-01-22 |
| GB2589897B (en) | 2022-03-23 |
| CN114902178A (zh) | 2022-08-12 |
| US12248562B2 (en) | 2025-03-11 |
| JP7645262B2 (ja) | 2025-03-13 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP7645262B2 (ja) | ドメイン遷移無効化構成パラメータ | |
| CN112805710B (zh) | 数据处理装置和方法 | |
| US20140075581A1 (en) | Secure mechanism to switch between different domains of operation in a data processor | |
| JP2015534186A (ja) | 安全なドメインとより安全性の低いドメインの間で切り替えるときに安全ではないアクセスから安全なデータ及びプログラム・コードを保護するためのデータ処理装置及び方法 | |
| KR20160019454A (ko) | 데이터 처리장치에서의 소프트웨어 라이브러리들의 보안 보호 | |
| JP5100133B2 (ja) | 情報処理装置 | |
| KR102547479B1 (ko) | 명령 세트의 변경을 제어하는 장치 및 방법 | |
| TWI868250B (zh) | 用於模式間的調用分支指令的裝置、資料處理方法、電腦程式及電腦可讀儲存媒體 | |
| TW201939272A (zh) | 帶鏈結分支指令的分支目標變體 | |
| TWI908749B (zh) | 域轉換禁用配置參數 | |
| TW202131191A (zh) | 用於控制對一組記憶體映射的控制暫存器的存取的設備及方法 | |
| TW202418067A (zh) | 堆疊指標切換有效性檢查 | |
| CN119096231A (zh) | 存储器管理 |