Thread (107 messages) 107 messages, 8 authors, 2020-03-17

Re: [PATCH 18/62] x86/boot/compressed/64: Setup GHCB Based VC Exception handler

From: Andy Lutomirski <luto@kernel.org>
Date: 2020-02-11 22:26:05
Also in: kvm, lkml

On Tue, Feb 11, 2020 at 5:53 AM Joerg Roedel [off-list ref] wrote:
From: Joerg Roedel <redacted>

Install an exception handler for #VC exception that uses a GHCB. Also
add the infrastructure for handling different exit-codes by decoding
the instruction that caused the exception and error handling.
quoted hunk ↗ jump to hunk
diff --git a/arch/x86/boot/compressed/sev-es.c b/arch/x86/boot/compressed/sev-es.c
index 8d13121a8cf2..02fb6f57128b 100644
--- a/arch/x86/boot/compressed/sev-es.c
+++ b/arch/x86/boot/compressed/sev-es.c
@@ -8,12 +8,16 @@
 #include <linux/kernel.h>

 #include <asm/sev-es.h>
+#include <asm/trap_defs.h>
 #include <asm/msr-index.h>
 #include <asm/ptrace.h>
 #include <asm/svm.h>

 #include "misc.h"

+struct ghcb boot_ghcb_page __aligned(PAGE_SIZE);
+struct ghcb *boot_ghcb;
+
 static inline u64 read_ghcb_msr(void)
 {
        unsigned long low, high;
@@ -35,8 +39,95 @@ static inline void write_ghcb_msr(u64 val)
                        "a"(low), "d" (high) : "memory");
 }

+static enum es_result es_fetch_insn_byte(struct es_em_ctxt *ctxt,
+                                        unsigned int offset,
+                                        char *buffer)
+{
+       char *rip = (char *)ctxt->regs->ip;
+
+       buffer[offset] = rip[offset];
+
+       return ES_OK;
+}
+
+static enum es_result es_write_mem(struct es_em_ctxt *ctxt,
+                                  void *dst, char *buf, size_t size)
+{
+       memcpy(dst, buf, size);
+
+       return ES_OK;
+}
+
+static enum es_result es_read_mem(struct es_em_ctxt *ctxt,
+                                 void *src, char *buf, size_t size)
+{
+       memcpy(buf, src, size);
+
+       return ES_OK;
+}

What are all these abstractions for?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help