KR20150065715A - 안전한 도메인과 덜 안전한 도메인을 갖는 데이터 처리장치에서의 예외처리 - Google Patents

안전한 도메인과 덜 안전한 도메인을 갖는 데이터 처리장치에서의 예외처리 Download PDF

Info

Publication number
KR20150065715A
KR20150065715A KR1020157008995A KR20157008995A KR20150065715A KR 20150065715 A KR20150065715 A KR 20150065715A KR 1020157008995 A KR1020157008995 A KR 1020157008995A KR 20157008995 A KR20157008995 A KR 20157008995A KR 20150065715 A KR20150065715 A KR 20150065715A
Authority
KR
South Korea
Prior art keywords
exception
processing
secure domain
registers
data
Prior art date
Application number
KR1020157008995A
Other languages
English (en)
Other versions
KR102075372B1 (ko
Inventor
토마스 크리스토퍼 그로커트
Original Assignee
에이알엠 리미티드
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
Priority claimed from GB201217531A external-priority patent/GB201217531D0/en
Application filed by 에이알엠 리미티드 filed Critical 에이알엠 리미티드
Publication of KR20150065715A publication Critical patent/KR20150065715A/ko
Application granted granted Critical
Publication of KR102075372B1 publication Critical patent/KR102075372B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • 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/1491Protection against unauthorised use of memory or access to memory by checking the subject access rights in a hierarchical protection system, e.g. privilege levels, memory rings
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/74Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information operating in dual or compartmented mode, i.e. at least one secure mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/481Exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/034Test or assess a computer or a system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers

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)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Complex Calculations (AREA)

Abstract

처리회로는 안전한 도메인 및 덜 안전한 도메인에서 동작할 수 있다. 처리회로에 의해 행해진 후순위 처리로부터의 초기 예외에 응답하여, 예외처리 루틴을 기동하기 전에 예외 제어회로에 의해 제 1 서브셋의 레지스터들로부터의 데이터의 상태 보존이 행해지는 한편, 예외처리 루틴은 제 2 서브셋의 레지스터들로부터의 데이터의 상태 보존을 행할 책임이 있다. 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 최초의 예외에 응답하여, 후순위 처리가 덜 안전한 도메인에 있는 경우에, 예외 제어회로는, 예외처리 루틴을 기동하기 전에, 제 2 세트의 레지스터들로부터 데이터의 추가적인 상태 보존을 행한다. 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 테일 체인 예외에 응답하여, 추가적인 상태 보존을 행하지 않고 예외처리 루틴이 기동된다.

Description

