Re: [PATCH v6 64/76] x86/sev-es: Handle #DB Events

2020-08-31 Thread Borislav Petkov
On Mon, Aug 24, 2020 at 10:54:59AM +0200, Joerg Roedel wrote:
> From: Joerg Roedel 
> 
> Handle #VC exceptions caused by #DB exceptions in the guest. Those
> must be handled outside of instrumentation_begin()/end() so that the
> handler will not be raised recursivly.
 ^^

"recursively"

-- 
Regards/Gruss,
Boris.

https://people.kernel.org/tglx/notes-about-netiquette
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization


[PATCH v6 64/76] x86/sev-es: Handle #DB Events

2020-08-24 Thread Joerg Roedel
From: Joerg Roedel 

Handle #VC exceptions caused by #DB exceptions in the guest. Those
must be handled outside of instrumentation_begin()/end() so that the
handler will not be raised recursivly.

Handle them by calling the kernels debug exception handler.

Signed-off-by: Joerg Roedel 
Link: https://lore.kernel.org/r/20200724160336.5435-64-j...@8bytes.org
---
 arch/x86/kernel/sev-es.c | 17 +
 1 file changed, 17 insertions(+)

diff --git a/arch/x86/kernel/sev-es.c b/arch/x86/kernel/sev-es.c
index ee0950f01590..e1f3ebbcc122 100644
--- a/arch/x86/kernel/sev-es.c
+++ b/arch/x86/kernel/sev-es.c
@@ -922,6 +922,14 @@ static enum es_result vc_handle_trap_ac(struct ghcb *ghcb,
return ES_EXCEPTION;
 }
 
+static __always_inline void vc_handle_trap_db(struct pt_regs *regs)
+{
+   if (user_mode(regs))
+   noist_exc_debug(regs);
+   else
+   exc_debug(regs);
+}
+
 static enum es_result vc_handle_exitcode(struct es_em_ctxt *ctxt,
 struct ghcb *ghcb,
 unsigned long exit_code)
@@ -1033,6 +1041,15 @@ DEFINE_IDTENTRY_VC_SAFE_STACK(exc_vmm_communication)
struct ghcb *ghcb;
 
lockdep_assert_irqs_disabled();
+
+   /*
+* Handle #DB before calling into !noinstr code to avoid recursive #DB.
+*/
+   if (error_code == SVM_EXIT_EXCP_BASE + X86_TRAP_DB) {
+   vc_handle_trap_db(regs);
+   return;
+   }
+
instrumentation_begin();
 
/*
-- 
2.28.0

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization