Processor Privilege-Levels How the x86 processor accomplishes transitions among its four distinct privilege-levels.

Slides:



Advertisements
Similar presentations
Memory Management Unit
Advertisements

Processor Privilege-Levels
Ring-transitions for EM64T How the CPU can accomplish transitions among its differing privilege-levels in 64-bit mode.
IA32 Paging Scheme Introduction to the Pentium’s support for “virtual” memory.
Task-Switching How the x86 processor assists with context-switching among multiple program-threads.
Interrupts in Protected-Mode Writing a protected-mode interrupt-service routine for the timer-tick interrupt.
Interrupts in Protected-Mode Writing a protected-mode interrupt-service routine for the timer-tick interrupt.
Processor Exceptions A survey of the x86 exceptions and mechanism for handling faults, traps, and aborts.
EM64T ‘fast’ system-calls A look at the requirements for using Intel’s ‘syscall’ and ‘sysret’ instructions in 64-bit mode.
Page-Faults in Linux How can we study the handling of page-fault exceptions?
Exceptions and Interrupts How does Linux handle service- requests from the cpu and from the peripheral devices?
Interrupts in Protected-Mode Writing a protected-mode interrupt-service routine for the timer-tick interrupt.
The various x86 ‘modes’ On understanding key differences among the processor’s several execution-architectures.
Architectural Support for OS March 29, 2000 Instructor: Gary Kimura Slides courtesy of Hank Levy.
Deferred segment-loading An exercise on implementing the concept of ‘load-on-demand’ for the program-segments in an ELF executable file.
Venturing into protected-mode A first look at the CPU registers and instructions which provide the essential supporting infrastructure.
X86 segmentation, page tables, and interrupts 3/17/08 Frans Kaashoek MIT
Processor Exceptions A survey of the x86 exceptions and mechanism for handling faults, traps, and aborts.
CS-550 (M.Soneru): Protection and Security - 1 [SaS] 1 Protection and Security.
Task-Switching How the x86 processor assists with context-switching among multiple program-threads.
Executing an ELF executable
The kernel’s task list Introduction to process descriptors and their related data-structures for Linux kernel version
Segment-registers’ hidden bits A look at how segmentation attributes are cached within the CPU’s segment-registers.
Deferred segment-loading An exercise on implementing the concept of ‘load-on-demand’
Venturing into protected-mode
A ‘protected-mode’ exploration A look at the steps needed to build segment-descriptors for displaying a message while in protected-mode.
Microprocessor Systems Design I Instructor: Dr. Michael Geiger Fall 2012 Lecture 15: Protected mode intro.
8086 emulation Using Virtual-8086 mode to execute real-mode procedures in a protected-mode environment.
Interrupts in Protected-Mode Writing a protected-mode interrupt-service routine for the timer-tick interrupt.
System Calls 1.
80386DX.
Microprocessor system architectures – IA32 segmentation Jakub Yaghob.
Multitasking Mr. Mahendra B. Salunke Asst. Prof. Dept. of Computer Engg., STES SITS, Narhe, Pune-41 STES Sinhgad Institute of Tech. & Science Dept. of.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Protection (Chapter 14)
80386DX.
CSNB374: Microprocessor Systems Chapter 5: Procedures and Interrupts.
Microprocessors The ia32 User Instruction Set Jan 31st, 2002.
Virtual 8086 Mode  The supports execution of one or more 8086, 8088, 80186, or programs in an protected-mode environment.  An 8086.
Operating Systems 1 K. Salah Module 1.2: Fundamental Concepts Interrupts System Calls.
Microprocessor system architectures – IA32 tasks Jakub Yaghob.
Segment Descriptor Segments are areas of memory defined by a programmer and can be a code, data or stack segment. In segments need not be all the.
80386DX.
1 Microprocessors CSE Protected Mode Memory Addressing Remember using real mode addressing we were previously able to address 1M Byte of memory.
Page Replacement Implementation Issues Text: –Tanenbaum ch. 4.7.
Lecture 5 Rootkits Hoglund/Butler (Chapters 1-3).
Introduction to Intel IA-32 and IA-64 Instruction Set Architectures.
Microprocessor and Assembly Language Addressing Models
Information Security - 2. Task Switching Every process has an associated Task State Segment, whose starting point is stored in the Task register. A task.
Privilege Check for Control Transfer(Code Access) Control transfers (except interrupts) are accomplished by the instructions JMP, CALL, and RET The "near"
Chapter 12 Processor Structure and Function. Central Processing Unit CPU architecture, Register organization, Instruction formats and addressing modes(Intel.
Stack Operations Dr. Hadi AL Saadi.
An Interrupt is either a Hardware generated CALL (externally derived from a hardware signal) OR A Software-generated CALL (internally derived from.
Microprocessor and Assembly Language
Anton Burtsev February, 2017
Privilege Levels.
Microprocessor and Assembly Language
Protection UQ: Explain the protection mechanism of X86 Intel family microprocessor(10 Marks)
x86 segmentation, page tables, and interrupts
System Segment Descriptor
Page Replacement Implementation Issues
Introduction to Intel IA-32 and IA-64 Instruction Set Architectures
Microprocessor and Assembly Language Addressing Models
Page Replacement Implementation Issues
Architectural Support for OS
Chapter 6 - Procedures and Macros
Architectural Support for OS
Computer Architecture
Where is all the knowledge we lost with information? T. S. Eliot
Computer Architecture and System Programming Laboratory
Procedures and Macros.
Presentation transcript:

Processor Privilege-Levels How the x86 processor accomplishes transitions among its four distinct privilege-levels

Rationale The usefulness of protected-mode derives from its ability to enforce restrictions upon software’s ability to perform certain actions Four distinct privilege-levels are supported Organizing concept: concentric “rings” Innermost ring has greatest privileges, and privileges diminish as rings move outward

Four Privilege Rings Ring 3 Ring 2 Ring 1 Ring 0 Least-trusted level Most-trusted level

Suggested purposes Ring0: operating system kernel Ring1: operating system services Rin2: custom extensions Ring3: ordinary user applications

Unix/Linux and Windows Ring0: operating system Ring1: unused Ring2: unused Ring3: application programs

Legal Ring-Transitions A transition from an outer ring to an inner ring is only possible by using a special control-structure (known as a call gate) The ‘gate’ is defined by a data-structure located in a system memory-segment normally inaccessible to modifications A transition from an inner ring to an outer ring is not nearly so strictly controlled

Data-sharing Procedure-calls typically require that two separate routines share some data-values (e.g., parameter-values get passed from the calling routine to the called routine) To support reentrancy and recursion, the processor’s stack is frequently used as a shared-access storage-area But among routines with different levels of privilege, this could create “security hole”

An example senario Say a procedure that executes in ring 3 calls a procedure that executes in ring 2 The ring 2 procedure uses a portion of its stack-area to create ‘automatic’ variables that it uses for temporary workspace Upon return, the ring 3 procedure would be able to examine whatever values are left behind in this ring 2 workspace

Data Isolation To guard against unintentional sharing of privileged information, different stacks are provided at each distinct privilege-level Accordingly, any transition from one ring to another must necessarily be accompanied by a ‘stack-switch’ operation The CPU provides for automatic switching of stacks and copying of parameter-values

Call-Gate Descriptors offset[ ] code-selectoroffset[ ] gate type P0 DPLDPL parameter count Legend: P=present (1=yes, 0=no) DPL=Descriptor Prvilege Level (0,1,2,3) code-selector (specifies memory-segment containing procedure code) offset (specifies the procedure’s entry-point within its code-segment) parameter count (specifies how many parameter-values will be copied) gate-type (‘0x4’ means a 16-bit call-gate, ‘0xC’ means a 32-bit call-gate)

An Interprivilege Call When a lesser privileged routine wants to invoke a more privileged routine, it does so by using a ‘far call’ machine-instruction In as86 assembly language: callf#0, #callgate-selector 0x9A (ignored)callgate-selector opcode offset-field segment-field

What does the CPU do? When CPU fetches a far-call instruction, it looks up that instruction’s specified descriptor If it’s a call-gate descriptor, and if access is allowed (i.e., CPL  DPL), then the CPU will perform a complex series of actions to accomplish a requested ring-transition CPL (Current Privilege Level) is based on least significant 2-bits in CS (also in SS)

Series of CPU Actions - pushes the current SS:SP register-values onto a new stack-segment - copies the specified number of parameters from the old stack onto the new stack - pushes the updated CS:IP register-values onto the new stack - loads new values into registers CS:IP (from the callgate-descriptor) and into SS:SP

The missing info? Where do the new values for SS:SP come from? (They’re not found in the callgate) They’re from a special system-segment, called the TSS (Task State Segment) The CPU locates its TSS by referring to the value in register TR (Task Register)

Diagram of Relationships TASK STATE SEGMENT NEW STACK SEGMENT stack-pointer OLD STACK SEGMENT params SS:SP Descriptor-Table gate-descriptor call-instruction TSS-descriptor TR CS:IP GDTR old code-segment new code-segment called procedure

Return to an Outer Ring Use the far-return instruction: retf –Restores CS:IP from current stack –Restores SS:SP from current stack Or use the far-return instruction: retf n –Restores CS:IP from current stack –Discards n bytes from stack (parameters) –Restores SS:IP from current stack

Demo-program: ‘tryring1.s’ We have created a short program to show how this ring-transition mechanism works It enters protected-mode (at ring0) It ‘returns’ to a procedure in ring1 Procedure shows a confirmation-message The ring1 procedure then ‘calls’ to ring0 The ring0 procedure exits protected-mode

Data-structures needed Global Descriptor Table needs to contain the protected-mode segment-descriptors and the call-gate descriptor –Code-segments for Ring0 and Ring1 –Stack-segments for Ring0 and Ring1 –Data-segment (for Ring1 to write to VRAM) –Task-State Segment (for ring0 SS:SP) –Task-Gate and TSS Descriptors (for ‘callf’)

In-class Exercise #1 Modify the ‘tryring1.s’ demo so that it uses a 32-bit call-gate and a 32-bit TSS TSS for (16-bits) SP1 SP2 SS SP0 SS0 SS1 ESP0 ESP1 ESP2 SS0 SS1 SS2 TSS for (32-bits) ……

System Segment-Descriptors Base[ ]Limit[ ] Limit [19..16] Base[ ]Base[ ]type DPLDPL P0 0 = reserved 1 = 16-bit TSS (available) 2 = LDT 3 = 16-bit TSS (busy) type 8 = reserved 9 = 32-bit TSS (available) A = reserved B = 32-bit TSS (busy) S-bit is zero

In-class exercise #2 Modify the ‘tryring1.s’ demo so that it first enters ring2, then calls to ring1 from ring2 (but returns to ring2), and then finally calls to ring0 in order to exit protected-mode How many stack-segments do you need? How many code-segment descriptors? How many VRAM-segment descriptors?