안전한 도메인과 덜 안전한 도메인을 갖는 데이터 처리장치에서의 예외처리{EXCEPTION HANDLING IN A DATA PROCESSING APPARATUS HAVING A SECURE DOMAIN AND A LESS SECURE DOMAIN}
본 발명은, 데이터 처리 분야에 관한 것으로, 특히 안전한 도메인과 덜 안전한 도메인을 갖는 데이터 처리에 관한 것이다.
다수의 데이터 처리 시스템 및 아키텍처는, 권한이 없는 사람이나 프로세스에 의한 액세스로부터 코드의 민감한 데이터 및 부분을 격리시키고 보호하는 방법을 제공한다. 보안을 제공할 수 있는 것이 중요하지만, 이 보호와 관련된 성능 및 회로 면적에 있어서 오버헤드가 존재한다.
마이크로콘트롤러 등의 소형 시스템에서는, 이들 오버헤드를 낮게 유지하는 것이 매우 중요하므로, 보안 레벨과 성능 사이에 타협점을 찾을 필요가 있다.
데이터 및 코드를 안정하게 유지하는 한가지 방법은, 영국의 캠브리지의 ARMTM에 의해 Trustzone 아키텍처에 의해 제공되는데, 이 아키텍처에서는, 안전한 상태와 안정하지 않은 상태가 존재하고, 소프트웨어 핸들러를 사용하여 이들 상태들 사이에서 천이(transition)하며, 소프트웨어 핸들러가 안전한 측의 보안을 보호한다. 이와 같은 접근방법이 높은 보안 수준을 제공하기는 하지만, 모든 호출이 소프트웨어 핸들러를 거쳐 프락시(proxy)되어야 하므로, 보안 상태를 변화시키기 위해서는 소프트웨어 핸들러의 형태를 갖는 상당한 소프트웨어 개입이 필요하여, 시스템의 성능을 줄이고 외부 응용 프로그램 인터페이스 API를 개발하는데 필요한 노력의 양을 증가시킨다. 마찬가지로, 안전한 도메인에 있는 동안 발생하며 안전하지 않은 도메인에서의 처리를 필요로 하는 예외들도 안전한 예외 핸들러를 거쳐 프락시될 필요가 있으므로, 안전하지 않은 예외 핸들러로 제어가 건네지기 전에 안정한 상태를 보호할 수 있다.
제 1 면에 따르면, 본 발명은,
프로그램 코드에 응답하여 데이터 처리 연산을 행하고, 예외처리를 제어하는 예외 제어회로를 구비한 처리회로와,
데이터를 기억하고, 제 1 서브셋의 레지스터들 및 제 2 서브셋의 레지스터들을 포함하는 복수의 레지스터들과,
데이터를 기억하고, 안전한 영역과 덜 안전한 영역을 포함하는 복수의 영역들을 포함하되, 상기 안전한 영역은 안전한 도메인에서 동작할 때 상기 처리회로에 의해 액세스가능하고 덜 안전한 도메인에서 동작할 때 상기 처리회로에 의해 액세스 불가능한 데이터를 기억하기 위한 것인 데이터 저장소(data store)를 구비하고,
상기 처리회로에 의해 행해진 후순위 처리(background processing)로부터의 초기 예외에 응답하여, 상기 예외 제어회로는, 이 예외에 대응하는 예외처리 루틴을 행하도록 상기 처리회로를 기동하기 전에 상기 제 1 서브셋의 레지스터들로부터의 데이터의 상태 보존을 행하도록 구성되고, 상기 예외처리 루틴은 상기 제 2 서브셋의 레지스터들로부터의 데이터의 상태 보존을 행할 책임이 있으며,
상기 안전한 도메인으로부터 상기 덜 안전한 도메인으로의 천이를 일으키는 최초의 예외에 응답하여, 상기 후순위 처리가 상기 안전한 도메인에서 상기 처리회로에 의해 행해진 경우에, 상기 예외 제어회로는, 상기 덜 안전한 도메인에서 상기 예외처리 루틴을 행하도록 상기 처리회로를 기동하기 전에 상기 제 2 서브셋의 레지스터들로부터의 데이터의 추가적인 상태 보존을 행하도록 구성되고,
상기 안전한 도메인으로부터 상기 덜 안전한 도메인으로의 천이를 일으키는 테일 체인(tail-chained) 예외에 응답하여, 상기 예외 제어회로는 상기 추가적인 상태 보존을 행하지 않고 상기 예외처리 루틴을 행하도록 상기 처리회로를 기동하도록 구성되고, 상기 테일 체인 예외는 상기 최초의 예외가 처리된 후에 상기 후순위 처리로 복귀하기 전에 처리되는, 데이터 처리장치를 제공한다.
후순위 처리중에 예외가 발생하면, 후순위 처리가 데이터 값들을 레지스터 등의 내부에 배치하여 이들 데이터 값들을 유지하고 예외가 종료할 때 복원될 수 있도록 하며, 시스템이 레지스터들로부터 데이터 저장소로의 데이터의 상태 보존을 행한다. 전술한 것과 같이, 일부의 시스템에 대해서는, 달성된 보안의 수준과 처리 성능 사이에 타협점을 찾는 것이 중요하다. 이것은 예외에 응답하여 상태 보존을 행하는 경우에도 성립한다.
성능상의 이유로 인해, 제 1 서브셋 및 제 2 서브셋의 레지스터들 내부에서 데이터의 상태 보존을 행하는 것이 유용할 수 있다. 제 1 서브셋으로부터의 데이터의 상태 보존은 예외처리 루틴을 기동하기 전에 하드웨어의 예외 제어회로에 의해 행해질 수 있다. 이에 반해, 예외처리 루틴(즉 소프트웨어)은 제 2 서브셋의 레지스터들로부터의 데이터의 상태 보존을 행할 책임이 있다.
그러나, 보안의 관점에서는, 예외처리 루틴의 제어하에서 제 2 서브셋의 레지스터들의 상태를 보존하는 것은 문제가 되는 경우가 있을 수 있다. 안전한 도메인에서 행해진 후순위 처리 이후에, 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 예외가 일으키면, 덜 안전한 예외처리 루틴이 안전한 후순위 코드에 의해 제 2 서브셋의 레지스터들 내부에 놓인 안전한 데이터를 액세스할 수도 있다.
이와 같은 보안 위반을 방지하기 위해, 후순위 처리가 보안 도메인에서 있는 경우 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 최초의 예외가 발생하면, 예외 제어회로는, 덜 안전한 도메인에서 예외처리 루틴을 기동하기 전에, 제 2 서브셋의 레지스터들로부터의 데이터의 추가적인 상태 보존을 행한다. 하드웨어로 제 2 서브셋의 레지스터들의 상태를 보존하는 메카니즘을 제공함으로써, 안전한 데이터를 포함할 수도 있는 제 2 서브셋의 레지스터들의 상태 보존을 덜 안전한 예외처리 소프트웨어가 행하는 것이 필수적인 것은 아니다.
그러나, 하드웨어로 추가적인 상태 보존을 행하는 것은 예외처리 루틴을 개시하기 전에 더 긴 지연을 일으킨다. 이전의 예외가 완료되었을 때 또 다른 예외가 계류중인 것이 가능하다. 이 경우, 처리회로는, 이전의 예외 이전에 행해지고 있었던 후순위 처리로 복귀하기 전에 다른 예외를 서비스할 수도 있다. 이와 같은 상황을 "테일 체이닝(tail-chaining)"으로 부르고 상기한 다른 예외를 "테일 체인" 예외로 부른다. 추가적인 상태 보존의 성능상의 충격을 줄이기 위해, 후처리가 안전한 도메인에서 존재하는 경우, 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 최초의 예외에 대해 이 추가적인 상태 보존이 행해진다. 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 다음의 테일 체인 예외에 대해서는, 후순위 처리가 필요로 하는 데이터 값들이 이미 최초의 예외에 응답하여 보존되었기 때문에, 추가적인 상태 보존을 반복할 필요가 없다. 따라서, 다수의 상황에서는, 추가적인 상태 보존을 행하지 않고 테일 체인 예외에 대한 예외처리 루틴을 기동하는 것이 가능하다.
따라서, 본 발명은, 예외에 응답하여 상태 보존을 행할 때, 보안과 성능 사이의 향상된 균형을 달성할 수 있다. 본 발명의 하드웨어 메카니즘은, 안전한 예외 핸들러를 통한 프록시를 필요로 하지 않으면서 덜 안전한 예외의 효율적인 처리를 가능하게 한다.
안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 최초의 예외에 응답하여, 예외 제어회로는, 예외처리 루틴을 행하도록 처리회로를 기동하기 전에 제 1 서브셋의 레지스터들 및 제 2 서브셋의 레지스터들을 소거해도 된다. 이것은, 덜 안전한 도메인에서의 예외처리 루틴이 안전한 도메인에 있는 동안 레지스터들 내부에 놓인 데이터를 액세스할 수 없다는 것을 의미한다.
더구나, 일 실시예에서는, 상기한 최초의 예외에 응답하여, 데이터 처리장치가, 예외 제어회로가 예외처리 루틴을 행하도록 처리회로를 기동하기 전에, 제 1 서브셋의 레지스터들이 안전한 데이터를 포함하지 않도록 확보하도록 구성되어도 된다. 이것을 달성할 수 있는 다양한 방법이 존재한다. 예를 들어, 제 1 서브셋의 레지스터들이 소거되어 이들 레지스터들이 안전한 데이터를 포함하지 않도록 하드웨어나 소프트웨어가 확보해도 된다. 이와 달리, 예외처리 루틴을 행하도록 처리회로를 기동하기 전에 제 1 서브셋의 레지스터들이 안전하지 않은 데이터만을 포함하도록 구성될 수 있는 경우도 있으며, 이 경우에는 제 1 서브셋의 레지스터들을 소거하는 것이 필요하지 않다.
본 출원에서는, 용어 "호출자 레지스터" 및 "피호출자 레지스터"를 사용하여 제 1 서브셋의 레지스터들 및 제 2 서브셋의 레지스터들을 각각 나타낸다.
예외처리 루틴이 제 2 서브셋의 레지스터들(피호출자 레지스터들)로부터의 데이터의 상태 보존을 행할 책임을 갖기는 하지만, 예외처리 루틴이 제 2 서브셋으로부터 데이터의 상태 보존을 실제로 행하는 것이 필수적이 아닐 수도 있다. 예를 들어, 예외 제어회로가 제 2 서브셋 레지스터들의 추가적인 상태 보존을 이미 행한 경우에는, 예외처리 루틴이 이들 레지스터의 상태 보존을 생략할 수도 있다.
이와 달리, 추가적인 상태 보존이 하드웨어에 의해 이미 행해졌더라도, 예외처리 루틴이 피호출자 레지스터들로부터의 데이터의 상태 보존을 항상 행하는 것이 더 간단할 수도 있다. 레지스터들이 이미 하드웨어에 의해 소거되기 때문에, 예외처리 루틴이 피호출자 레지스터들에 있는 데이터 값들을 액세스하지 않을 수도 있으며, 소프트웨어가 데이터 저장소에 소거된 데이터 값들을 보존하고 나중에 이 소거된 데이터 값들을 복원하는 것과 관련된 오버헤드가, 하드웨어가 추가적인 상태 보존을 이이 행하였는지를 예외처리 루틴이 검출할 수 있도록 하는 메카니즘에 기인한 오버헤드보다 적을 수도 있다.
제 1 서브셋의 레지스터들(호출자 레지스터들) 및 제 2 서브셋의 레지스터들(피호출자 레지스터들)에 관해서는, 제 1 서브셋의 레지스터들이 제로 레지스터들을 포함하여 모든 레지스터들이 제 2 서브셋 내부에 있는 것이 가능하다. 이 경우에, 대부분의 예외에 대해 예외 제어회로에 의해 상태 보존이 행해지지 않게 될 것이며, 예외처리 루틴이 모든 레지스터들을 제 2 서브셋 내부에 보존할 책임을 갖는다. 그러나, 제 2 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 최초의 예외에 응답하여, 추가적인 상태 보존이 제 2 서브셋(모든 레지스터들)을 예외 제어회로를 사용한 하드웨어로 보존함으로써, 덜 안전한 도메인에서의 예외처리 루틴에 의해 이 데이터를 액세스하는 것을 방지한다.
추가적인 상태 보존을 기동하는 최초의 예외는, 처리가 후순위 처리를 행하고 있는 동안 발생하는 초기 예외이어도 된다. 이와 달리, 초기 예외는, 그 자체가, 초기 예외 이후에 그리고 후순위 처리로 복귀되지 전에 처리되는 테일 체인 예외이어도 된다.
본 출원에서는, 더 높은 우선순위의 예외에 의해 인터럽트된 처리를 가리키기 위해 용어 "후순위 처리"를 사용한다. 예외처리 루틴 그 자체가 더 높은 우선순위 예외에 의해 인터럽트되면, 인터럽트된 예외처리 루틴은 선점형 예외(pre-empting exception)에 대한 "후순위 처리"가 되고, 그후 선점형 예외는 인터럽트되기 전에 예외처리 루틴에 의해 사용되고 있는 데이터의 상태 보존을 기동하게 된다.
덜 안전한 도메인으로부터 안전한 도메인으로의 천이를 일으키는 테일 체인 예외에 응답하여, 예외 제어회로는, 추가적인 상태 보존에서 보존된 데이터를 제 2 서브셋의 레지스터들에 복원하지 않고 예외처리 루틴을 기동하도록 처리회로를 제어해도 된다. 본 발명이 없었더라면, 제 2 서브셋의 레지스터들에 있는 데이터를 안전한 도메인에서 예외가 알아 볼 수 있을 것으로 예측되기 때문에, 이들 레지스터의 데이터가 이 시점에서 복원되어야만 할 것으로 예측될 것이다. 그러나, 본 발명은, 이와 같은 복원 동작이 필수적이 아니라는 것을 인식하였다. 이와 같은 복원을 생략함으로써, 추가적인 테일 체인 예외가 발생하여 안전한 도메인으로부터 덜 안전한 도메인으로 천이할 때 제 2 서브셋의 레지스터들이 여전히 보존되므로, 이와 같은 추가적인 테일 체인 예외에 대해 추가적인 상태 보존이 생략될 수 있도록 한다. 테일 체인 예외는 레지스터들에 데이터를 보존하거나 복구함으로써 발생되는 지연이 없이 더욱 신속하게 처리될 수 있기 때문에, 이와 같은 구성은 대부분의 경우에 성능을 향상시킨다.
안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 새로운 예외에 진입시에, 예외 제어회로는 상태 보존 스테이터스(status) 값을 이용하여, 예외처리 루틴을 기동하기 전에 추가적인 상태 보존을 행할 것인지 여부를 판정하여도 된다. 상태 보존 스테이터스 값은, 덜 안전한 도메인에서 테일 체인 예외를 처리하기 전에 추가적인 상태 보존을 행할 필요가 있는지 여부를 나타낼 수 있다. 추가적인 상태 보존이 필요한지 여부는 예외처리의 과거 이력에 의존하므로, 상태 보존 스테이터스 값은 이와 같은 이력의 국면(aspect)이 기록될 수 있도록 함으로써, 추가적인 상태 보존을 다시 행할 필요가 있는지 여부를 시스템이 판정할 수 있게 한다.
일 실시예에서, 상태 보존 스테이터스 값은, 후순위 처리의 중단과 새로운 예외에의 진입 사이에 적어도 한 개의 예외가 덜 안전한 도메인에서 처리되었는지 여부를 표시하며, 이것은 안전한 예외로부터 덜 안전한 예외로의 다음의 테일 체인 천이시에 추가적인 상태 보존이 필요할지 여부의 표시를 제공한다.
새로운 예외에 진입시,
(a) 안전한 도메인에서 후순위 처리가 행해졌고, 또한
(b) 후순위 처리의 중단과 새로운 예외에의 진입 사이에 덜 안전한 도메인에서 예외가 처리되지 않은 것을 상태 보존 스테이터스 값이 표시하는 경우에,
추가적인 상태 보존이 행해져도 된다.
다른 경우에는, 추가적인 상태 보존이 필요하지 않게 된다. 후순위 처리가 안전한 도메인에 존재하지 않은 경우에는, 후순위 처리가 안전한 데이터를 레지스터들 내부에 배치하지 않을 것이므로, 추가 상태 보존이 덜 안전한 도메인으로부터 데이터를 보호할 필요가 없다. 또한, 후순위 처리가 안전한 도메인에 존재하였더라도, 안전한 도메인에서의 후순위 처리의 중단과 새로운 예외에의 진입 사이에 덜 안전한 도메인에서 예외가 이미 처리된 경우에는, 이 예외가 추가적인 상태 보존을 기동하게 될 것이므로, 이 예외가 다시 필요하지 않다.
후순위 처리가 안전한 도메인에서 행해졌는지 덜 안전한 도메인에서 행해졌는지를 표시하기 위해 보안 도메인 값이 유지되어도 된다. 따라서, 보안 도메인 값과 상태 보존 스테이터스 값에 근거하여, 예외 제어회로는, 새로운 예외에의 진입시에 이 예외 제어회로가 추가적인 데이터 보존을 행할 필요가 있는지 여부를 판정할 수 있다.
전술한 것과 같이, 상태 보존 스테이터스 값은 예외처리의 과거 이력에 대한 정보(예를 들어, 어떤 도메인에서 예외가 처리되었는지)를 제공할 수 있다. 그러나, 이것은 과거의 예외에 대한 정보가 덜 안전한 도메인에서 추론될 수 있도록 할 수도 있는데, 이것은 보안 위반을 야기할 수도 있다. 예를 들어, 이것은 덜 안전한 코드가 특정한 안전한 데이터가 최근에 처리되었는지를 추론할 수 있도록 할 수도 있다. 따라서, 덜 안전한 도메인에서 처리하는 동안 상태 보존 스테이터스를 액세스 불가능하게 하는 것이 바람직하다.
이것을 행하는 한가지 방법은, 덜 안전한 도메인으로 진입시에는 상태 보존 스테이터스 값을 고정값으로 설정하고, 안전한 도메인으로 진입시에는 상태 보존 스테이터스 값을 가변값으로 설정하는 것이다. 덜 안전한 도메인에 있을 때에는, 가변값이 유용하게 되는 안전한 상태로부터 덜 안전한 상태로의 천이가 발생하지 않기 때문에, 이 가변값은 안전한 도메인에 있을 때에만 필요하다. 따라서, 덜 안전한 도메인으로 진입시에 이 값을 고정값으로 설정함으로써, 덜 안전한 도메인에서 행해진 처리가 상태 보존 스테이터스 값으로부터 안전한 도메인에 대한 정보를 얻을 수 없다.
상태 보존 스테이터스 값과 관련하여 발생하는 또 다른 잠재적인 보안 문제는, 덜 안전한 도메인에 존재하는 코드가 상태 보존 스테이터스 값을 변경하여, 안전한 도메인으로부터 덜 안전한 도메인으로의 천이에 대해 상태 보존이 행해질지 여부에 영향을 미칠 수 있는 가능성이다. 해커가 상태 보존이 행해지는지 여부에 대한 제어를 장악하면, 이것이 보안 데이터의 누설을 일으킬 수도 있다. 이와 같은 문제를 방지하는 다양한 방법이 존재한다.
일 실시예에서는, 덜 안전한 도메인에서의 예외로부터 복귀시에, 상태 보존 스테이터스 값이 덜 안전한 도메인으로 진입시에 설정되었던 고정값을 여전히 갖고 있는지 여부를 예외 제어회로가 검사하고, 상태 보존 스테이터스 값이 고정값을 갖지 않는 경우에는 에러가 기동된다. 상태 보존 스테이터스 값은 덜 안전한 도메인에 있는 동안 고정값을 갖는 것으로 되어 있기 때문에, 그 이외의 값은, 부당변경이 일어난 것을 표시할 수 있으므로, 고장이 기동될 수 있다.
이와 달리, 상태 보존 스테이터스 값은 덜 안전한 도메인에서 처리하는 동안 가변값을 가져도 된다. 덜 안전한 도메인에서의 예외가 가변값을 갖는 상태 보존 스테이터스 값을 액세스할 수 있도록 하는 것이 보안 관점에서 문제가 되지 않는다면 이와 같은 구성이 적절할 수도 있다. 그러나, 그후의 상태 보존 동작에 영향을 미치는 덜 안전한 도메인에서의 코드에 의해 상태 보존 스테이터스 값에 대한 변경을 방지하기 위해, 덜 안전한 도메인에서의 예외로부터 복귀시에, 예외 제어회로는 상태 보존 스테이터스 값에 무관하게 예외처리를 제어한다. 덜 안전한 예외를 벗어날 때 상태 보존 스테이터스 값이 한가지 값 또는 다른 값을 갖는지 여부에 무관하게 상태 보존 스테이터스 값을 무시하고 동일한 처리를 행함으로써, 덜 안전한 도메인에서의 코드에 의한 상태 보존 스테이터스 값의 부당 변경이 시스템의 보안에 영향을 미치지 않게 된다.
예를 들면, 덜 안전한 예외 핸들러를 벗어난 후에, 상태 보존 스테이터스 값은 이 값이 덜 안전한 도메인에서 갖기로 되어 있는 값으로 리셋됨으로써, 덜 안전한 도메인에서 동작하는 동안 스테이터스 값으로의 변경을 무시할 수도 있다. 이것은, 후속하는 처리가 덜 안전한 예외로부터 복귀시에 상태 보존 스테이터스 값이 갖고 있는 값에 무관하다는 것을 의미한다.
다른 실시예에서는, 상태 보존 스테이터스 값이, 테일 체인 예외들 사이에서 전환할 때 도메인들 사이의 가장 최근의 천이가 도메인으로부터 안전한 도메인으로의 천이이었는지 여부를 표시하여도 된다. 이것을 안전한 도메인에서 후순위 처리가 행해졌는지 여부를 표시하는 보안 도메인 값과 결합함으로써, 추가적인 상태 보존이 필요한지 여부를 판정한다. 이와 같은 방식의 이점은, (덜 안전한 도메인으로부터 안전한 도메인으로의 이전의 천이가 존재하였는지 여부에 의존하여) 상태 보존 스테이터스 값이 덜 안전한 도메인에서는 고정값을 갖고 안전한 도메인에서는 가변값을 갖게 된다는 것이다.
예를 들어, 후순위 처리 이후의 초기 예외를 처리시에 상태 보존 스테이터스 값이 제 1 값으로 초기화된다. 후순위 처리가 안전한 도메인에 존재하는 경우에는, 테일 체인 예외로의 진입시에, 테일 체인 예외가 안전한 도메인에 존재하고 덜 안전한 도메인에서 이전의 예외에 뒤따르는 경우에, 상태 보존 스테이터스 값이 제 2 값으로 설정된다. 덜 안전한 도메인에서의 예외로의 진입시에, 상태 보존 스테이터스 값이 제 1 값을 설정된다. 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 테일 체인 예외로의 진입시에, 상태 보존 스테이터스 값이 제 1 값을 갖고 있으면, 추가적인 상태 보존이 행해진다. 이에 따르면, 필요할 때에는 추가적인 상태 보존이 행해질 수 있고, 추가적인 상태 보존이 이미 행해졌거나 불필요한 경우에는 생략될 수 있으며, 덜 안전한 도메인에서 처리가 행해지는 동안 상태 보존 스테이터스 값이 고정값(제 1 값)을 갖도록 제어된다.
한가지 발생할 수 있는 문제는, 서로 다른 예외들 사이에서 천이시에 상태 보존 스테이터스 값을 유지할 수 있도록 하는 방법이다. 상태 보존 스테이터스 값은 메모리에 위치할 수도 있지만, 필요할 때 이 값을 액세스하는 것이 비교적 느려질 것이다. 상태 보존 스테이터스 값은 레지스터 내부에 배치될 수도 있지만, 한가지 예외로부터 다른 예외로의 전환시에 보존될 가능성이 크고 아마도 소거될 가능성도 크다.
상태 보존 스테이터스 값을 표시하는 한가지 유용한 방법은 링크 레지스터(link register)에 기억된 예외 복귀값의 일부가 되는 것이다. 링크 레지스터에 기억된 예외 복귀값을 사용하여 예외처리 루틴으로부터의 복귀를 제어한다.
예외로의 진입시에, 예외 제어회로는, 유효 명령 어드레스에 대응하지 않는 더미 예외 복귀 어드레스로 링크 레지스터를 설정한다. 예외처리 루틴은 링크 레지스터에 기억된 어드레스로의 분기를 포함한다. 더미 예외 복귀 어드레스로의 분기에 응답하여, 예외 제어회로는, 분기가 다른 종류의 복귀(예를 들면, 함수 복귀(가 아니고 예외 복귀라는 것을 검출할 수 있으며, 후순위 처리로 복귀하기 전에 상태 보존에 이전에 보존된 데이터를 복원하는 상태 복원처리를 행해야 하는지를 검출한다. 유효 명령 어드레스 대신에 더미 예외 복귀 어드레스를 사용하는 것은 다른 종류의 복귀(예를 들어, 함수 복귀)에 대한 예외 복귀를 위해 동일한 분기 및 링크 메카니즘이 사용될 수 있도록 할 수 있다.
유용한 특성은, 각각의 예외에의 진입시에 링크 레지스터가 예외 복귀값으로 새롭게 설정된다는 것이다(테일 체인 예외에 대해서는, 예외 복귀 어드레스가 이전의 예외에 대한 것과 동일한 값으로 이전에 설정되었을 것이다). 본 발명은 이와 같은 예외 복귀값의 리프레시를 이용하여 예외마다 예외처리의 과거 이력에 대한 정보를 전달한다. 예외 복귀값의 일부로서 상태 보존 스테이터스 값을 표시하고, 새로운 예외 복귀값이 링크 레지스터에 기억될 때 상태 보존 스테이터스 값을 변경함으로써, 정보가 예외들 사이에서 전달될 수 있고 다른 값으로 설정될 수 있으며 추가적인 상태 보존이 필요한지 여부의 판정을 허용할 수 있다. 이것은 각각의 테일 체인 예외에 대해 동일한 예외 복귀값을 사용하는 종래의 기술과 상당히 차이가 난다.
예외의 선점(pre-emption)의 경우에도 상태 보존 스테이터스 값이 유용하다. 현재의 예외보다 높은 우선순위를 갖는 예외가 발생하면, 현재의 처리가 중단될 수 있고, 그 대신에 더 높은 우선순위의 예외가 처리될 수 있다. 이것은 선점으로 알려져 있다.
그러나, 상태 보존을 행하고 있는 동안 선점이 일어나면, 상태 보존이 완료되었는지 여부가 선점형 예외의 성능에 영향을 미칠 수 있다. 제 1 서브셋의 레지스터들의 상태 보존이 아직 완료되지 않았고, 선점형 예외에 앞서서 추가적인 상태 보존을 행할 필요가 없는 경우에는, 상태 보존을 원래 기동한 예외에 대해 추가적인 상태 보존이 필요하였더라도, 이 추가적인 상태 보존을 생략하는 것이 가장 신속할 수 있다.
한편, 제 2 서브셋의 레지스터들의 추가적인 상태 보존을 행하고 있는 동안 선점형 예외가 발생하는 경우에는, 이미 행해진 추가적인 상태 보존을 중단하고 뒤바꾸는 것은 더 많은 시간을 소모할 수도 있기 때문에, 선점형 예외에 대해 추가적인 상태 보존이 필요하지 않더라도, 이 추가적인 상태 보존을 완료하는 것이 가장 효율적이다. 따라서, 추가적인 상태 보존이 행해지지 않는 경우에 보안 위반을 일으킬 덜 안전한 예외가 더 이상 존재하지 않더라도, 성능 관점에서는 이 추가적인 상태 보존을 완료하는 것이 여전히 더 효율적이다.
추가적인 상태 보존이 행해졌다는 것을 후속하는 예외들에게 표시하기 위해, 선점의 경우에 상태 보존 스테이터스 값이 설정된다. 선점형 예외 이후에 행해지는, 안전한 도메인으로부터 덜 안전한 도메인으로 전환되는 추가적인 테일 체인 예외에 응답하여, 추가적인 상태 보존이 이미 행해졌다는 것을 상태 보존 스테이터스 값이 표시하는 경우에는 이 추가적인 상태 보존을 생략할 수 있다.
상태 보존은 데이터를 다양한 위치에 기억한다. 레지스터들의 콘텐츠를 데이터 저장소의 범용 영역에 기억하는 것이 가능하다. 그러나, 이와 같은 경우에는, 데이터 저장소의 어느 위치에 레지스터 콘텐츠를 기억하였는지의 표시를 유지하는 것이 필요할 것이다. 따라서, 상태 보존을 행하는 보다 간단한 방법은 데이터 저장소 내부의 스택을 이용하는 것이다. 스택을 이용할 때 스택에 기억된 데이터의 위치가 레지스터들 중에서 한 개에 스택 포인터의 형태로 유지되어, 데이터를 복원할 필요가 있을 때 데이터에 대한 신속하고도 용이한 액세스를 허용한다.
안전한 도메인과 덜 안전한 도메인을 갖는 보안 시스템과 관련해서, 안전한 스택과 덜 안전한 스택이 존재해도 된다. 제 1 서브셋의 레지스터들의 상태 보존과 제 2 서브셋의 레지스터들의 추가적인 상태 보존에 있어서, 예외 제어회로는, 초기 예외를 행하기 위해 후순위 처리가 중단되었을 때 처리회로가 동작하고 있었던 현재 도메인에 대응하는 안전한 스택과 덜 안전한 스택 중에서 한 개에 데이터를 기억한다. 초기 예외는 추가적인 상태 보존을 기동한 상기한 최초 예외이거나 그 이전의 예외이어도 된다.
본 출원은 일반적으로 덜 안전한 도메인과 안전한 도메인을 언급하고 있지만, 서로 다른 보안 수준 또는 동일한 보안 수준을 갖는 다수의 보안 도메인들이 존재할 수도 있고, 또는 동일하거나 서로 다른 보안 상태를 갖는 다수의 덜 안전한 도메인들이 존재할 수도 있다.
또 다른 일면에 따르면, 본 발명은,
프로그램 코드에 응답하여 데이터 처리 연산을 행하고, 예외처리를 제어하는 예외 제어수단을 구비한 처리수단과,
데이터를 기억하고, 제 1 서브셋의 레지스터수단들 및 제 2 서브셋의 레지스터수단들을 포함하는 복수의 레지스터수단들과,
데이터를 기억하고, 안전한 영역과 덜 안전한 영역을 포함하는 복수의 영역들을 포함하되, 상기 안전한 영역은 안전한 도메인에서 동작할 때 상기 처리수단에 의해 액세스가능하고 덜 안전한 도메인에서 동작할 때 상기 처리수단에 의해 액세스 불가능한 데이터를 기억하기 위한 것인 데이터 저장수단을 구비하고,
상기 처리수단에 의해 행해진 후순위 처리로부터의 초기 예외에 응답하여, 상기 예외 제어수단은, 이 예외에 대응하는 예외처리 루틴을 행하도록 상기 처리수단을 기동하기 전에 상기 제 1 서브셋의 레지스터수단들로부터의 데이터의 상태 보존을 행하도록 구성되고, 상기 예외처리 루틴은 상기 제 2 서브셋의 레지스터수단들로부터의 데이터의 상태 보존을 행할 책임이 있으며,
상기 안전한 도메인으로부터 상기 덜 안전한 도메인으로의 천이를 일으키는 최초의 예외에 응답하여, 상기 후순위 처리가 상기 안전한 도메인에서 상기 처리수단에 의해 행해진 경우에, 상기 예외 제어수단은, 상기 덜 안전한 도메인에서 상기 예외처리 루틴을 행하도록 상기 처리수단을 기동하기 전에 상기 제 2 서브셋의 레지스터수단들로부터의 데이터의 추가적인 상태 보존을 행하도록 구성되고,
상기 안전한 도메인으로부터 상기 덜 안전한 도메인으로의 천이를 일으키는 테일 체인 예외에 응답하여, 상기 예외 제어수단은 상기 추가적인 상태 보존을 행하지 않고 상기 예외처리 루틴을 행하도록 상기 처리수단을 기동하도록 구성되고, 상기 테일 체인 예외는 상기 최초의 예외가 처리된 후에 상기 후순위 처리로 복귀하기 전에 처리되는, 데이터 처리장치를 제공한다.
또 다른 일면에 따르면, 본 발명은, 프로그램 코드에 응답하여 데이터 처리 연산을 행하고, 예외처리를 제어하는 예외 제어회로를 구비한 처리회로와, 데이터를 기억하고, 제 1 서브셋의 레지스터들 및 제 2 서브셋의 레지스터들을 포함하는 복수의 레지스터들과, 데이터를 기억하고, 안전한 영역과 덜 안전한 영역을 포함하는 복수의 영역들을 포함하되, 상기 안전한 영역은 안전한 도메인에서 동작할 때 상기 처리회로에 의해 액세스가능하고 덜 안전한 도메인에서 동작할 때 상기 처리회로에 의해 액세스 불가능한 데이터를 기억하기 위한 것인 데이터 저장소를 구비한 데이터 처리장치의 데이터 처리방법으로서,
상기 처리회로에 의해 행해진 후순위 처리로부터의 초기 예외에 응답하여, 상기 예외 제어회로가, 이 예외에 대응하는 예외처리 루틴을 행하도록 상기 처리회로를 기동하기 전에 상기 제 1 서브셋의 레지스터들로부터의 데이터의 상태 보존을 행하는 단계를 포함하고, 상기 예외처리 루틴은 상기 제 2 서브셋의 레지스터들로부터의 데이터의 상태 보존을 행할 책임이 있으며,
상기 데이터 처리방법은,
상기 안전한 도메인으로부터 상기 덜 안전한 도메인으로의 천이를 일으키는 최초의 예외에 응답하여, 상기 후순위 처리가 상기 안전한 도메인에서 상기 처리회로에 의해 행해진 경우에, 상기 예외 제어회로가, 상기 덜 안전한 도메인에서 상기 예외처리 루틴을 행하도록 상기 처리회로를 기동하기 전에 상기 제 2 서브셋의 레지스터들로부터의 데이터의 추가적인 상태 보존을 행하는 단계와,
상기 안전한 도메인으로부터 상기 덜 안전한 도메인으로의 천이를 일으키는 테일 체인 예외에 응답하여, 상기 예외 제어회로가, 상기 추가적인 상태 보존을 행하지 않고 상기 예외처리 루틴을 행하도록 상기 처리회로를 기동하는 단계를 포함하고, 상기 테일 체인 예외는 상기 최초의 예외가 처리된 후에 상기 후순위 처리로 복귀하기 전에 처리되는, 데이터 처리방법을 제공한다.
본 발명의 또 다른 특정한 바람직한 발명내용은 첨부된 독립항 및 종속항들에 기재되어 있다. 종속항들의 특징은 독립항들의 특징과 적절히, 그리고 청구항들에 명시적으로 기재된 것 이외의 조합으로 결합되어도 된다.
다음의 첨부도면에 도시된 본 발명의 실시예를 참조하여 본 발명을 더욱 상세히 설명한다:
도 1은 안전한 영역과 안전하지 않은 영역을 갖는 데이터 저장소를 구비한 일 실시예에 따른 데이터 처리장치를 나타낸 것이다.
도 2는 일 실시예에 따른 메모리 어드레스 공간을 개략적으로 나타낸 것이다.
도 3은 본 발명의 실시예들의 기술이 보호를 제공하는 것을 목적으로 하는 대상이 되는 2가지 다른 공격 시나리오를 나타낸 것이다.
도 4a는 일 실시예에 따른 함수 호출이나 예외의 수신시에 안전한 스택에 소정의 처리 상태를 기억하는 것을 개략적으로 나타낸 것이고, 도 4b는 다양한 시나리오에 대한 이 소정의 처리 상태의 형태를 나타낸 것이다.
도 5는 함수 호출의 수신시에 일 실시예에 있어서의 처리회로의 동작을 나타낸 흐름도이다.
도 6은 예외의 수신시에 일 실시예에 있어서의 처리회로의 동작을 나타낸 흐름도이다.
도 7은 분기 연산이 함수 호출 복귀이거나 예외 복귀인 상황을 포함하는, 분기 연산을 처리할 때의 일 실시예에 있어서의 처리회로의 동작을 나타낸 흐름도이다.
도 8a 및 도 8b는, 일 실시예에 따라, 안전한 스택이 초기화될 때 안전한 스택에 기억된 소정의 서명을 사용하여 덜 안전한 도메인으로부터 안전한 코드로 분기하려는 권한이 없는 시도를 방지하는 방법을 개략적으로 나타낸 것이다.
도 9는 일련의 테일 체인 예외들을 처리할 때 상태 보존 및 복원 동작을 행하는 일례를 나타낸 것이다.
도 10은 예외 복귀값의 일부를 사용하여 상태 보존 동작을 제어하기 위한 스테이터스 정보를 표시하는 일례를 나타낸 것이다.
도 11은 피호출자 레지스터들의 상태 보존을 행하는 첫 번째 예를 더욱 상세히 나타낸 흐름도이다.
도 12a는 초기 예외 진입시에 예외 복귀 어드레스를 설정하는 일례를 나타낸 흐름도이다.
도 12b는 테일 체인 예외 진입시에 예외 복귀 어드레스를 설정하는 일례를 나타낸 흐름도이다.
도 13은 예외로부터 복귀시에 행해진 상태 복원의 일례를 나타낸 흐름도이다.
도 14는 예외 복귀 처리를 더욱 상세히 나타낸 흐름도이다.
도 15 및 도 16은 도 10에 나타낸 스테이터스 정보를 사용하여 불필요한 상태 보존 및 복원 동작을 피할 수 있는 예를 나타낸 것이다.
도 17은 더 높은 우선순위의 예외에 의한 더 낮은 우선순위의 예외의 선점의 일례를 나타낸 것이다.
도 18a 및 도 18b는 상태 보존을 행하는 도중에 선점이 발생할 때 상태 보존을 행할 수 있는 방법의 예를 나타낸 것이다.
도 1은 예를 들어 마이크로콘트롤러인 데이터 처리장치(10)를 나타낸 것이다. 데이터 처리장치는, 명령들을 처리하는 처리회로(20)와, 처리회로(20)에 의해 처리된 데이터를 기억하고 처리회로(20)가 실행하는 프로그램 코드를 기억하는 데이터 저장소(30)를 구비한다.
데이터 저장소(30)는, 서로 다른 보안을 갖는 2개의 영역, 즉 안전한 영역(30) 및 안전하지 않은 영역(34)(본 명세서에서는 덜 안전한 영역으로도 부른다)을 갖는다. 안전한 영역(32)에 기억된 데이터는, 안전하지 않은 영역(34)에 기억된 코드가 실행되고 있을 때 이 코드가 액세스 가능하지 않다.
데이터 처리장치(10)는 안전한 영역(32) 및 안전하지 않은 영역(34)에 대한 액세스를 제어하는 메모리 보호 유닛 MPU를 더 갖는다. 이와 같은 제어가 메모리 보호 유닛을 거쳐 행해져도 되지만, 다른 실시예들에서는, 현재 실행되고 있는 코드가 기억되는 영역을 감시하고 이에 따라 메모리의 다른 영역들에 대한 액세스를 제어하는 처리장치 내부의 회로에 의해 더욱 더 분배되는 방식으로 행해져도 된다.
본 실시예에서는, 처리회로(20)가 실행하고 있는 도메인의 보안이 현재 실행되고 있는 코드가 기억되는 영역으로부터 결정된다. 따라서, 안전한 데이터 저장소(32)에 기억된 안전한 프로그램 코드가 안전한 도메인에서 실행되고 안전한 스택(360을 이용하여 그 안에 데이터 값들을 기억한다. 마찬가지로, 안전하지 않은 데이터 저장소(34)에 기억된 안전하지 않은 코드는 안전하지 않은 도메인에서 실행되고 안전하지 않은 스택(38)을 이용하여 실행 중에 데이터 값들을 기억한다. 현재 동작의 도메인을 결정하기 위한 다른 기술도 가능한데, 예를 들면, 제어 흐름 변경 명령에 따라 프로세서가 어떤 도메인에서 동작해야 하는지를 식별하는 목표 도메인 값에 근거하여 현재 동작의 도메인을 결정해도 된다.
처리회로(20)는 실행할 명령들을 페치하는 페치회로(22)를 갖는다. 처리회로는 이들 명령을 디코드하는 디코드회로(24)와 이들 명령을 실행하는 실행회로(26)를 더 갖는다. 실행할 명령들은 메모리 보호 유닛 MPU(40)를 거쳐 데이터 저장소(30)로부터 페치회로(22)에 의해 페치된다. 안전한 영역과 안전하지 않은 영역에 대한 액세스를 제어하고 안전하지 않은 측으로부터 안전한 데이터를 격리하는 MPU(40)를 거쳐 명령들 및 데이터가 검색된다.
본 실시예에서는, 데이터 처리 중에 사용되는 범용 레지스터들을 갖는 레지스터 뱅크(60)가 존재한다. 이들 범용 레지스터는, 어떤 명령이 다음에 실행할 명령인가를 표시하는 프로그램 카운터 PC와, 스택 내부의 어떤 지점에서 다음의 데이터 액세스를 행해야 하는가를 표시하는 스택 포인터 SP를 갖는다. 본 실시예에서는, 안전한 측의 스택과 안전하지 않은 측의 스택이 존재하기 때문에, 안전한 스택 포인터 SSP와 안전하지 않은 스택 포인터 NSP가 존재하지만, 어떤 특정한 시간에 이들 중에서 한 개만 실행되고 있는 프로그램에게 직접 보이게 된다. 이때, 일부 실시예에서는, 각각의 스택에 대해 복수의 스택 포인터들이 존재해도 되지만, 마찬가지로 어느 특정한 시간에는 단지 한 개만 볼 수 있다는 점에 주목하기 바란다. 레지스터 뱅크(60) 내부에는 처리회로(20)에 의해 처리되고 있는 데이터 값들을 기억하는 범용 레지스터들도 존재한다. 본 실시예에서는, 이들 범용 레지스터들을 R0 내지 R12로 표시한다.
레지스터 뱅크(60)는, 예외가 취해지거나 함수가 호출될 때 복귀값을 기억하는데 사용되는 링크 레지스터(65)를 더 구비한다. 복귀값은, 복귀가 예외 복귀인지 또는 함수 복귀인지를 시스템이 판정할 수 있도록 하며, 예외 또는 함수로부터 복귀시에 어떤 처리가 필요한지를 시스템이 판정할 수 있도록 한다. 함수의 완료 후에 처리할 프로그램 명령의 어드레스를 표시하는 함수 복귀 어드레스와, 실제 함수 어드레스를 안전한 스택에 기억하여 이 실제 함수 어드레스를 덜 안전한 도메인으로부터 숨기는 함수 복귀를 표시하는 더미 함수 복귀값과, 예외 복귀를 표시하고 후순위 처리가 처리되고 있는 도메인의 보안 레벨의 표시 등과 같은 정보를 포함할 수 있으며, 프로세서가 예외 복귀를 처리하는 방법, 예를 들어 상태를 복원할 때 어떤 스택을 액세스할지와 얼마나 많은 레지스터들을 로드할 필요가 있는지를 판정할 수 있도록 하는 예외 복귀(EXC_RETURN)값을 포함하는 다양한 종류의 복귀값이 사용된다. 이들 다양한 형태의 복귀값에 대해서는 후술한다.
도 1에는 부동 소수점 레지스터들 등의 추가적인 전용 레지스터들을 갖는 추가적인 레지스터 뱅크(64)가 더 도시되어 있다. 일 실시예에서는, 추가적인 레지스터 뱅크(64) 내부의 레지스터들의 어느 것이 안전한 데이터를 기억할 수 있는지 여부를 식별하기 위해 보안 구성 레지스터(secure configuration register: SCR)(62) 내부에 값이 설정될 수 있으며, 이 값이 설정되면, 이들 레지스터들은 (레지스터 뱅크(60)의 레지스터들과 함께) 안전한 도메인으로부터 덜 안전한 도메인으로 또는 역으로의 천이를 제어할 때 관리할 필요가 있는 레지스터들의 세트의 일부를 구성하는 것으로 생각된다.
안전한 도메인으로부터 덜 안전한 도메인으로 그리고 역으로의 천이를 일으키는 다수의 메카니즘이 존재한다. 전술한 실시예에 따르면, 안전한 도메인들 사이에서 천이하기 위한 한가지 허용되는 메카니즘은 함수 호출 메카니즘인데, 이에 따르면 함수 호출에 의해 식별된 다른 소프트웨어 루틴으로의 천이를 가능하게 하기 위해 함수 호출이 발행되어 현재 소프트웨어 루틴의 실행을 일시적으로 중단시킬 수 있으며, 이 다른 소프트웨어가 기억되는 위치에 의존하여 안전한 도메인 또는 덜 안전한 도메인에서 실행할 이와 같은 다른 소프트웨어 루틴은 데이터 저장소(30) 내부에 기억된다. 이 다른 소프트웨어 루틴이 일단 실행되면, 일시적으로 중단된 원래의 소프트웨어 루틴의 실행으로 복귀하기 위해 함수 호출 복귀가 행해진다. 일부의 함수 호출이 현재의 소프트웨어 루틴과 동일한 도메인에서 실행할 목표 소프트웨어 루틴을 식별하게 되지만, 다른 경우에는, 현재의 소프트웨어 루틴이 실행되고 있는 도메인과 다른 도메인에서 목표 소프트웨어 루틴이 실행될 필요가 있다.
전술한 실시예에 따르면, 안전한 도메인들 사이에서 천이하는데 사용될 수 있는 또 다른 메카니즘은 예외 메카니즘이다. 이 메카니즘에 따르면, 예외의 발생시에, 현재의 소프트웨어 루틴의 실행이 일시적으로 중단되고, 그 대신에 예외를 처리하는데 사용된 예외처리 루틴으로 실행이 분기되고, 이때 사용된 예외처리 루틴은 발생하는 예외의 종류에 의존한다. 예외처리 루틴이 일단 실행되면, 그후 예외 복귀를 사용하여 발생된 예외의 결과로써 일시적으로 중단된 원래의 소프트웨어 루틴으로 복귀한다.
예외를 취하는 것(taking of exception)을 제어하기 위해 예외 제어회로(28)가 설치되고, 이와 같은 예외가 더 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 경우에는, 예외를 취하기 전에 민감한 데이터를 기억하는 레지스터들의 세트가 소거됨으로써, 이들 레지스터에 기억된 데이터가 덜 안전한 측에서 사용가능하게 되는 것을 회피한다. 이들 레지스터의 일부 또는 전체에 기억된 상태는 스택 액세스 회로(70)의 제어하에서 안전한 스택에 기억됨으로써, 예외로부터의 복귀시에 이 상태를 복원할 수 있다. 그러나, 더 일반적으로 말하면, 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 필요로 하는 함수 호출의 발생시에 소정의 처리 상태를 안전한 스택에 기억하는 것과 관련된 스택 액세스 회로(7)가 일부 존재하며, 이에 따라 스택 액세스 회로(70)가 도 1 내에서 예외 제어회로(28)와 별개로 식별된다.
더구나, 도 1에 도시된 것과 같이, (예를 들어, 함수 호출 복귀를 이용하여 예외로부터 복귀하거나, 예외 복귀를 이용하여 함수 호출로부터 복귀함으로써) 안전한 도메인으로부터 덜 안전한 도메인으로 천이하는데 사용되는 원래의 메카니즘과는 다른 종류를 갖는 복귀 메카니즘을 통해 덜 안전한 도메인의 소프트웨어가 안전한 도메인으로 복귀하려고 시도하고 있는 상황을 검출하기 위해 고장 검사회로(75)가 설치된다. 고장 검사회로(75)의 일부(즉, 예외 복귀를 검사할 책임에 있는 부분)가 예외 제어회로(28) 내부에 포함되는 것으로 생각해도 되지만, 고장 검사회로(75)의 다른 부분이 처리회로의 하드웨어 내부의 다른 위치에 분포되어도 된다. 예를 들면, 함수 호출 복귀를 검사할 책임이 있는 부분이 일 실시예에서는 페치회로(22)와 관련되어도 된다. 고장 검사회로(75)의 동작은 나중에 더욱 상세히 설명한다.
도 1에서는 데이터 저장소(30)가 한 개의 안전한 영역과 한 개의 덜 안전한 영역을 포함하지만, 본 명세서에서 설명한 기술은 2개보다 많은 수의 다른 안전한 영역들을 포함하는 다른 구현예에도 마찬가지로 적용가능하다.
또한, 도 1에는 예외 제어회로(28)와 스택 액세스 회로(70)가 실행 스테이지(26) 등의 처리회로(20)의 다른 부분들과 분리된 것으로 도시되어 있지만, 실제로는 예외 제어회로(28)와 스택 액세스 회로(7)가 적어도 부분적으로 처리회로(20)의 일부 구성요소를 재사용하여 예외 및 스택 연산의 처리를 제어해도 된다.
도 2는 일 실시예에서 사용되는 메모리 어드레스 공간을 개략적으로 나타낸 것이다. 메모리 어드레스 공간(100)을 분할하여 1개 이상의 안전한 영역과 1개 이상의 덜 안전한 영역을 형성한다. 간략을 기하기 위해, 도 2에서는, 한 개의 안전한 영역과 한 개의 덜 안전한 영역이 존재하는 것으로 가정한다. 안전한 어드레스 공간의 일부(102)를 안전한 도메인에서 실행할 프로그램 코드의 기억을 위해 확보하는 한편, 안전한 어드레스 공간의 다른 부분(104)을 안전한 스택(36)으로 할당한다. 안전한 어드레스 공간의 나머지 부분(106)은, 예를 들어 메모리 힙(memory heap), 또는 실행중에 할당된 빈 공간 등과 같이, 다양한 목적으로 사용된다. 덜 안전한 어드레스 공간도 이와 유사하게 분할됨으로써, 덜 안전한 도메인에 실행할 프로그램 코드를 기억하기 위한 부분(110), 덜 안전한 스택(38)에 할당되는 부분(112) 및 나머지 부분(114)으로 분할된다.
전술한 실시예에 따르면, 메모리 어드레스 공간은 예약 영역(120)을 더 포함하며, 이 영역에 있는 모든 어드레스들은 프로그램 코드에 대한 유효한 어드레스가 아니다. 나중에 상세히 설명하는 것과 같이, 이들 예약 어드레스들의 일부를 사용하여 전술한 실시예들에 대한 바람직한 기능을 제공한다.
속도 및 효율을 증진시키는 것을 목적으로 하여, 전술한 실시예들은 안전한 도메인과 덜 안전한 도메인 사이에서 천이하는 2가지 메카니즘, 즉 함수 호출 메카니즘 및 예외 메카니즘을 제공한다. 그러나, 복수의 도메인 천이 메카니즘의 이용은 악의적인 공격에 대한 취약성을 증가시켜, 예를 들어, 덜 안전한 도메인에 있는 소프트웨어가, 안전한 도메인으로부터 덜 안전한 도메인으로 천이하는데 사용된 원래의 메카니즘과는 다른 종류를 갖는 복귀 메카니즘을 통해 안전한 도메인으로 복귀하는 것을 시도할 수 있도록 한다. 두가지 구체적인 공격 시나리오를 도 3a 및 도 3b에 나타낸다. 도 3a에 도시된 것과 같이, 안전한 코드가 지점 145에서 실행되고 잇고, 지점 150에서 덜 안전한 도메인에 존재하는 함수에 대해 함수 호출이 행해진 것으로 가정한다. 그후, 이 함수가 지점 155에서 실행되지만, 지점 160에서 덜 안전한 소프트웨어가 예외 복귀 메카니즘을 이용하여 안전한 코드로 임의로 분기하려고 시도한다.
마찬가지로, 도 3b에서는, 지점 175에서 안전한 코드가 실행되고 있고, 지점 180에서 예외(예를 들어, 인터럽트)가 발생하여 덜 안전한 도메인에서의 예외처리 루틴으로의 분기를 일으키는 것으로 가정한다. 이와 같은 예외처리 루틴은 지점 185에서 실행되지만, 그후 지점 190에서 덜 안전한 도메인에 있는 소프트웨어가 안전한 도메인으로의 함수 복귀를 하려고 시도한다.
이와 같은 전술한 공격 시나리오들이 발생하는 것이 허용되면, 이것은 덜 안전한 소프트웨어가 안전한 코드로의 임의의 분기를 하는 것을 시도할 수 있도록 허용함으로써, 안전한 데이터를 액세스하는 메카니즘을 제공할 수도 있기 때문에, 시스템의 보안을 유지하고자 하면, 전술한 두가지 공격 시나리오들을 방지할 필요가 있다.
이와 같은 공격들로부터 보호하기 위해서는, 도 4a 및 도 4b를 참조하여 더욱 상세히 설명하는 것과 같이, 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 함수 호출이나 예외가 발생할 때, 스택 액세스 회로(70)가 안전한 스택의 스택 프레임 위에 소정의 처리 상태를 기억하도록 구성된다. 도 4a에서는, 안전한 프로그램 FOO가 현재 안전한 도메인에서 실행되고 있으며, 그후 FOO가 완료되기 전에 함수 호출 또는 예외가 발생하는 것으로 가정한다. 함수 호출이나 예외가 발생하기 전에, FOO에 의해 사용된 임시 데이터를 기억하기 위해, FOO는 보통 안전한 스택(200) 위의 할당된 스택 프레임(205)을 사용하게 된다. 그후, 함수 호출이나 예외가 발생시에, 별개의 스택 프레임(210)이 스택 액세스 회로(70)를 위해 할당되게 되고, 그후 스택 액세스 회로는, 함수 호출에 의해 식별된 필요한 소프트웨어 루틴으로 또는 예외를 처리하는데 필요한 예외처리 루틴으로 분기하기 전에, 소정의 처리 상태를 이 스택 프레임(210) 내부에 기억하게 된다.
먼저 예외가 발생한 후, 안전한 도메인 내부에서 예외처리 루틴을 실행하고자 하는 상황을 고려하면, 스택 프레임(210) 내부에 스택 액세스 회로에 의해 기억된 소정의 처리 상태는 도 4b에서 식별된 레지스터들(215)의 콘텐츠를 포함한다. 이들 레지스터는 본 명세서에서는 "호출자" 레지스터들로 불리고, 이들 레지스터는, 스택 액세스 회로(70)(또는 예외 제어회로(28)가 예외처리 루틴을 실행하고자 하는 도메인에 무관하게 항상 스택 위에 상태 보존을 할 책임을 지는 레지스터들이다. 디폴트로, 예외처리 루틴은 이들 레지스터의 나머지 부분(본 명세서에서는 "피호출자" 레지스터들로 부른다)을 상태 보존하는 책임을 진다. 특히, 예외처리 루틴은, 예외처리 루틴의 본문(body)에 있는 레지스터들을 재사용하기 전에, 예외처리 루틴이 실행되고 있는 도메인과 관련된 스택 위에 피호출자의 상태를 보존한다. 더구나, 예외처리 루틴이 일단 완료되면, 예외처리 루틴은 예외 복귀를 발행하기 전에 (보통 이들 피호출자 레지스터들의 상태를 스택으로부터 해당 레지스터들에 복사함으로써) 이들 피호출자 레지스터들의 상태를 복원하는 책임을 진다.
그러나, 전술한 실시예들에 따르면, 예외가 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 필요로 하고 이전의 후순위 처리가 안전한 도메인에 있는 상황에서, 스택 액세스 회로(70)는, 처리회로가 예외처리 루틴의 실행으로 천이하게 하기 전에, 스택 프레임(210) 내부에 피호출자 레지스터들을 상태 보존하는 책임을 추가로 진다. 따라서, 도 4b에 도시된 것과 같이, 스택 프레임(210) 내부에 기억된 소정의 처리 상태가 형태 220을 취한다. 이때, 도 4b에서 구체적으로 확인한 호출자 및 피호출자 레지스터들은 단순히 호출자 및 피호출자 레지스터들이 분할되는 방법의 일례에 지나지 않으며, 정확히 어떤 레지스터들이 호출자 레지스터들 또는 피호출자 레지스터인 것으로 생각되는지는 구현예에 따라 변동하게 된다는 것은 자명하다.
또한 도 4b에 도시한 것과 같이, 예외처리 루틴이 덜 안전한 도메인에 존재하여, 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 필요로 하는 상황에서는, 스택 액세스 회로가 소정의 서명(222)을 스택 프레임(210) 내부의 소정의 상태 위치에 기억하도록 구성되고 이때 도시된 실시예에서는 이와 같은 소정의 상태 위치가 스택 프레임 내부의 하단 위치가 된다. 이와 같은 소정의 서명은 다양한 형태를 취할 수 있지만, 일 실시예에서는 프로그램 코드에 대한 유효한 어드레스에 대응하지 않는 값을 갖도록 선택된다. 일 실시예에서, 소정의 서명은 메모리 어드레스 공간의 예약된 부분에 있는 어드레스 값들(120) 중에서 한 개를 갖도록 선택된다. 특정한 일 실시예에서는, 소정의 서명이 값 0xF0A5125A를 갖는다.
일반적으로 함수 호출의 발생시에, 스택 액세스 회로(70)는 보통 스택 프레임(210) 내부에 소정의 처리 상태를 기억하지 않을 것이다. 따라서, 함수 호출이 안전한 도메인 내부에 여전히 존재하는 타겟 코드를 식별하면, 소정의 처리 상태를 식별하는 경우, 스택 액세스 회로(70)는, 함수 호출이 일단 완료되면 FOO의 실행을 재개하기 위해 필요하게 되는 복귀 어드레스(225)를 스택 프레임(210) 내부에 기억하도록 구성된다. 이와 같은 복귀 어드레스(225)는, 덜 안전한 도메인으로의 천이를 필요로 하는 예외가 발생한 경우에 소정의 서명(22)이 기억되는 것과 동일한 소정의 상태 위치, 즉 스택 프레임 내부의 하단 위치에 기억된다.
안전한 스택 내부에 기억된 실제 복귀 어드레스(225) 대신에, 덜 안전한 도메인 내부의 타겟 코드는, 사실상 프로그램 코드에 대한 유효한 어드레스가 아닌 더미 함수 호출 복귀 어드레스를 구비한다. 일 실시예에서, 이 더미 함수 복귀 어드레스는, 예약된 어드레스들(120) 중에서 한 개로부터 선택되고, 이전에 언급한 소정의 서명(222)과는 다른 값을 갖도록 더 선택된다.
함수 호출의 발생시에, 도 4b에 도시된 스택 프레임들에 따른 하드웨어에 의해 상태 보존이 요구되지 않더라도, 소프트웨어가 여전히 레지스터 상태의 상태 보존을 행한다. 호출자 및 피호출자 레지스터들로의 레지스터들의 분할은, 함수 호출 이전에 실행된 소프트웨어(호출자 소프트웨어) 및 함수 호출 이후에 실행된 소프트웨어(피호출자 소프트웨어) 모두가 어떤 레지스터가 상태 보존을 겪는지에 영향을 미칠 수 있도록 하기 때문에, 이 분할은 이와 같은 함수 호출을 위해서는 유용하다. 예를 들어, 호출자 소프트웨어가 특정한 호출자 레지스터들을 이용하지 않았거나 일부의 호출자 레지스터들에 있는 데이터의 사용을 완료하였다는 것을 이 호출자 소프트웨어가 알고 있는 경우에는, 이들 레지스터 내부의 값들을 함수 호출 후에 유지할 필요가 없으므로, 이들 레지스터는 상태 보존을 겪을 필요가 없다. 마찬가지로, 피호출자 소프트웨어가 특정한 피호출자 레지스터들을 사용하고 잇지 않으면, 이 피호출자 소프트웨어가 이들 레지스터들에 대해 상태 보존을 행할 필요가 없다. 따라서, 호출자 및 피호출자 소프트웨어가 상태 보존을 위한 레지스터들의 선택에 영향을 미칠 수 있도록 하면, 적당한 때 상태 보존의 양을 줄임으로써 성능 향상을 얻을 수 있다. 이와 비교하여, 호출자 소프트웨어만 또는 피호출자 소프트웨어만 상태 보존을 책임을 진다면, 다른 소프트웨어가 일부 레지스터들이 보존되도록 요구하는 경우에 대비하여 이들 레지스터가 불필요하게 보존될지도 모른다. 도 5는, 일 실시예에 따른, 함수 호출의 발생시에 처리회로에 의해 행해지는 단계들을 나타낸 흐름도이다. 스텝 300에서는, 현재 실행하고 있는 코드가 안전한 도메인에서 실행되고 있는지 여부를 판정한다. 그렇지 않은 경우에는, 스텝 310으로 처리가 곧바로 진행하여, 링크 레지스터(LR)가 복귀 어드레스와 동일하게 설정된다. 그후, 스텝 315로 처리를 진행하여, 새로운 함수(즉, 함수 호출에 대한 목표로서 식별된 프로그램 코드)로 분기가 행해진다. 복귀 어드레스가 링크 레지스터 내부에 설정되었기 때문에, 새로운 함수가 완료되면, 함수 호출 복귀 내에서 올바른 복귀 어드레스가 지정될 수 있다.
스텝 300에서 현재 실행되고 있는 코드가 안전한 도메인에서 실행되고 있다고 판정된 경우에는, 스텝 305에서, 함수 호출에 대한 목적지인 새로운 함수가 덜 안전한 도메인에서 실행되어야 하는지 여부를 판정한다. 이것을 판정할 수 있는 다양한 방법이 존재하지만, 일 실시예에서는, 함수 호출에 대한 목표 어드레스가 안전한 메모리 영역과 관련된 어드레스인지 또는 덜 안전한 메모리 영역과 관련된 어드레스인지 판정함으로써 이것을 간단히 달성할 수 있다. 함수 호출이 덜 안전한 메모리 영역과 관련된 경우에, 이것은 함수 호출에 대한 목적지가 덜 안전한 도메인에 있다는 것을 나타낸다. 함수 호출에 대한 목적지가 덜 안전한 도메인에 있지 않은 경우에는, 마찬가지로 스텝 310으로 처리를 진행한다.
그러나, 함수 호출에 대한 목적지가 덜 안전한 도메인에 있는 경우에, 이것은 안전한 도메인으로부터 덜 안전한 도메인으로의 천이의 필요성을 나타내며, 이 시점에서 스텝 315로 처리를 진행하여, 전술한 것과 같이 링크 레지스터가 더미 함수 호출 복귀 어드레스로 설정된다. 더구나, 스텝 320에서, 실제 복귀 어드레스가 스택 액세스 회로(70)에 의해 안전한 스택 위로 푸시된다. 그후, 스텝 325로 처리를 진행하여, 함수 호출의 목표인 새로운 함수로 분기가 행해진다.
도 5에 도시된 하드웨어 동작 뿐만 아니라, 함수 호출 이전에 실행되는 소프트웨어도 레지스터들로부터 데이터의 상태 보존을 행해도 되며, 함수 호출 이후에 시행되는 소프트웨어도 피호출자 레지스터들로부터 데이터의 상태 보존을 행해도 된다.
도 6은 예외(예외의 한가지 예는 인터럽트이다)의 발생시에 처리회로의 동작을 나타낸 흐름도이다. 스텝 400에서는, 링크 레지스터가 선택된 더미 예외 복귀 어드레스로 설정되는데, 일 실시예에서는, 선택될 수 있는 복수의 서로 다른 더미 예외 복귀 어드레스들이 존재한다. 일 실시예에서는, 가능한 더미 예외 복귀 어드레스들 각각이 프로그램 코드에 대한 유효한 어드레스들이 아닌 어드레스들이 된다. 스텝 400의 더욱 상세한 내용은 후술한다. 그후, 스텝 405에서는, 호출자 보존된 레지스터들이 후순위 처리 도메인, 즉 후순위 코드가 실행되고 있었던 도메인에 대한 스택 위로 푸시된다.
그후, 스텝 408에서는, 후순위 처리가 안전한 도메인에 존재하였는지 여부를 판정하여, 그렇지 않은 경우에는 스텝 432로 곧바로 처리를 진행한다. 후술하는 것과 같이, 후순위 처리가 안전한 도메인에 존재하였는지 여부는 링크 레지스터(65) 내부에 위치한 예외 복귀값에 근거하여 판정될 수 있다. 후순위 처리가 안전한 도메인에 존재하고 있었던 경우에는, 스텝 410에서, 현재 실행되고 있는 코드가 안전한 도메인에서 실행되고 있는지 여부를 판정하여, 그렇지 않은 경우에는, 마찬가지로 스텝 432로 곧바로 처리를 진행한다. 그러나, 스텝 410에서, 현재 실행되고 있는 코드(이것은 후순위 처리이거나 이전의 테일 체인 예외일 수도 있다)가 안전한 도메인에서 실행되고 있다고 판정되면, 스텝 412에서, 목적지가 덜 안전한 도메인에 존재하는지 여부, 즉 예외를 처리하는데 필요한 예외처리 코드가 덜 안전한 도메인에서 실행될 것인지 여부가 판정된다. 그렇지 않은 경우에는, 마찬가지로 스텝 432로 곧바로 처리를 진행한다. 그러나, 목적지가 덜 안전한 도메인에 존재하는 경우에, 이것은, 안전한 도메인으로부터 덜 안전한 도메인으로의 천이가 존재하고 후순위 처리가 안전한 도메인에 존재한 상황을 나타낸다. 따라서, 스텝 420으로 처리를 진행하여, 피호출자 보존된 레지스터들이 후순위 도메인에 대한 스택 위로 푸시되고, 전술한 소정의 서명이 스택 프레임의 하단에 기록된다. 후순위 처리와 관련된 스택은 링크 레지스터(65) 내부에 위치한 예외 복귀값으로부터 결정될 수 있다, 이 단계의 더욱 상세한 내용은 나중에 주어질 것이다.
스텝 430에서, 예외 제어회로(28)는 모든 레지스터들이 소거되도록 한다. 일 실시예에서는, 모든 레지스터들이 스텝 430에서 소거된다. 또 다른 실시예에서는 레지스터들이 스택 위로 푸시될 때 소거될 수 있으며, 따라서 호출자 레지스터들은 스텝 405 중에 소거되고 피호출자 레지스터들은 스텝 420 또는 430 중에 소거된다.
스텝 430 이후에, 또는 스텝 408, 410 및 412에서 검사한 상태들 중에서 어느 것이 발생하지 않은 경우에는, 스텝 432로 처리를 진행한다. 예외의 진입이 테일 체인 예외에 대한 진입인 경우에는, 새로운 예외 복귀값으로 링크 레지스터(65)가 갱신된다. 이 단계는 도 12b를 참조하여 나중에 상세히 설명한다.
스텝 435에서는, 처리가 예외처리 루틴으로 분기한다.
그후, 예외처리 루틴이 피호출자 레지스터들의 상태 보존을 행한다. 일 실시예에서는, 피호출자 레지스터들에 있는 데이터가 이미 스텝 420에서 스택으로 푸시되었고 소거된 경우에도(이 경우, 소프트웨어가 피호출자 레지스터들로부터 덜 안전한 스택으로 소거된 값들을 기억하고 있는 동안, 하드웨어가 피호출자 레지스터들로부터 안전한 스택으로 데이터를 저장했을 것이다), 예외처리 루틴이 항상 피호출자 레지스터들의 상태 보존을 행해도 된다. 이와 달리, 피호출자 레지스터들의 상태 보존이 이미 행해졌는지 여부를 예외처리 루틴이 검출할 수도 있으며, 행해진 경우에는 피호출자 레지스터들의 상태 보존을 생략해도 된다.
도 7은 분기 연산들이 처리되는 방법을 나타낸 흐름도이다. 이와 같은 분기 연산은 정규 분기 처리 연산, 함수 호출 복귀 및 예외 복귀를 포함한다. 도 1은 분기 연산에 대해 도시된 것이지만, 다른 실시예에서는, 명령 흐름의 변경을 일으키는 명령, 예를 들어 프로그램 카운터를 목적지 레지스터로서 갖는 로드 명령과 관련되어 이와 유사한 메카니즘이 사용될 수 있다.
스텝 500에서는, 분기 연산에 의해 지정된 목표 어드레스가 예약 어드레스 범위(120) 내에 존재한지 여부를 판정하는데, 이와 같은 특정한 예에서는, 이것이, 목표 어드레스가 0xF0000000보다 크거나 같은 경우이다. 그렇지 않은 경우에, 이것은 정규 분기 활동을 나타내며, 스텝 505로 처리를 진행하여 정규 분기 처리가 행해진다. 분기 연산의 처리는 본 발명이 속하는 기술분야의 당업자에게 있어서 자명하므로, 여기에서는 정규 분기 처리의 상세내용은 주어지지 않는다.
스텝 500에서 목표 어드레스가 예약 어드레스 범위(120) 내에 존재하는 것으로 판정되면, 스텝 510에서, 목표 어드레스가 더미 함수 호출 복귀 어드레스와 일치하는지 여부를 판정한다. 특정한 일 실시예에서는, 더미 함수 호출 복귀 어드레스가 0xF7FFFFFF이다. 목표 어드레스가 더미 함수 호출 복귀 어드레스와 일치하는 경우에는, 스텝 515에서 안전한 스택 내부의 스택 프레임(210)의 전술한 소정의 상대 위치를 액세스하여 안전한 스택으로부터 복귀 어드레스를 판독한다. 그후, 스텝 500으로 처리를 복귀하여, 함수 호출 복귀를 올바르게 사용하여 이전의 함수 호출로부터 복귀하였다고 가정하면, 스텝 515에서 판독한 복귀 어드레스가 프로그램 코드에 대한 실제 어드레스가 되며, 이에 따라서 처리가 스텝 505의 정규 분기 처리로 분기한다. 그러나, 이 대신에 예외로부터 복귀하는 메카니즘으로서 함수 호출 복귀를 올바르지 않게 사용하였으면, 스텝 515에서 스택 프레임(220)이 액세스될 때, 소정의 서명(222)이 실제 복귀 어드레스로서 검색된다. 그후 이 어드레스를 스텝 500에서 분석할 때, 이 어드레스가 예약 범위 내에 있는 것으로 판정되지만, 스텝 510에서 이 어드레스가 더미 함수 호출 복귀 어드레스가 아닌 것으로 판정되게 된다. 그후, 스텝 520으로 처리가 진행하여, 이 어드레스가 유효한 예외 복귀 어드레스들 중에서 한 개가 아닌 것으로 판정되고, 이에 따라 스텝 525로 처리가 분기되어, 고장이 발생됨으로써 함수 호출 복귀가 올바르게 사용되지 않은 것을 확인하게 된다.
이때 예외 복귀가 지정된 상황을 고려하면, 이 예외 복귀가 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 이전의 예외와 관련된 경우에는, 이것이 다수의 서로 다른 유효한 예외 복귀 어드레스들 중에서 한 개를 목표 어드레스로 식별하게 되는데, 이때 이들 가능한 예외 복귀 어드레스들 각각은 예약 범위(120) 내부에 위치하고 소정의 서명 및 더미 함수 호출 복귀 어드레스와 다르다. 따라서, 스텝 500으로부터 스텝 510으로, 그리고 스텝 510으로부터 스텝 520으로 처리를 진행하여, 긍정 경로가 스텝 530으로 따라가게 된다. 예외 복귀 처리 스텝 530의 상세내용은 후술한다. 현재의 예외보다 낮거나 현재의 예외와 동일한 우선순위와 후순위 처리보다 높은 우선순위를 갖는 새로운 예외가 이와 같은 현재의 예외가 복귀할 때 실행을 대기하고 있는 상황에서는, 이 새로운 더 낮은 우선순위의 예외가 테일 체인 예외로 취해지고(즉, 현재의 예외가 취해지기 전에 발생하고 있었던 후순위 처리로 복귀하기 전에, 새로운 예외는 현재의 예외의 완료 후에 즉시 처리된다), 도 7에 도시된 것과 같이 도 6의 스텝 408로 다시 처리가 분기된다.
스텝 530의 예외 복귀 처리가 행해지고 추가적인 테일 체인 예외가 계류중이 아닌 경우에는, 스텝 535로 처리를 진행하여, 스택 프레임(210) 내부에 기억된 처리 상태 내에서 소정의 서명이 예측되어야 한다는 것을 예외 복귀 처리 스텝 530이 표시하였는지 여부를 판정한다. 전술한 것과 같이, 이것은, 예외가 안전한 도메인으로부터 덜 안정한 도메인으로의 천이를 일으키고, 후순위 코드가 안전한 도메인에서 실행된 경우에 해당한다. 소정의 서명이 예측되지 않으면, 스텝 540으로 처리가 단순히 진행하여, 관련된 레지스터 값들이 스택 프레임으로부터 언스택(unstack)된다. 이와 같은 처리는 도 13을 참조하여 나중에 더욱 상세히 설명한다.
그러나, 스텝 535에서, 소정의 서명이 예측되는 것으로 판정된 경우에는, 스텝 545로 처리를 진행하여, 스택 프레임(210)의 하단이 판독되고, 검색된 값을 소정의 서명과 비교한다. 스텝 550에서는, 일치가 존재하는지 판정되고, 존재하는 경우에는 스텝 540으로 처리를 진행한다. 그러나, 일치가 존재하지 않는 경우에는, 스텝 555로 처리를 진행하여, 고장이 발생되어, 예외 복귀를 올바르지 않게 사용하여 함수 호출로부터 복귀하려고 시도하였다는 것을 나타낸다. 특히, 함수 호출로부터 복귀하려고 시도하기 위해 예외 복귀를 올바르지 않게 사용하고 있었던 경우에는, 스텝 545에서의 안전한 스택의 판독에 의해 복귀 어드레스(225)가 검색되게 되고, 이것은 소정의 서명과 일치하지 않게 되며, 이에 따라 스텝 555에서 고장이 발생되도록 한다.
스텝 525 또는 스텝 555에서 발생된 고장을 처리할 수 있는 다양한 방법이 존재한다. 일 실시예에서는, 처리회로가 둘 중에서 어느 한 개의 고장 상태에 응답하여 안전한 도메인 내부에서 적절한 고장 처리 프로그램 코드를 실행한다. 고장 처리 프로그램 코드가 안전한 도메인 내부에서 실행되도록 보장함으로써, 덜 안전한 도메인에 있는 공격자가 제어를 되찾지 못하도록 방지하고, 이에 따라 공격자가 공격을 재시도하지 못하도록 방지한다.
공격자의 재시도를 좌절시키기 위한 또 다른 메카니즘으로서, 어느 한 개의 고장 상태가 확인되는 경우에 스택 포인터 값이 조정되지 않도록 하여, 복귀의 재현에 의해 동일한 고장 상태가 확인되도록, 데이터 처리장치가 구성되어도 된다. 따라서, 스택 포인터를 조정하지 않음으로써, 공격자가 안전한 공격의 최종 위치를 단순히 이용하여 공격을 재시도함으로써 안전한 스택 내부의 다른 위치에 진입하는 것이 불가능하다. 일 실시예에서는, 전술한 두가지 메카니즘을 사용하여, 덜 안전한 도메인으로부터 공격의 재시도를 방지하는 강건성(robustness)을 제공할 수 있다.
일 실시예에서, 덜 안전한 도메인으로부터의 잠재적인 공격을 일으키는 또 다른 시나리오는 안전한 스택의 초기화 후에 발생한다. 이때, 안전한 스택은 비어질 것이다. 이때, 실행되고 있는 프로그램 코드가 덜 안전한 도메인에 존재하는 경우에는, 프로그램 코드가 안전한 도메인으로 복귀하려고 시도하는 것이 가능하다. 안전한 도메인으로부터 덜 안전한 도메인으로 정당하게 복귀할 원래의 천이가 존재하지 않기 때문에, 이와 같은 복귀를 방지해야 한다. 도 8a 및 도 8b는 이와 같은 복귀가 성공하지 못하도록 방지하는데 사용될 수 있는 메카니즘을 나타낸 것이다. 도 8a에 도시된 것과 같이, 안전한 스택(600)이 초기화될 때, 소정의 서명값(602)이 안전한 스택 위에 기억된다(일 실시예에서는, 이 값은 스택이 초기화될 때 소프트웨어에 의해 기억된다). 이와 같은 소정의 서명값은 일반적으로 도 4b를 참조하여 위에서 설명한 소정의 서명(222)과 다르지만, 마찬가지로 프로그램 코드에 대한 유효한 어드레스에 대응하지 않는 값이 된다. 특정한 일 실시예에서, 소정의 서명(602)은 0xF05AEDA5의 값을 갖는다.
도 8b에 도시된 것과 같이, 소프트웨어가 지점 605에서 덜 안전한 도메인에서 실행된 후, 지점 610에서 안전한 도메인으로 복귀하려고 시도하는 경우, 고장 검사회로는 지점 615에서 안전한 스택으로부터 소정의 서명값(602)을 판독하고, 이 값에 프로그램 코드에 대한 유효한 어드레스와 일치하지 않는 것을 판정하고, 이에 따라 고장을 발생하게 된다. 따라서, 덜 안전한 도메인으로부터의 복귀가 방지된다.
특히, 지점 610에서의 복귀가 함수 호출 복귀이면, 지점 615에서 발생된 고장이 도 7의 스텝 525에서 발생된 고장과 동일하며, 이 고장에 응답하여 동일한 고장 처리 코드가 사용될 수 있다. 따라서, 본 실시예에서는, 고장 검사회로가 소정의 서명 602와 전술한 소정의 서명 222를 구별할 필요가 없다. 그 대신에, 지점 610에서의 복귀가 예외 복귀이면, 소정의 서명값 602가 소정의 서명값 222와 다르다는 사실은, 도 7의 스텝 550에서 일치가 검출되지 않는다는 것을 의미하므로, 스텝 555에서 고장이 발생되게 된다.
도 7에서 스텝 530에 대해 설명한 것과 같이, 한 개의 예외로부터 복귀시에, 첫 번째 예외 이전에 행해진 후순위 처리로 복귀하기 전에, 두 번째 예외가 계류중이고 이 두 번째 예외가 처리된다. 이것은 테일 체이닝으로 알려져 있다. 도 9는, 첫 번째 예외 이후에, 후순위 처리로 다시 전환되기 전에, 두 번째 및 세 번째 예외들이 테일 체인되는 예를 나타낸 것이다.
도 4b의 스택 프레임(220)에 나타낸 것과 같이, 후순위 처리가 안전한 도메인에 존재하고 안전한 처리로부터 덜 안전한 상태에서의 예외로의 천이가 존재하는 경우에는, 호출자 보존된 레지스터들과 피호출자 보존된 레지스터들이 예외 제어회로(28)에 의해 안전한 스택으로 푸시된다. 그러나, 일반적으로 안전한 도메인에서 처리되는 예외들은, (도 4b의 스택 프레임(215)에 나타낸 것과 같이) 호출자 보존된 레지스터들만 스택에 보존되고, 피호출자 보존된 레지스터들의 보존은 예외처리 루틴에게 맡겨지는 것으로 예측할 것이다. 따라서, 도 9에 도시된 것과 같이, 첫 번째 예외에 진입시에 피호출자 레지스터들의 추가적인 상태 보존이 지점 700에서 행해진 경우, 지점 705에서 안전한 도메인에서의 두 번째 예외로 전환될 때, 피호출자 보존된 레지스터들이 스택으로부터 팝(pop)되어 테일 체인된(tail-chained) 두 번째 예외가 안전한 도메인에서 처리될 것으로 예측되는 스택 프레임(215)을 복원하는 것이 가능하다.
그러나. 덜 안전한 도메인에서 처리할 테일 체인된 세 번째 예외가 발생하면, 안전한 도메인으로부터 덜 안전한 도메인으로의 천이는 피호출자 레지스터들에 있는 데이터가 덜 안전한 처리로부터 숨겨질 필요가 있다는 것을 의미하기 때문에, 지점 710에서 피호출자 레지스터들이 다시 스택으로 푸시될 필요가 있다. 최종적으로 세 번째 예외가 완료되고 더 이상의 테일 체인된 예외가 존재하지 않으면, 호출자 및 피호출자 보존된 레지스터들이 도 9의 지점 715에서 스택으로부터 팝된다.
도 9는 테일 체인된 예외들 사이에서 전환시에 행해지고 있는 다양한 상태 보존 동작과 상태 복원 동작을 나타낸 것이다. 이들 동작은 시간이 걸리므로, 들어오는 예외의 처리를 지연시키며, 따라서 처리 성능을 저하시킨다. 따라서, 이들 동작의 일부를 회피하는 것이 유용하다. 본 발명은, 덜 안전한 예외로부터 테일 체인된 안전한 예외로 전환될 때 피호출자 레지스터들이 안전한 스택으로 팝될 필요가 없다는 것을 인식하였다. 스택 위에 피호출자 레지스터들을 남겨두는 것은 예외의 처리에 영향을 미치지 않으므로 허용될 수 있으며, 모든 안전한 피호출자 보존된 값들이 예외가 처리될 필요가 있는 안전한 도메인으로부터 액세스되는 것이 허용된다. 따라서, 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 첫 번째 예외에 응답하여 피호출자 레지스터가 스택에 보존될 수 있다. 덜 안전한 예외로부터 안전한 테일 체인된 예외로 처리가 전환될 때에는 피호출자 레지스터들의 복원을 생략할 수 있다. 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 추가적인 예외에 대해서는, 하드웨어에 의한 피호출자 보존된 레지스터들의 추가적인 상태 보존을 생략할 수 있다.
도 10은 예외에의 진입시에 링크 레지스터에 기억될 수 있는 예외 복귀값의 일례를 나타낸 것이다. 일 실시예에 있어서, 링크 레지스터(65)는 예외처리 루틴이 실시되어 있는 전체 시간 동안 예외 복귀값을 유지할 필요가 없으며, 그 대신에, 시작시에 이 값으로 설정된 후, 곧 스택으로 이동한다. 예외가 완료하면, 소프트웨어가 예외 복귀값에 의해 표시된 어드레스로 분기되며, 이때 이 어드레스는 유효한 명령 어드레스가 아니기 때문에, CPU가 이것을 특수한 이벤트로 알아챈다. 일 실시예에서는, 전술한 더미 함수 호출 복귀 어드레스도 함수 호출의 발생시에 링크 레지스터에 기억되고 마찬가지로 방식으로 처리된다.
예외 복귀값은, 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 예외에의 진입시에 하드웨어에 의한 피호출자 보존된 레지스터들의 보존이 필요한지 여부를 판정하기 위한 정보를 포함한다. 예외 복귀값은 다수의 다른 가능한 값들을 갖고, 이들 값 각각은 어드레스 공간의 예약 영역(120)에 대응하고 전술한 더미 함수 복귀 어드레스 및 소정의 서명 222 및 602와는 다르다. 예외 복귀 어드레스는 상태 보존 스테이터스 값 필드(720)와 보안 필드(725)를 포함한다.
상태 보존 스테이터스 값 필드(720)는, 안전한 도메인으로부터 덜 안전한 도메인으로의 천이를 일으키는 다음의 예외에 대해, 피호출자 보존된 레지스터들의 추가적인 상태 보존이 필요한지 여부를 표시하는 상태 보존 스테이터스 값 SCRS를 기억한다. 도 10의 실시예에서, 0의 값은 추가적인 상태 보존을 건너뛸 수 있다는 것을 표시하는 한편, 1의 값은 추가적인 상태 보존이 필요하다는 것을 나타내지만, 스테이터스 값의 다른 매핑이 사용될 수도 있다.
보안 필드(725)는, 테일 체인 예외들의 현재 체인에서의 초기 예외 이전에 행해지고 있었던 후순위 처리가 덜 안전한 도메인에 존재하였는지 또는 안전한 도메인에 존재하였는지를 표시하는 보안 도메인 값 S를 기억한다. 일련의 테일 체인된 예외들의 각각의 예외에 진입시에, 예외 복귀값은 도 6의 스텝 432에서 새로운 값으로 설정되게 된다. 예외 복귀값을 설정할 때, 상태 보존 스테이터스 값 필드(720)의 값이 변경되어 나중에 행해질 상태 보존 처리에 영향을 미칠 수 있다. 이에 따르면, 한 개의 예외로부터 다른 예외로 정보가 건네짐으로써, 예외들 사이에서의 다음의 천이시에 추가적인 상태 보존이 필요한지 여부를 표시할 수 있다. 이것을 도 11-도 16을 참조하여 설명한다.
도 11은 피호출자 보존된 레지스터들을 푸시하고 안전한 스택(36)에 소정의 서명을 기록하기 위한 도 6의 스텝 420을 더욱 구체적으로 나타낸 것이다. 이와 같은 추가적인 상태 보존은 예외 복귀값의 상태 보존 스테이터스 값 필드(720)의 값에 의존한다. 스텝 750에서, 프로세서는, 예외 복귀값의 상태 보존 스테이터스 값 필드(720)가 제로의 값을 갖는지 여부를 판정한다. 제로의 값을 가지면, 피호출자 보존된 레지스터들을 스택으로 푸시하는 것을 건너뛰고 도 6의 스텝 430으로 처리를 게속한다. 이 경우, 피호출자 보존된 레지스터들로부터의 데이터가 이전의 예외에 응답하여 이미 스택에 보존되었기 때문에, 이들 레지스터의 상태 보존이 필요하지 않을 것이다.
한편, 스텝 750에서, 상태 보존 스테이터스 값이 제로의 값을 갖지 않은 경우에는, 스텝 755로 처리를 진행하여, 피호출자 보존된 레지스터들로부터의 데이터가 안전한 스택으로 푸시된다. 피호출자 보존된 레지스터들도 소거되므로, 이들 값을 덜 안전한 도메인에서의 후속하는 처리가 액세스 불가능하다. 또한, 스텝 760에서 소정의 서명(760)이 스택의 하단에 기록된다. 그후, 도 6의 스텝 430으로 다시 처리를 진행한다. 따라서, 도 11에 따르면, 추가적인 상태 보존이 행해지는지 여부는 상태 보존 스테이터스 필드의 값에 달려 있다.
도 12a는 후순위 처리를 행하는 동안 수신된 초기 예외(일련의 테일 체인 예외가 존재하는 경우에는, 이 예외가 가장 처음의 예외이다)에 대해 도 6의 스텝 400에서 예외 복귀 레지스터를 설정하는 일례를 나타낸 것이다. 스텝 770에서는, 프로세서가 후순위 처리를 위해 동작하고 있는 현재 도메인이 결정된다. 현재의 도메인이 안전한 도메인인 경우에는, 스텝 775에서 보안 도메인 필드(725)가 1의 값을 갖도록 설정되어 안전한 도메인을 표시한다. 현재 도메인이 덜 안전한 도메인인 경우에는, 스텝 780에서 보안 도메인 필드(725)가 0의 값으로 설정된다. 어떤 도메인이 현재 도메인인지에 무관하게, 스텝 790에서는, 상태 보존 스테이터스 값 피드(720)가 1의 값으로 초기화되어, 덜 안전한 도메인으로부터 안전한 도메인으로의 다음의 천이에서 추가적인 상태 보존이 필요할 수도 있다는 것을 표시한다. 그후, 스텝 795에서 예외 복귀값이 링크 레지스터(65)에 기록되고, 상태 보존 스테이터스 값 필드(720) 및 보안 필드(725)가 이전의 스텝에서 결정된 값들로 설정된다. 그후, 도 6의 스텝 405로 처리를 진행하여 예외 진입 처리를 계속한다.
도 12b는 테일 체인 예외에 대한 예외 복귀값을 설정하는 스텝 432의 일례를 더욱 상세히 나타낸 것이다. 스텝 800에서는, 진입하고 있는 예외가 테일 체인 예외인지 여부를 판정한다. 테일 체인 예외가 아닌 경우에는, 도 12b의 나머지 스텝들을 행하지 않고, 도 6의 스텝 435로 처리를 진행하여 예외처리 루틴으로 분기한다. 그러나, 예외가 테일 체인 예외인 경우에는, 스텝 802에서 (체인에서 이전의 예외를 종결하는데 사용된 도 10의 EXE_RETURN 값으로부터의) 보안 도메인 값 S가 1인지 여부를 판정한다. 그렇지 않은 경우에는, S=0이 되고 스텝 804로 처리를 진행하여 상태 보존 스테이터스 값을 1로 설정한다. 후순위 처리가 (S=0으로 표시된 것과 같이) 덜 안전한 경우에는, 추가적인 상태 보존이 행해지지 않는다(도 6의 스텝 408이 추가적인 상태 보존 스텝 420이 생략되도록 한다). 상태 보존 스테이터스 값 필드(720)가 이 경우에는 상태 보존에 영향을 미치지 않기는 하지만, 덜 안전한 도메인에서의 처리가 상태 보존 스테이터스 값 필드(720)로부터 정보를 획득하는 것을 방지하기 위해서는, 이 필드를 스텝 804에서 1의 디폴트 값으로 설정하는 것이 가장 안전하다.
한편, 스텝 802에서 보안 도메인 값 S가 1이면, 스텝 805로 처리를 진행하여 새로운 테일 체인 예외가 안전한 도메인에서 처리될 것인지 여부를 판정한다. 그렇지 않은 경우에는, 마찬가지로 스텝 804에서 상태 보존 스테이터스 값 필드(720)가 1로 설정된다.
새로운 예외가 안전한 도메인에서 처리될 것인 경우, 스텝 806에서 현재의 처리가 안전한 도메인에 존재하는지 여부를 판정한다. 그렇지 않은 경우에는, 스텝 808에서 상태 보존 스테이터스 값 필드(720)가 0으로 설정되는 반면에, 현재의 처리가 안전한 경우에는 스텝 810에서 상태 보존 스테이터스 값 필드(720)가 이전의 예외에 대해 가졌던 값과 동일한 값으로 설정된다. 스텝 812에서는, 새로운 예외 복귀값이 링크 레지스터(65)에 기록되고, 상태 보존 스테이터스 값 필드(720)가 스텝 804, 808 또는 810에 따라 설정된다. 그후, 도 6의 스텝 435로 처리를 진행하여 예외처리 루틴으로 분기한다.
도 13은 레지스터들을 언스택하기 위한 도 7의 스텝 540을 더욱 상세히 나타낸 것이다. 예외처리의 과거 이력에 의존하여, 스택은, 호출자 레지스터들만 복원될 필요가 있는 스택 프레임 215 또는 호출자 및 피호출자 보존된 레지스터들 모두가 복원될 필요가 있는 스택 프레임 220을 포함한다. 도 13은 어떤 스택 프레임이 스택 위에 존재할지를 프로세서가 판정할 수 있는 방법을 나타낸 것이다. 스텝 820에서는, 현재의 예외 복귀가 덜 안전한 예외로부터 안전한 후순위 처리로 전환되고 있는지 여부를 판정한다. 예를 들어, 보안 도메인 필드(725)를 사용하여 후순위 처리가 안전한지 덜 안전한지 판정할 수 있다. 덜 안전한 예외로부터 안전한 후순위 처리로 처리가 전환되고 있지 않으면, 스텝 822에서, 현재의 예외 복귀가 안전한 예외로부터 안전한 후순위 처리로 전환되고 있고 상태 보존 스테이터스 값 필드(720)의 값이 제로인지 여부를 판정한다. 스텝 820 및 822에서 판정된 조건들 중 모두가 만족하지 않은 경우에는, 스텝 824에서 호출자 레지스터들이 스택으로 그것들의 값을 복원한다. 그러나, 스텝 820 및 822에서 테스트된 조건들 중에서 어느 한 개를 만족하면, 스텝 826에서, 스텝 824애서 데이터를 호출자 레지스터들에 복원하기 전에 피호출자 보존된 값들이 피호출자 레지스터들에 복원된다. 따라서, 시스템은 어떤 레지스터들이 그것들의 레지스터 상태를 복원되도록 할 필요가 있는지 판정할 수 있다.
도 14는 도 7의 예외 복귀 처리 스텝 530을 더욱 상세히 나타낸 것이다. 스텝 830에서는, 테일 체인해야만 하는 계류중인 예외가 존재하는지 여부를 판정한다. 예외의 우선순위가 방금 완료한 예외의 우선순위보다 작거나, 또는 같고, 후순위 처리의 우선순위보다 높은 경우에는 이 예외를 테일 체인하여야 한다. 처리할 테일 체인 예외가 존재하는 경우에는, 도 6의 스텝 408로 처리를 진행하여 테일 체인 예외로의 진입을 처리한다.
테일 체인 예외가 존재하지 않으면, 스텝 840 및 850으로 처리를 진행하여, (a) 예외 복귀가 덜 안전한 예외로부터 안전한 후순위 처리로 전환되고 있거나, 또는 (b) 예외 복귀가 안전한 예외로부터 안전한 후순위 처리로 전환되고 있고 상태 보존 스테이터스 값 필드가 0의 값을 갖고 있는지 여부를 판정한다. 이들 조건 중에서 어느 한 개를 만족하면, 스텝 860에서 소정의 서명(222)이 예측되는지 여부를 판정한다. 이들 조건 모두를 만족하지 않으면, 스텝 870에서 소정의 서명이 예측되지 않는지 판정한다. 그후, 도 7의 스텝 535로 처리를 진행하여, 처리를 행함으로써, 소정의 서명(22)이 예측되는지 여부에 근거하여, 예외 복귀가 부적절하게 사용되었는지 검출한다. 이때, 도 4b의 스택 프레임 220에 나타낸 것과 같이, 호출자 보존된 레지스터 값들이 스택 위에 존재할 때에는, 소정의 서명도 예측되기 때문에, 스텝 840 및 850은 도 13의 스텝 820 및 822와 동일한 2개의 조건을 검사한다.
도 15 및 도 16은 상태 보존 스테이터스 값을 사용하여 도 9에 도시된 것과 같은 불필요한 스택 보존 및 복원 동작을 피할 수 있는 방법의 예를 나타낸 것이다. 도 15에서는, 지점 900에서 덜 안전한 예외가 발생할 때 후순위 처리가 안전한 도메인에 존재한다. 도 12a에 도시된 것과 같이, 보안 도메인 값 S가 1로 설정되어 후순위 처리가 안전한 도메인에 존재하고 있었다는 것을 표시하고, 상태 보존 스테이터스 값 SCRS도 1로 설정된다. 지점 910에서 첫번째 예외가 완료할 때, 첫 번째 예외와 같거나 장은 우선순위와 후순위 처리보다 높은 우선순위를 갖는 계류중인 두 번째 예외가 존재한다. 이와 같은 예외는 테일 체인되므로, 후순위 처리로 되돌아가기 전에 처리된다. 이때, 피호출자 보존된 레지스터들의 언스태킹을 건너뛴다. 두 번째 예외로 전환시에는, 후순위 처리가 안전한 도메인(S=1)에 존재하였고 목적지가 안전하고 현재의 처리가 덜 안전하기 때문에, 도 12b의 스텝 808에 나타낸 것과 같이 상태 보존 스테이터스 값 SCRS가 0으로 설정된다. 두 번째 예외가 지점 920에서 처리를 완료하면, 테일 체인된 세 번째 예외가 계류중이며 덜 안전한 도메인에서 처리될 것이다. 상태 보존 스테이터스 값 SCRS가 0이기 때문에, 피호출자 보존된 레지스터 상태가 이미 스택에 보존되었으므로, 도 11의 스텝 750에 따라 추가적인 상태 보존을 생략할 수 있다. 따라서, 추가적인 스태킹 동작과 관련된 지연이 존재하지 않기 때문에, 세 번째 예외를 더욱 신속하게 처리할 수 있다. 최종적으로 지점 930에서는, 후순위 처리로 처리가 복귀하여, 도 13의 방법에 따라 스텝 820에서의 조건을 만족하는지 판정하므로, 피호출자 보존된 레지스터 상태 및 호출자 보존된 레지스터 상태가 스택으로부터 팝되어 대응하는 레지스터들에 복원된다.
도 16은 추가적인 스택 보존 동작을 피할 수 있는 또 다른 예를 나타낸 것이다. 이 경우에는, 안전한 후순위 처리를 행하고 있는 동안, 안전한 도메인에서 처리할 초기 예외가 지점 1000에서 발생한다. 목적지가 덜 안전한 도메인이 아니기 때문에, 도 6의 스텝 412에 따라, 피호출자 보존된 레지스터들이 생략된다. 호출자 보존된 레지스터 상태만 지점 1000에서 하드웨어에 의해 스택으로 푸시된다. 상태 보존 스테이터스 값은 도 12에 나타낸 것과 같이 1로 설정된다. 지점 1005에서는 첫 번째 예외 후에 덜 안전한 두 번째 예외가 테일 체인된다. 상태 보존 스테이터스 값 SCRS가 1이므로, 지점 1005에서 추가적인 상태 보존이 도 11의 스텝 750 및 755에 따라 행해지므로, 피호출자 보존된 레지스터 상태가 스택으로 푸시된다. S=1이고 목적지가 덜 안정하기 때문에, 도 12b의 스텝 804에서, 다음의 예외에 대해 상태 보존 스테이터스 값이 1로 설정된다. 지점 1010에서는 덜 안전한 두 번째 예외로부터 안전한 세 번째 예외로의 테일 체인 천이가 발생하고, 피호출자 보존된 레지스터의 언스태킹을 건너뛴다. 이때, S=1이고 목적지는 안전하며 현재의 처리가 덜 안전하기 때문에, 도 12b의 스텝 808에 따라 상태 보존 스테이터스 값 SCRS가 0으로 설정된다. 이것은, 상태 보존 스테이터스 값이 0이기 때문에, 지점 1015에서의 다음의 테일 체인 예외에서 피호출자 보존된 레지스터들의 스태킹을 건너뛸 수 있다는 것을 의미한다. 도 16에 도시된 것과 같이, 초기 예외가 안전한 도메인으로부터 덜 안전한 도메인으로의 전환을 일으키는 천이가 아니더라도, 안전한 도메인으로부터 덜 안정한 도메인으로의 다음의 전환시에 행해진 추가적인 상태 보존이 한번 행해질 수 있으며 후술하는 천이에서 반복되지 않게 된다.
도 14에 나타낸 것과 같이 예외 복귀값을 설정하기 위한 메카니즘은, 예외가 덜 안전한 도메인에서 처리되고 있을 때, 상태 보존 스테이터스 값 SCRS가 항상 1의 값을 갖게 되는 한편, 안전한 예외를 처리할 때에는 상태 보존 스테이터스 값이 0 또는 1의 가변값을 가져, 다음의 안전한 도메인으로부터 덜 안전한 도메인으로의 천이시에 추가적인 상태 보존이 필요하게 되는지 여부를 표시하는 것을 의미하는 것을 도 15 및 도 16에서 알 수 있다. 덜 안전한 도메인에 있는 동안 값을 1의 고정값으로 설정하면, 예외처리의 과거 이력에 대해 정보를 추론할 수 있도록 할 수도 있는, 덜 안전한 도메인의 코드가 상태 보존 스테이터스 값으로부터 정보를 획득할 수 없도록 방지되기 때문에, 전술한 구성은 유용하다. 이것은 보안을 향상시킨다.
또한, 덜 안전한 코드가 상태 보존 스테이터스 값을 부정변경할 수 있다면, 이것은 안전한 도메인에 있는 동안 후속하는 상태 보존 동작에 영향을 미침으로써, 보안 위반을 일으킬 수도 있다. 이것을 방지하기 위해, 처리회로는, 덜 안전한 예외로부터 안전한 예외로 전환시에(에를 들면, 도 16의 지점 1010에서), 상태 보존 스테이터스 값이 여전히 덜 안전한 도메인의 예외의 진입시에 설정되었던 고정값을 갖고 있는지 검출하여, 이 값이 변경된 경우에는 에러를 기동한다. 이와 달리, 에러가 기동되지 않고, 안전한 도메인으로 복귀할 때, 상태 보존 스테이터스 값이 이것이 안전한 도메인에서 갖도록 되어 있는 값으로 리셋되어, 덜 안전한 코드에 의한 상태 보존 스테이터스 값의 변경을 무효로 할 수도 있다.
도 17은 예외의 선점의 일례를 나타낸 것이다. 각각의 예외는 우선순위 값과 관련되어 있다. 더 낮은 우선순위의 예외가 행해지고 있는 동안 더 높은 우선순위의 예외가 발생하면, 높은 우선순위의 예외가 더 낮은 우선순위의 예외를 선점하고 더 낮은 우선순위의 예외를 완료하지 않고 처리된다. 도 17에서는 더 큰 수치의 우선순위 값이 더 높은 우선순위를 표시하는 예가 도시되어 있지만, 더 낮은 우선순위 값으로 더 높은 우선순위를 표시하는 것도 가능한데, 예를 들면, 0의 우선순위 값은 1의 우선순위 값보다 높은 우선순위 예외를 표시한다.
도 17에 도시된 거소가 같이, 선점이 발생하면, 선점된 예외는 다음의 예외에 대해 후순위 처리로 취급될 수 있다. 예를 들면, 도 17의 지점 1100에서는, 후순위 처리가 인터럽트되어 1의 우선순위 값을 갖는 첫 번째 예외를 처리한다. 지점 1105에서는 4의 우선순위 값을 갖는 두 번째 예외가 발생한다. 이것이 현재의 우선순위 레벨보다 높은 우선순위이므로, 두 번째 예외가 첫 번째 예외를 선점하여, 첫 번째 예외가 후순위 처리가 된다. 지점 1110에서 두 번째 예외로부터 복귀할 때, 상태 복원이 행해져, 두 번째 예외가 발생했을 때 후순위 처리(즉, 첫 번째 예외)에 의해 사용되고 있었던 상태를 복원하게 된다. 지점 1115에서 첫 번째 예외가 완료하면, 또 다른 상태 복원이 행해져 원래의 후순위 처리에 의해 사용된 값을 복원한다. 따라서, 이전의 실시예들에서, "후순위 처리"는 그 자체가 더 높은 우선순위 예외에 의해 선점되는 예외에 대한 예외처리 루틴에 따라 행해지고 있는 처리가 된다.
도 18a 및 도 18b는 선점중에 상태 보존 스테이터스 값이 유용할 수 있는 일례를 나타낸 것이다. 후순위 처리가 안전하고 덜 안전한 예외가 발생하는 경우에, 전술한 것과 같이 호출자 및 피호출자 보존된 레지스터들이 스택으로 푸시되어 덜 안전한 예외 핸들러에 의한 피호출자 레지스터 상태의 액세스를 방지한다. 그러나, 이와 같은 상태 보존 동작이 행해지고 있는 동안 더 높은 우선순위를 갖는 또 다른 예외가 발생하는 것이 가능하다. 이 경우에는 더 높은 우선순위의 예외가 원래의 덜 안전한 예외를 선점하므로, 덜 안전한 예외가 처리되지 않게 된다. 안전한 도메인에서 선점형 예외를 처리하려고 하면, 피호출자 보존된 레지스터들을 스택으로 푸시하는 것이 필요하지 않을 것이다.
도 18a는 호출자 보존된 레지스터들이 스택으로 푸시되고 있는 동안 선점형 예외가 발생하는 예를 나타낸 것이다. 이 경우에는, 선점형 예외가 안전하기 때문에, 피호출자 레지스터들의 추가적인 상태 보존을 행하는 것이 필요하지 않으므로, 호출자 레지스터들의 스태킹이 완료하면, 안전한 예외의 처리를 개시할 수 있다. 이것은 피호출자 레지스터 상태를 스택으로 푸시하는 것에 의해 발생하는 지연을 회피한다. 다음의 테일 체인된 덜 안전한 예외가 발생하면, 도 18a에 나타낸 것과 같이 이 시점에서 피호출자 레지스터 상태가 스택으로 푸시될 수 있다.
이에 반해, 도 18b는 원래의 덜 안전한 예외의 처리가 준비된 스택으로 피호출자 레지스터들이 푸시되고 있는 동안 안전한 도메인에서의 선점형 예외가 발생하는 예를 나타낸 것이다. 이 경우에는, 피호출자 레지스터들의 푸시를 계속하고 피호출자 레지스터들의 상태 보존이 완료할 때 안전한 예외로 전환하는 것이 더 효율적일 수 있다. 이것은, 피호출자 레지스터들의 상태 보존을 중단하고 이미 완료한 피호출자 레지스터들의 스태킹 동작을 반전하는 것이 단순히 상태 보존을 종료하는 것보다 더 시간이 길게 걸릴 수 있기 때문이다. 따라서, 상태 보존이 완료하는 경우 지연이 덜 존재하게 된다. 피호출자 레지스터의 보존이 완료하면 상태 보존 스테이터스 값이 0으로 설정됨으로써, 추가적인 상태 보존이 이미 발생하였으므로 추가적인 덜 안전한 테일 체인 예외가 발생할 때 이것을 건너뛸 수 있다는 것을 표시할 수 있다. 따라서, 상태 보존 스테이터스 값은 선점을 처리할 때에도 성능 향상을 가능하게 한다.
본 발명의 발명내용은 동시계류중인 US 출원번호 13/368,419 및 UK 특허 출원 번호 1217531.1에서 기술한 발명내용과 관련되며, 이들 두 개의 문헌의 전체내용은 참조용으로 본 명세서에 포함된다.
본 발명에 특정한 실시예를 설명하였지만, 본 발명은 이것에 한정되지 않으며 본 발명의 보호범위 내에서 다양한 변형 및 추가가 행해질 수 있다. 예를 들어, 본 발명의 보호범위를 벗어나지 않으면서, 이하의 종속항들의 특징과 독립항들의 특징의 다양한 조합이 행해질 수도 있다.

Claims (26)

  1. 프로그램 코드에 응답하여 데이터 처리 연산을 행하고, 예외처리를 제어하는 예외 제어회로를 구비한 처리회로와,
    데이터를 기억하고, 제 1 서브셋의 레지스터들 및 제 2 서브셋의 레지스터들을 포함하는 복수의 레지스터들과,
    데이터를 기억하고, 안전한 영역과 덜 안전한 영역을 포함하는 복수의 영역들을 포함하되, 상기 안전한 영역은 안전한 도메인에서 동작할 때 상기 처리회로에 의해 액세스가능하고 덜 안전한 도메인에서 동작할 때 상기 처리회로에 의해 액세스 불가능한 데이터를 기억하기 위한 것인 데이터 저장소를 구비하고,
    상기 처리회로에 의해 행해진 후순위 처리로부터의 초기 예외에 응답하여, 상기 예외 제어회로는, 이 예외에 대응하는 예외처리 루틴을 행하도록 상기 처리회로를 기동하기 전에 상기 제 1 서브셋의 레지스터들로부터의 데이터의 상태 보존을 행하도록 구성되고, 상기 예외처리 루틴은 상기 제 2 서브셋의 레지스터들로부터의 데이터의 상태 보존을 행할 책임이 있으며,
    상기 안전한 도메인으로부터 상기 덜 안전한 도메인으로의 천이를 일으키는 최초의 예외에 응답하여, 상기 후순위 처리가 상기 안전한 도메인에서 상기 처리회로에 의해 행해진 경우에, 상기 예외 제어회로는, 상기 덜 안전한 도메인에서 상기 예외처리 루틴을 행하도록 상기 처리회로를 기동하기 전에 상기 제 2 서브셋의 레지스터들로부터의 데이터의 추가적인 상태 보존을 행하도록 구성되고,
    상기 안전한 도메인으로부터 상기 덜 안전한 도메인으로의 천이를 일으키는 테일 체인 예외에 응답하여, 상기 예외 제어회로는 상기 추가적인 상태 보존을 행하지 않고 상기 예외처리 루틴을 행하도록 상기 처리회로를 기동하도록 구성되고, 상기 테일 체인 예외는 상기 최초의 예외가 처리된 후에 상기 후순위 처리로 복귀하기 전에 처리되는, 데이터 처리장치.
  2. 제 1항에 있어서,
    상기 최초의 예외에 응답하여, 상기 예외 제어회로는, 상기 예외처리 루틴을 행하도록 상기 제어회로를 기동하기 전에 상기 제 1 서브셋의 레지스터들 및 상기 제 2 서브셋의 레지스터들을 소거하도록 구성된 데이터 처리장치.
  3. 제 1항 또는 제 2항에 있어서,
    상기 예외처리 루틴을 행하도록 상기 처리회로를 기동하기 전에, 상기 예외 제어회로가 상기 추가적인 상태 보존을 행한 경우에, 상기 예외처리 루틴은 상기 제 2 서브셋의 레지스터들의 상태 보존을 행하지 않는 데이터 처리장치.
  4. 제 1항 또는 제 2항에 있어서,
    상기 예외처리 루틴을 행하도록 상기 처리회로를 기동하기 전에, 상기 예외 제어회로가 상기 추가적인 상태 보존을 행한 경우에는, 상기 예외처리 루틴이 상기 제 2 서브셋의 레지스터들의 상태 보존을 더 행하는 데이터 처리장치.
  5. 제 1항 내지 제 4항 중 어느 한 항에 있어서,
    상기 최초의 예외는 상기 초기 예외를 포함하는 데이터 처리장치.
  6. 제 1항 내지 제 5항 중 어느 한 항에 있어서,
    상기 최초의 예외는, 상기 초기 예외가 처리된 후 상기 후순위 처리로 복귀하기 전에 처리되는 테일 체인 예외를 포함하는 데이터 처리장치.
  7. 제 1항 내지 제 6항 중 어느 한 항에 있어서,
    상기 덜 안전한 도메인으로부터 상기 안전한 도메인으로의 천이를 일으키는 테일 체인 예외에 응답하여, 상기 예외 제어회로는, 상기 추가적인 상태 보존에서 보존된 데이터를 상기 제 2 서브셋의 레지스터들에 복원하지 않고 상기 예외처리 루틴을 기동하도록 상기 제어회로를 제어하도록 구성된 데이터 처리장치.
  8. 제 1항 내지 제 7항 중 어느 한 항에 있어서,
    상기 안전한 도메인으로부터 상기 덜 안전한 도메인으로의 천이를 일으키는 새로운 예외에 진입시에, 상기 예외 제어회로는, 상기 예외처리 루틴을 기동하기 전에, 상태 보존 스테이터스 값에 의존하여, 상기 추가적인 상태 보존을 행할지 여부를 판정하도록 구성된 데이터 처리장치.
  9. 제 8항에 있어서,
    상기 상태 보존 스테이터스 값은, 상기 덜 안전한 도메인에서 테일 체인 예외를 처리하기 전에 상기 추가적인 상태 보존을 행할 필요가 있는지 여부를 표시하는 데이터 처리장치.
  10. 제 8항 또는 제 9항에 있어서,
    상기 상태 보존 스테이터스 값은, 상기 후순위 처리의 중단과 상기 새로운 예외에의 진입 사이에서 적어도 한 개의 예외가 상기 덜 안전한 도메인에서 처리되었는지 여부를 표시하는 데이터 처리장치.
  11. 제 10항에 있어서,
    상기 새로운 예외에의 진입시에,
    (a) 상기 후순위 처리가 상기 안전한 도메인에서 처리되었고,

    (b) 상기 후순위 처리의 중단과 상기 새로운 예외에의 진입 사이에서 예외가 상기 덜 안전한 도메인에서 처리되지 않았다는 것을 상기 상태 보존 스테이터스 값이 표시하는 경우에,
    상기 예외 제어회로가 상기 추가적인 상태 보존을 행하도록 구성된 데이터 처리장치.
  12. 제 11항에 있어서,
    상기 예외 제어회로는, 상기 후순위 처리가 상기 안전한 도메인에서 행해졌는지 상기 덜 안전한 도메인에서 행해졌는지를 표시하는 보안 도메인 값을 설정하도록 구성된 데이터 처리장치.
  13. 제 8항 내지 제 12항 중 어느 한 항에 있어서,
    상기 예외 제어회로는, 상기 덜 안전한 도메인에 진입시에는 상기 상태 보존 스테이터스 값을 고정값으로 설정하고, 상기 안전한 도메인에 진입시에는 상기 상태 보존 스테이터스 값을 가변값으로 설정하도록 구성된 데이터 처리장치.
  14. 제 13항에 있어서,
    상기 덜 안전한 도메인에서의 예외로부터 복귀시에, 상기 예외 제어회로는, 상기 상태 보존 스테이터스 값이 여전히 고정값을 갖는지 여부를 검사하고, 상기 상태 보존 스테이터스 값이 상기 고정값을 갖지 않는 경우에는 에러를 기동하도록 구성된 데이터 처리장치.
  15. 제 8항 내지 제 14항 중 어느 한 항에 있어서,
    상기 상태 보존 스테이터스 값은 고정값을 갖고,
    상기 덜 안전한 도메인에서의 예외로부터의 복귀시에, 상기 예외 제어회로는 상기 상태 보존 스테이터스 값에 무관하게 예외처리를 제어하도록 구성된 데이터 처리장치.
  16. 제 8항 내지 제 15항 중 어느 한 항에 있어서,
    상기 상태 보존 스테이터스 값은, 테일 체인 예외들 사이에서 전환될 때 도메인들 사이에서의 가장 최근의 천이가 상기 덜 안전한 도메인으로부터 상기 안전한 도메인으로의 천이이었는지 여부를 표시하는 데이터 처리장치.
  17. 제 8항 내지 제 16항 중 어느 한 항에 있어서,
    상기 레지스터들은 상기 예외처리 루틴으로부터의 복귀를 제어하기 위한 예외 복귀값을 기억하는 링크 레지스터를 구비한 데이터 처리장치.
  18. 제 17항에 있어서,
    예외에의 진입시에, 상기 예외 제어회로는, 유효한 명령 어드레스에 대응하지 않는 더미 예외 복귀 어드레스로 상기 링크 레지스터를 설정하도록 구성되고,
    상기 예외처리 루틴은 상기 링크 레지스터에 설정된 어드레스로의 분기를 포함하고,
    상기 링크 레지스터에 표시된 상기 더미 예외 복귀 어드레스로의 분기에 응답하여, 상기 예외 제어회로는, 상기 처리회로를 상기 후순위 처리로 복귀하도록 하기 전에, 상기 상태 보존에서 보존된 데이터를 복권하기 위한 상태 복원 처리를 행하도록 구성된 데이터 처리장치.
  19. 제 17항 또는 제 18항에 있어서,
    상기 상태 보존 스테이터스 값은 상기 더미 예외 복귀 어드레스의 일부에 표시되는 데이터 처리장치.
  20. 제 1항 내지 제 19항 중 어느 한 항에 있어서,
    상기 제 2 서브셋의 레지스터들의 상기 추가적인 상태 보존을 행하는 동안, 상기 최초의 예외보다 높은 우선순위를 갖는 선점형 예외가 발생한 경우에, 상기 예외 제어회로는, 상기 선점형 예외의 예외처리 루틴을 처리하도록 상기 처리회로를 기동하기 전에 상기 추가적인 상태 보존을 완료하도록 구성된 데이터 처리장치.
  21. 제 20항에 있어서,
    상기 추가적인 상태 보존의 완료시에, 상기 예외 제어회로는, 상기 추가적인 상태 보존이 행해졌다는 것을 표시하도록 상기 상태 보존 스테이터스 값을 설정하도록 구성된 데이터 처리장치.
  22. 제 21항에 있어서,
    상기 선점형 예외 후에 행해지는, 상기 안전한 도메인으로부터 상기 덜 안전한 도메인으로의 천이를 일으키는 테일 체인 예외에 응답하여, 상기 예외 제어회로는, 상기 추가적인 상태 보존이 이미 행해졌다는 것을 상기 상태 보존 스테이터스 값이 표시하는 경우에, 상기 추가적인 상태 보존을 행하지 않고 상기 예외처리 루틴을 행하도록 상기 제어회로를 기동하도록 구성된 데이터 처리장치.
  23. 제 1항 내지 제 22항 중 어느 한 항에 있어서,
    상기 데이터 저장소는 안전한 스택과 덜 안전한 스택을 포함하는 복수의 스택을 구비한 데이터 처리장치.
  24. 제 23항에 있어서,
    상기 제 1 서브셋의 레지스터들의 상태 보존과 상기 제 2 서브셋의 레지스터들의 추가적인 상태 보존에서, 상기 예외 제어회로는, 상기 후순위 처리를 행하는 동안 상기 초기 예외가 발생할 때 상기 처리회로가 동작하고 있었던 현재 도메인에 대응하는 상기 안전한 스택 및 상기 덜 안전한 스택 중에서 한 개에 데이터를 기억하도록 구성된 데이터 처리장치.
  25. 프로그램 코드에 응답하여 데이터 처리 연산을 행하고, 예외처리를 제어하는 예외제어수단을 구비한 처리수단과,
    데이터를 기억하고, 제 1 서브셋의 레지스터수단들 및 제 2 서브셋의 레지스터수단들을 포함하는 복수의 레지스터수단들과,
    데이터를 기억하고, 안전한 영역과 덜 안전한 영역을 포함하는 복수의 영역들을 포함하되, 상기 안전한 영역은 안전한 도메인에서 동작할 때 상기 처리수단에 의해 액세스가능하고 덜 안전한 도메인에서 동작할 때 상기 처리수단에 의해 액세스 불가능한 데이터를 기억하기 위한 것인 데이터 저장수단을 구비하고,
    상기 처리수단에 의해 행해진 후순위 처리로부터의 초기 예외에 응답하여, 상기 예외 제어수단은, 이 예외에 대응하는 예외처리 루틴을 행하도록 상기 처리수단을 기동하기 전에 상기 제 1 서브셋의 레지스터수단들로부터의 데이터의 상태 보존을 행하도록 구성되고, 상기 예외처리 루틴은 상기 제 2 서브셋의 레지스터수단들로부터의 데이터의 상태 보존을 행할 책임이 있으며,
    상기 안전한 도메인으로부터 상기 덜 안전한 도메인으로의 천이를 일으키는 최초의 예외에 응답하여, 상기 후순위 처리가 상기 안전한 도메인에서 상기 처리수단에 의해 행해진 경우에, 상기 예외 제어수단은, 상기 덜 안전한 도메인에서 상기 예외처리 루틴을 행하도록 상기 처리수단을 기동하기 전에 상기 제 2 서브셋의 레지스터수단들로부터의 데이터의 추가적인 상태 보존을 행하도록 구성되고,
    상기 안전한 도메인으로부터 상기 덜 안전한 도메인으로의 천이를 일으키는 테일 체인 예외에 응답하여, 상기 예외 제어수단은 상기 추가적인 상태 보존을 행하지 않고 상기 예외처리 루틴을 행하도록 상기 처리수단을 기동하도록 구성되고, 상기 테일 체인 예외는 상기 최초의 예외가 처리된 후에 상기 후순위 처리로 복귀하기 전에 처리되는, 데이터 처리장치.
  26. 프로그램 코드에 응답하여 데이터 처리 연산을 행하고, 예외처리를 제어하는 예외 제어회로를 구비한 처리회로와, 데이터를 기억하고, 제 1 서브셋의 레지스터들 및 제 2 서브셋의 레지스터들을 포함하는 복수의 레지스터들과, 데이터를 기억하고, 안전한 영역과 덜 안전한 영역을 포함하는 복수의 영역들을 포함하되, 상기 안전한 영역은 안전한 도메인에서 동작할 때 상기 처리회로에 의해 액세스가능하고 덜 안전한 도메인에서 동작할 때 상기 처리회로에 의해 액세스 불가능한 데이터를 기억하기 위한 것인 데이터 저장소를 구비한 데이터 처리장치의 데이터 처리방법으로서,
    상기 처리회로에 의해 행해진 후순위 처리로부터의 초기 예외에 응답하여, 상기 예외 제어회로가, 이 예외에 대응하는 예외처리 루틴을 행하도록 상기 처리회로를 기동하기 전에 상기 제 1 서브셋의 레지스터들로부터의 데이터의 상태 보존을 행하는 단계를 포함하고, 상기 예외처리 루틴은 상기 제 2 서브셋의 레지스터들로부터의 데이터의 상태 보존을 행할 책임이 있으며,
    상기 데이터 처리방법은,
    상기 안전한 도메인으로부터 상기 덜 안전한 도메인으로의 천이를 일으키는 최초의 예외에 응답하여, 상기 후순위 처리가 상기 안전한 도메인에서 상기 처리회로에 의해 행해진 경우에, 상기 예외 제어회로가, 상기 덜 안전한 도메인에서 상기 예외처리 루틴을 행하도록 상기 처리회로를 기동하기 전에 상기 제 2 서브셋의 레지스터들로부터의 데이터의 추가적인 상태 보존을 행하는 단계와,
    상기 안전한 도메인으로부터 상기 덜 안전한 도메인으로의 천이를 일으키는 테일 체인 예외에 응답하여, 상기 예외 제어회로가, 상기 추가적인 상태 보존을 행하지 않고 상기 예외처리 루틴을 행하도록 상기 처리회로를 기동하는 단계를 포함하고, 상기 테일 체인 예외는 상기 최초의 예외가 처리된 후에 상기 후순위 처리로 복귀하기 전에 처리되는, 데이터 처리방법.
KR1020157008995A 2012-10-01 2013-08-07 안전한 도메인과 덜 안전한 도메인을 갖는 데이터 처리장치에서의 예외처리 KR102075372B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB201217531A GB201217531D0 (en) 2012-10-01 2012-10-01 ARMv7-M Asset Protection Proposal
GB1217531.1 2012-10-01
US13/680,298 2012-11-19
US13/680,298 US9116711B2 (en) 2012-02-08 2012-11-19 Exception handling in a data processing apparatus having a secure domain and a less secure domain
PCT/GB2013/052108 WO2014053804A1 (en) 2012-10-01 2013-08-07 Exception handling in a data processing apparatus having a secure domain and a less secure domain

Publications (2)

Publication Number Publication Date
KR20150065715A true KR20150065715A (ko) 2015-06-15
KR102075372B1 KR102075372B1 (ko) 2020-02-11

Family

ID=48903966

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157008995A KR102075372B1 (ko) 2012-10-01 2013-08-07 안전한 도메인과 덜 안전한 도메인을 갖는 데이터 처리장치에서의 예외처리

Country Status (8)

Country Link
US (2) US9116711B2 (ko)
EP (1) EP2888692B1 (ko)
JP (1) JP6209611B2 (ko)
KR (1) KR102075372B1 (ko)
CN (1) CN104685508B (ko)
IL (1) IL237282B (ko)
MY (1) MY172572A (ko)
WO (1) WO2014053804A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200005568A (ko) * 2017-05-05 2020-01-15 에이알엠 리미티드 자격들의 이용을 관리하는 장치 및 방법

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9116711B2 (en) 2012-02-08 2015-08-25 Arm Limited Exception handling in a data processing apparatus having a secure domain and a less secure domain
US9213828B2 (en) 2012-02-08 2015-12-15 Arm Limited Data processing apparatus and method for protecting secure data and program code from non-secure access when switching between secure and less secure domains
US9477834B2 (en) 2012-02-08 2016-10-25 Arm Limited Maintaining secure data isolated from non-secure access when switching between domains
KR102218202B1 (ko) * 2014-08-01 2021-02-23 삼성전자주식회사 반도체 장치
KR102327334B1 (ko) * 2014-12-31 2021-11-17 삼성전자주식회사 디스플레이 컨트롤러 및 이를 포함하는 반도체 집적회로 장치
US20160381050A1 (en) 2015-06-26 2016-12-29 Intel Corporation Processors, methods, systems, and instructions to protect shadow stacks
GB2541400B (en) * 2015-08-17 2017-11-15 Advanced Risc Mach Ltd Tracing of exception handling events
US10394556B2 (en) 2015-12-20 2019-08-27 Intel Corporation Hardware apparatuses and methods to switch shadow stack pointers
US10430580B2 (en) 2016-02-04 2019-10-01 Intel Corporation Processor extensions to protect stacks during ring transitions
EP3226168A1 (en) * 2016-03-31 2017-10-04 Nxp B.V. Electronic device and protection method
CN106778365B (zh) * 2016-12-01 2019-10-18 杭州中天微系统有限公司 实现延时压栈的装置及处理器
CN108614663B (zh) * 2016-12-09 2021-05-04 北京兆易创新科技股份有限公司 基于NAND flash的数据处理方法和装置
GB2563010B (en) 2017-05-25 2019-12-25 Advanced Risc Mach Ltd An apparatus and method for managing a capability domain
GB2577878B (en) 2018-10-08 2020-11-11 Advanced Risc Mach Ltd Transition disable indicator
GB2579617B (en) * 2018-12-06 2021-01-27 Advanced Risc Mach Ltd An apparatus and method for handling exception causing events
US11216280B2 (en) * 2019-11-26 2022-01-04 Arm Limited Exception interception
GB2589896B (en) * 2019-12-11 2022-07-27 Advanced Risc Mach Ltd An apparatus and method for handling exceptions
GB2589895B (en) 2019-12-11 2022-03-16 Advanced Risc Mach Ltd Intermodal calling branch instruction
GB2589897B (en) * 2019-12-11 2022-03-23 Advanced Risc Mach Ltd Domain transition disable configuration parameter
GB2592069B (en) * 2020-02-17 2022-04-27 Advanced Risc Mach Ltd Address calculating instruction
US11175926B2 (en) * 2020-04-08 2021-11-16 Microsoft Technology Licensing, Llc Providing exception stack management using stack panic fault exceptions in processor-based devices
US11960730B2 (en) * 2021-06-28 2024-04-16 Western Digital Technologies, Inc. Distributed exception handling in solid state drives

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6363474B1 (en) * 1999-06-30 2002-03-26 Bull Hn Information Systems Inc. Process switching register replication in a data processing system
US20040139346A1 (en) * 2002-11-18 2004-07-15 Arm Limited Exception handling control in a secure processing system
US20040153672A1 (en) * 2002-11-18 2004-08-05 Arm Limited Switching between secure and non-secure processing modes

Family Cites Families (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4177514A (en) 1976-11-12 1979-12-04 General Electric Company Graph architecture information processing system
US4519032A (en) 1982-06-09 1985-05-21 At&T Bell Laboratories Memory management arrangement for microprocessor systems
US4488227A (en) 1982-12-03 1984-12-11 Honeywell Information Systems Inc. Program counter stacking method and apparatus for nested subroutines and interrupts
US5590332A (en) * 1995-01-13 1996-12-31 Baker; Henry G. Garbage collection, tail recursion and first-class continuations in stack-oriented languages
JPH0991154A (ja) 1995-09-25 1997-04-04 Hitachi Constr Mach Co Ltd スタック割り当て方法、制御装置
US5812850A (en) * 1995-11-13 1998-09-22 Object Technology Licensing Corp. Object-oriented symbolic debugger using a compiler driven database and state modeling to control program execution
JPH10228421A (ja) 1997-02-14 1998-08-25 Nec Ic Microcomput Syst Ltd メモリアクセス制御回路
JP3716604B2 (ja) 1998-03-24 2005-11-16 富士電機機器制御株式会社 情報処理装置
CA2309627A1 (en) 1998-09-25 2000-04-06 Hughes Electronics Corporation An apparatus for providing a secure processing environment
US7213247B1 (en) 2000-01-10 2007-05-01 Wind River Systems, Inc. Protection domains for a computer operating system
US6993663B1 (en) 2000-08-31 2006-01-31 Microsoft Corporation Input buffer overrun checking and prevention
JP3786575B2 (ja) 2000-11-20 2006-06-14 株式会社ルネサステクノロジ データ処理装置
GB2369464B (en) 2000-11-27 2005-01-05 Advanced Risc Mach Ltd A data processing apparatus and method for saving return state
EP1331539B1 (en) 2002-01-16 2016-09-28 Texas Instruments France Secure mode for processors supporting MMU and interrupts
US20040003377A1 (en) 2002-06-28 2004-01-01 Di Loreto Michael A. Converting byte code instructions to a new instruction set
GB0226906D0 (en) 2002-11-18 2002-12-24 Advanced Risc Mach Ltd Virtual to physical memory address mapping within a system having a secure domain and a non-secure domain
GB0226874D0 (en) 2002-11-18 2002-12-24 Advanced Risc Mach Ltd Switching between secure and non-secure processing modes
GB2396930B (en) 2002-11-18 2005-09-07 Advanced Risc Mach Ltd Apparatus and method for managing access to a memory
WO2004046916A2 (en) * 2002-11-18 2004-06-03 Arm Limited Exception types within a secure processing system
US20040168047A1 (en) 2003-02-24 2004-08-26 Matsushita Electric Industrial Co., Ltd. Processor and compiler for creating program for the processor
JP2004280801A (ja) 2003-02-24 2004-10-07 Matsushita Electric Ind Co Ltd プロセッサおよびこのプロセッサ用のプログラムを生成するコンパイラ装置
EP1480046A1 (en) * 2003-05-23 2004-11-24 Interuniversitair Microelektronica Centrum ( Imec) A method for determining the current-voltage characteristic of a snap-back device
US20050044292A1 (en) 2003-08-19 2005-02-24 Mckeen Francis X. Method and apparatus to retain system control when a buffer overflow attack occurs
US7120794B2 (en) 2003-10-29 2006-10-10 Qualcomm Inc. System for invoking a privileged function in a device
US7607133B2 (en) * 2004-02-11 2009-10-20 Arm Limited Interrupt processing control
US7401210B2 (en) * 2005-03-30 2008-07-15 Arm Limited Selecting subroutine return mechanisms
US7665143B2 (en) 2005-05-16 2010-02-16 Microsoft Corporation Creating secure process objects
US7917753B2 (en) 2005-05-16 2011-03-29 Texas Instruments Incorporated Transferring control between programs of different security levels
JP4519738B2 (ja) 2005-08-26 2010-08-04 株式会社東芝 メモリアクセス制御装置
US8959339B2 (en) 2005-12-23 2015-02-17 Texas Instruments Incorporated Method and system for preventing unauthorized processor mode switches
US8621607B2 (en) 2006-05-18 2013-12-31 Vmware, Inc. Computational system including mechanisms for tracking taint
US20070294675A1 (en) * 2006-06-20 2007-12-20 Transitive Limited Method and apparatus for handling exceptions during binding to native code
US7681000B2 (en) 2006-07-10 2010-03-16 Silverbrook Research Pty Ltd System for protecting sensitive data from user code in register window architecture
DE602007006215D1 (de) 2006-09-06 2010-06-10 Silicon Hive Bv Datenverarbeitungsschaltung mit mehreren anweisungchaltung und scheduling-verfahren für eine solche datenschaltung
GB2448149B (en) 2007-04-03 2011-05-18 Advanced Risc Mach Ltd Protected function calling
GB2448151B (en) * 2007-04-03 2011-05-04 Advanced Risc Mach Ltd Memory domain based security control within data processing systems
WO2010004240A1 (en) 2008-07-10 2010-01-14 Cambridge Consultants Limited Data processing apparatus, for example using modes
US8578483B2 (en) 2008-07-31 2013-11-05 Carnegie Mellon University Systems and methods for preventing unauthorized modification of an operating system
US8051467B2 (en) 2008-08-26 2011-11-01 Atmel Corporation Secure information processing
KR101537018B1 (ko) 2008-10-01 2015-07-17 삼성전자주식회사 보안 메모리 인터페이스, 이를 포함하는 시스템 및 스마트카드
JP2010186386A (ja) 2009-02-13 2010-08-26 Oki Semiconductor Co Ltd プロセッサ
GB2471138B (en) 2009-06-19 2014-08-13 Advanced Risc Mach Ltd Handling integer and floating point registers during a context switch
GB2478733B (en) * 2010-03-15 2013-08-14 Advanced Risc Mach Ltd Apparatus and method for handling exception events
GB2482701C (en) 2010-08-11 2018-12-26 Advanced Risc Mach Ltd Illegal mode change handling
US9202071B2 (en) 2012-02-08 2015-12-01 Arm Limited Exception handling in a data processing apparatus having a secure domain and a less secure domain
US9116711B2 (en) 2012-02-08 2015-08-25 Arm Limited Exception handling in a data processing apparatus having a secure domain and a less secure domain
US9213828B2 (en) 2012-02-08 2015-12-15 Arm Limited Data processing apparatus and method for protecting secure data and program code from non-secure access when switching between secure and less secure domains
US9477834B2 (en) 2012-02-08 2016-10-25 Arm Limited Maintaining secure data isolated from non-secure access when switching between domains

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6363474B1 (en) * 1999-06-30 2002-03-26 Bull Hn Information Systems Inc. Process switching register replication in a data processing system
US20040139346A1 (en) * 2002-11-18 2004-07-15 Arm Limited Exception handling control in a secure processing system
US20040153672A1 (en) * 2002-11-18 2004-08-05 Arm Limited Switching between secure and non-secure processing modes
KR20050086673A (ko) * 2002-11-18 2005-08-30 에이알엠 리미티드 보안모드와 비보안모드 사이의 프로세서 전환

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200005568A (ko) * 2017-05-05 2020-01-15 에이알엠 리미티드 자격들의 이용을 관리하는 장치 및 방법

Also Published As

Publication number Publication date
US20130205125A1 (en) 2013-08-08
WO2014053804A1 (en) 2014-04-10
IL237282A0 (en) 2015-04-30
US9116711B2 (en) 2015-08-25
EP2888692A1 (en) 2015-07-01
JP2015530672A (ja) 2015-10-15
KR102075372B1 (ko) 2020-02-11
US10083040B2 (en) 2018-09-25
US20150317474A1 (en) 2015-11-05
MY172572A (en) 2019-12-03
EP2888692B1 (en) 2018-12-05
CN104685508B (zh) 2017-09-29
CN104685508A (zh) 2015-06-03
IL237282B (en) 2018-04-30
JP6209611B2 (ja) 2017-10-04

Similar Documents

Publication Publication Date Title
KR102075372B1 (ko) 안전한 도메인과 덜 안전한 도메인을 갖는 데이터 처리장치에서의 예외처리
US10025923B2 (en) Data processing apparatus and method for protecting secure data and program code from non-secure access when switching between secure and less secure domains
EP2812836B1 (en) Exception handling in a data processing apparatus having a secure domain and a less secure domain
EP2888691B1 (en) Data processing apparatus and method using secure domain and less secure domain
US9202071B2 (en) Exception handling in a data processing apparatus having a secure domain and a less secure domain
US10210349B2 (en) Data processing apparatus and method using secure domain and less secure domain
US20220366037A1 (en) Domain transition disable configuration parameter
US12067400B2 (en) Intermodal calling branch instruction

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant