Browse Source

kvm: introduce memory encryption APIs

Inorder to integerate the Secure Encryption Virtualization (SEV) support
add few high-level memory encryption APIs which can be used for encrypting
the guest memory region.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: kvm@vger.kernel.org
Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
pull/66/merge
Brijesh Singh 9 years ago
committed by Paolo Bonzini
parent
commit
54e8953967
  1. 14
      accel/kvm/kvm-all.c
  2. 5
      accel/kvm/sev-stub.c
  3. 5
      accel/stubs/kvm-stub.c
  4. 8
      include/sysemu/kvm.h
  5. 1
      include/sysemu/sev.h

14
accel/kvm/kvm-all.c

@ -107,6 +107,7 @@ struct KVMState
/* memory encryption */
void *memcrypt_handle;
int (*memcrypt_encrypt_data)(void *handle, uint8_t *ptr, uint64_t len);
};
KVMState *kvm_state;
@ -151,6 +152,17 @@ bool kvm_memcrypt_enabled(void)
return false;
}
int kvm_memcrypt_encrypt_data(uint8_t *ptr, uint64_t len)
{
if (kvm_state->memcrypt_handle &&
kvm_state->memcrypt_encrypt_data) {
return kvm_state->memcrypt_encrypt_data(kvm_state->memcrypt_handle,
ptr, len);
}
return 1;
}
static KVMSlot *kvm_get_free_slot(KVMMemoryListener *kml)
{
KVMState *s = kvm_state;
@ -1659,6 +1671,8 @@ static int kvm_init(MachineState *ms)
ret = -1;
goto err;
}
kvm_state->memcrypt_encrypt_data = sev_encrypt_data;
}
ret = kvm_arch_init(ms, s);

5
accel/kvm/sev-stub.c

@ -15,6 +15,11 @@
#include "qemu-common.h"
#include "sysemu/sev.h"
int sev_encrypt_data(void *handle, uint8_t *ptr, uint64_t len)
{
abort();
}
void *sev_guest_init(const char *id)
{
return NULL;

5
accel/stubs/kvm-stub.c

@ -110,6 +110,11 @@ bool kvm_memcrypt_enabled(void)
return false;
}
int kvm_memcrypt_encrypt_data(uint8_t *ptr, uint64_t len)
{
return 1;
}
#ifndef CONFIG_USER_ONLY
int kvm_irqchip_add_msi_route(KVMState *s, int vector, PCIDevice *dev)
{

8
include/sysemu/kvm.h

@ -239,6 +239,14 @@ bool kvm_arm_supports_user_irq(void);
*/
bool kvm_memcrypt_enabled(void);
/**
* kvm_memcrypt_encrypt_data: encrypt the memory range
*
* Return: 1 failed to encrypt the range
* 0 succesfully encrypted memory region
*/
int kvm_memcrypt_encrypt_data(uint8_t *ptr, uint64_t len);
#ifdef NEED_CPU_H
#include "cpu.h"

1
include/sysemu/sev.h

@ -17,4 +17,5 @@
#include "sysemu/kvm.h"
void *sev_guest_init(const char *id);
int sev_encrypt_data(void *handle, uint8_t *ptr, uint64_t len);
#endif

Loading…
Cancel
Save