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>
This commit is contained in:
parent
b20e37801f
commit
54e8953967
@ -107,6 +107,7 @@ struct KVMState
|
|||||||
|
|
||||||
/* memory encryption */
|
/* memory encryption */
|
||||||
void *memcrypt_handle;
|
void *memcrypt_handle;
|
||||||
|
int (*memcrypt_encrypt_data)(void *handle, uint8_t *ptr, uint64_t len);
|
||||||
};
|
};
|
||||||
|
|
||||||
KVMState *kvm_state;
|
KVMState *kvm_state;
|
||||||
@ -151,6 +152,17 @@ bool kvm_memcrypt_enabled(void)
|
|||||||
return false;
|
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)
|
static KVMSlot *kvm_get_free_slot(KVMMemoryListener *kml)
|
||||||
{
|
{
|
||||||
KVMState *s = kvm_state;
|
KVMState *s = kvm_state;
|
||||||
@ -1659,6 +1671,8 @@ static int kvm_init(MachineState *ms)
|
|||||||
ret = -1;
|
ret = -1;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kvm_state->memcrypt_encrypt_data = sev_encrypt_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = kvm_arch_init(ms, s);
|
ret = kvm_arch_init(ms, s);
|
||||||
|
@ -15,6 +15,11 @@
|
|||||||
#include "qemu-common.h"
|
#include "qemu-common.h"
|
||||||
#include "sysemu/sev.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)
|
void *sev_guest_init(const char *id)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -110,6 +110,11 @@ bool kvm_memcrypt_enabled(void)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int kvm_memcrypt_encrypt_data(uint8_t *ptr, uint64_t len)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
int kvm_irqchip_add_msi_route(KVMState *s, int vector, PCIDevice *dev)
|
int kvm_irqchip_add_msi_route(KVMState *s, int vector, PCIDevice *dev)
|
||||||
{
|
{
|
||||||
|
@ -239,6 +239,14 @@ bool kvm_arm_supports_user_irq(void);
|
|||||||
*/
|
*/
|
||||||
bool kvm_memcrypt_enabled(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
|
#ifdef NEED_CPU_H
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
|
@ -17,4 +17,5 @@
|
|||||||
#include "sysemu/kvm.h"
|
#include "sysemu/kvm.h"
|
||||||
|
|
||||||
void *sev_guest_init(const char *id);
|
void *sev_guest_init(const char *id);
|
||||||
|
int sev_encrypt_data(void *handle, uint8_t *ptr, uint64_t len);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user