[PATCH 2/3] KVM: x86: Emulator support for #UD on CPL0

2014-06-18 Thread Nadav Amit
Certain instructions (e.g., mwait and monitor) cause a #UD exception when they
are executed in privilaged mode. This is in contrast to the regular privilaged
instructions which cause #GP. In order not to mess with SVM interception of
mwait and monitor which assumes privilage level assertions take place before
interception, a flag has been added.

Signed-off-by: Nadav Amit na...@cs.technion.ac.il
---
 arch/x86/kvm/emulate.c | 6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index f90194d..ef7a5a0 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -163,6 +163,7 @@
 #define SrcWrite((u64)1  46)  /* Write back src operand */
 #define NoMod  ((u64)1  47)  /* Mod field is ignored */
 #define NoBigReal   ((u64)1  48)  /* No big real mode */
+#define UDOnPriv((u64)1  49)  /* #UD instead of #GP on CPL  0 */
 
 #define DstXacc (DstAccLo | SrcAccHi | SrcWrite)
 
@@ -4560,7 +4561,10 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
 
/* Privileged instruction can be executed only in CPL=0 */
if ((ctxt-d  Priv)  ops-cpl(ctxt)) {
-   rc = emulate_gp(ctxt, 0);
+   if (ctxt-d  UDOnPriv)
+   rc = emulate_ud(ctxt);
+   else
+   rc = emulate_gp(ctxt, 0);
goto done;
}
 
-- 
1.9.1

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/3] KVM: x86: Emulator support for #UD on CPL0

2014-06-18 Thread Paolo Bonzini

Il 18/06/2014 16:19, Nadav Amit ha scritto:

Certain instructions (e.g., mwait and monitor) cause a #UD exception when they
are executed in privilaged mode.


It's actually non-privileged mode (Priv means the instruction is 
privileged, not the mode).  So I've renamed the flag to PrivUD.


Paolo

 This is in contrast to the regular privilaged

instructions which cause #GP. In order not to mess with SVM interception of
mwait and monitor which assumes privilage level assertions take place before
interception, a flag has been added.

Signed-off-by: Nadav Amit na...@cs.technion.ac.il
---
 arch/x86/kvm/emulate.c | 6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index f90194d..ef7a5a0 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -163,6 +163,7 @@
 #define SrcWrite((u64)1  46)  /* Write back src operand */
 #define NoMod  ((u64)1  47)  /* Mod field is ignored */
 #define NoBigReal   ((u64)1  48)  /* No big real mode */
+#define UDOnPriv((u64)1  49)  /* #UD instead of #GP on CPL  0 */

 #define DstXacc (DstAccLo | SrcAccHi | SrcWrite)

@@ -4560,7 +4561,10 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)

/* Privileged instruction can be executed only in CPL=0 */
if ((ctxt-d  Priv)  ops-cpl(ctxt)) {
-   rc = emulate_gp(ctxt, 0);
+   if (ctxt-d  UDOnPriv)
+   rc = emulate_ud(ctxt);
+   else
+   rc = emulate_gp(ctxt, 0);
goto done;
}




--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/