cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

ppc-spapr-uv-hcalls.txt (3524B)


      1On PPC64 systems supporting Protected Execution Facility (PEF), system
      2memory can be placed in a secured region where only an "ultravisor"
      3running in firmware can provide to access it. pseries guests on such
      4systems can communicate with the ultravisor (via ultracalls) to switch to a
      5secure VM mode (SVM) where the guest's memory is relocated to this secured
      6region, making its memory inaccessible to normal processes/guests running on
      7the host.
      8
      9The various ultracalls/hypercalls relating to SVM mode are currently
     10only documented internally, but are planned for direct inclusion into the
     11public OpenPOWER version of the PAPR specification (LoPAPR/LoPAR). An internal
     12ACR has been filed to reserve a hypercall number range specific to this
     13use-case to avoid any future conflicts with the internally-maintained PAPR
     14specification. This document summarizes some of these details as they relate
     15to QEMU.
     16
     17== hypercalls needed by the ultravisor ==
     18
     19Switching to SVM mode involves a number of hcalls issued by the ultravisor
     20to the hypervisor to orchestrate the movement of guest memory to secure
     21memory and various other aspects SVM mode. Numbers are assigned for these
     22hcalls within the reserved range 0xEF00-0xEF80. The below documents the
     23hcalls relevant to QEMU.
     24
     25- H_TPM_COMM (0xef10)
     26
     27  For TPM_COMM_OP_EXECUTE operation:
     28    Send a request to a TPM and receive a response, opening a new TPM session
     29    if one has not already been opened.
     30
     31  For TPM_COMM_OP_CLOSE_SESSION operation:
     32    Close the existing TPM session, if any.
     33
     34  Arguments:
     35
     36    r3 : H_TPM_COMM (0xef10)
     37    r4 : TPM operation, one of:
     38         TPM_COMM_OP_EXECUTE (0x1)
     39         TPM_COMM_OP_CLOSE_SESSION (0x2)
     40    r5 : in_buffer, guest physical address of buffer containing the request
     41         - Caller may use the same address for both request and response
     42    r6 : in_size, size of the in buffer
     43         - Must be less than or equal to 4KB
     44    r7 : out_buffer, guest physical address of buffer to store the response
     45         - Caller may use the same address for both request and response
     46    r8 : out_size, size of the out buffer
     47         - Must be at least 4KB, as this is the maximum request/response size
     48           supported by most TPM implementations, including the TPM Resource
     49           Manager in the linux kernel.
     50
     51  Return values:
     52
     53    r3 : H_Success    request processed successfully
     54         H_PARAMETER  invalid TPM operation
     55         H_P2         in_buffer is invalid
     56         H_P3         in_size is invalid
     57         H_P4         out_buffer is invalid
     58         H_P5         out_size is invalid
     59         H_RESOURCE   problem communicating with TPM
     60         H_FUNCTION   TPM access is not currently allowed/configured
     61    r4 : For TPM_COMM_OP_EXECUTE, the size of the response will be stored here
     62         upon success.
     63
     64  Use-case/notes:
     65
     66    SVM filesystems are encrypted using a symmetric key. This key is then
     67    wrapped/encrypted using the public key of a trusted system which has the
     68    private key stored in the system's TPM. An Ultravisor will use this
     69    hcall to unwrap/unseal the symmetric key using the system's TPM device
     70    or a TPM Resource Manager associated with the device.
     71
     72    The Ultravisor sets up a separate session key with the TPM in advance
     73    during host system boot. All sensitive in and out values will be
     74    encrypted using the session key. Though the hypervisor will see the 'in'
     75    and 'out' buffers in raw form, any sensitive contents will generally be
     76    encrypted using this session key.