NOVA Microhypervisor on ARMv8-A
FOSDEM 2020 Udo Steinberg
BedRock Systems, Inc.
February 2, 2020
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 1 / 17
NOVA Microhypervisor on ARMv8-A FOSDEM 2020 Udo Steinberg BedRock - - PowerPoint PPT Presentation
NOVA Microhypervisor on ARMv8-A FOSDEM 2020 Udo Steinberg BedRock Systems, Inc. February 2, 2020 Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 1 / 17 Outline NOVA Microhypervisor 1 ARMv8-A
BedRock Systems, Inc.
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 1 / 17
1
2
3
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 2 / 17
OS Kernel App App OS Kernel App App
VMM VMM
VMM VMM VMM OS Kernel OS Kernel OS Kernel App App App App App App
Ring3 (H) Ring3 (G) Ring0 (G) Ring0 (H)
App App
Partition Manager
1Ignoring SMM and Firmware, which are beyond our control
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 3 / 17
EL2 EL3
Monitor
EL0 EL1
App VMM VMM OS Kernel App App OS Kernel App App
secure non-secure
Host Guest VM Guest VM TEE ARM Hardware NOVA Microhypervisor
Partition Manager
1Ignoring TF-A, Monitor and TEE, which are beyond our control
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 4 / 17
1 2 3 4 5 6 7
PD Capability SC Capability PT Capability
1 2 3 4 5 6
PD Capability
7
PT Capability EC Capability PT Capability PT Capability PDA PT PT EC SC
Object Space Object Space
PDB Protection Domain A Protection Domain B
Selector Selector
2 6
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 5 / 17
UTCB UTCB SC UTCB SC UTCB P PDB ECcallee PDB ECcallee ECcaller PDA ECcaller PDA
NOVA Microhypervisor NOVA Microhypervisor ipc reply (MTD); ipc call (P, MTD);
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 6 / 17
UTCB UTCB SC SC VMCB VMCB P VMM EChandler VMM EChandler VM
NOVA Microhypervisor NOVA Microhypervisor
VM vCPU vCPU
call (P, MTDARCH); VMRESUME/ERET VMEXIT/EXCEPTION ipc reply (MTDARCH);
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 7 / 17
GIC TMR EL2 HCR EL2 HPFAR EL2 ESR FAR EL2 ELR SPSR EL2 IDR EL1 SCTLR EL1 VBAR EL1 MAIR EL1 TCR EL1 TTBR EL1 AFSR EL1 ESR FAR EL1 ELR SPSR EL1 IDR EL1 SP A32 DACR IFSR A32 SPSR EL0 IDR EL0 SP FPR GPR POISON
1 2 3 4 7 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 30 31
FPU TSC STA INJ CTRL QUAL LBR DR CR IDTR GDTR LDTR TR CS/SS FS/GS DS/ES FLAGS IP GPR8−15 GPR4−7 GPR0−3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 31
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 8 / 17
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 9 / 17
GICD GICR
SPI PPI EOI vINTID
GICH GICV
program inject
vIRQ EOI pIRQ
pINTID vINTID→pINTID deactivate
GICC
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 10 / 17
System Counter CNTVOFF CNTVCT CNTPCT
System Time Distribution
–
managed by Microhypervisor
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 11 / 17
VMID
0x860 0x404 0x405
VMID:VA ⇒ PA:PERM Miss Fill Miss Fill VA PA VMID Stream Mapping Groups Translation Contexts Translation Lookaside Buffer TTBR TTBR SID
VMID:VA ⇒ PA:PERM VMID:VA ⇒ PA:PERM DMA Page Tables
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 12 / 17
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 13 / 17
Core Core Display SD USB WiFi
Core Core UART
vCPU vCPU vCPU vCPU
VMM VMM VMM UART Multiplexer Virtual Ethernet Switch Partition Manager NOVA Microhypervisor UART Driver
vETH vETH vETH vUART vUART vUART vGIC vGIC vGIC
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 14 / 17
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 15 / 17
/* * \arg{v1} "x" (Vint v1) * \arg{v2} "y" (Vint v2) * \pre empSP * \post{}[Vint (trim 32 (v1+v2))] empSP */ auto add_func (uint32 x, uint32 y) { return x + y; }
foo cpp.v foo cpp spec.v coqc cpp2v foo.cpp
Source Code clang Plugin Code Specifications AST Coq Representation
foo cpp proof.vo Proof Automation C++ Semantics
Machine-Checked Proof
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 16 / 17
Udo Steinberg (BedRock Systems, Inc.) NOVA Microhypervisor on ARMv8-A February 2, 2020 17 / 17