RE: [RFC PATCH V2 11/18] Drivers: hv: vmbus: Decrypt vmbus ring buffer

From: Michael Kelley (LINUX)
Date: Wed Dec 14 2022 - 13:26:12 EST


From: Tianyu Lan <ltykernel@xxxxxxxxx> Sent: Friday, November 18, 2022 7:46 PM
>
> The ring buffer is remapped in the hv_ringbuffer_init()
> and it should be with decrypt flag in order to share it
> with hypervisor in sev-snp enlightened guest.

FWIW, the change in this patch is included in Patch 9
in my vTOM-related patch series.

>
> Signed-off-by: Tianyu Lan <tiala@xxxxxxxxxxxxx>
> ---
> drivers/hv/ring_buffer.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c
> index 59a4aa86d1f3..391995c76be7 100644
> --- a/drivers/hv/ring_buffer.c
> +++ b/drivers/hv/ring_buffer.c
> @@ -18,6 +18,7 @@
> #include <linux/slab.h>
> #include <linux/prefetch.h>
> #include <linux/io.h>
> +#include <linux/set_memory.h>
> #include <asm/mshyperv.h>
>
> #include "hyperv_vmbus.h"
> @@ -233,14 +234,18 @@ int hv_ringbuffer_init(struct hv_ring_buffer_info *ring_info,
>
> ring_info->ring_buffer = (struct hv_ring_buffer *)
> vmap(pages_wraparound, page_cnt * 2 - 1, VM_MAP,
> + hv_isolation_type_en_snp() ?
> + pgprot_decrypted(PAGE_KERNEL_NOENC) :
> PAGE_KERNEL);

Note that pgprot_decrypted(PAGE_KERNEL_NOENC) can always be
used, as it does nothing in a normal VM. Its use doesn't need to be
conditional on the isolation type.

>
> + if (hv_isolation_type_en_snp())
> + memset(ring_info->ring_buffer, 0x00, page_cnt * PAGE_SIZE);

My version of the change always does the zero'ing, but only of
the first page, as Hyper-V expects the ring buffer header page to be
clean. The initial contents of the rest of the ring buffer doesn't
really matter.

> +
> kfree(pages_wraparound);
> if (!ring_info->ring_buffer)
> return -ENOMEM;
> }
>
> -

The above looks like a spurious whitespace change.

> ring_info->ring_buffer->read_index =
> ring_info->ring_buffer->write_index = 0;
>
> --
> 2.25.1