All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86: refine guest_mode()
@ 2020-04-27  8:03 Jan Beulich
  2020-04-27  9:59 ` Roger Pau Monné
  2020-04-27 14:35 ` Andrew Cooper
  0 siblings, 2 replies; 17+ messages in thread
From: Jan Beulich @ 2020-04-27  8:03 UTC (permalink / raw)
  To: xen-devel; +Cc: Andrew Cooper, Wei Liu, Roger Pau Monné

The 2nd of the assertions as well as the macro's return value have been
assuming we're on the primary stack. While for most IST exceptions we
eventually switch back to the main one, for #DF we intentionally never
do, and hence a #DF actually triggering on a user mode insn (which then
is still a Xen bug) would in turn trigger this assertion, rather than
cleanly logging state.

Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
While we could go further and also assert we're on the correct IST
stack in an "else" ti the "if()" added, I'm not fully convinced this
would be generally helpful. I'll be happy to adjust accordingly if
others think differently; at such a point though I think this should
then no longer be a macro.

--- a/xen/include/asm-x86/regs.h
+++ b/xen/include/asm-x86/regs.h
@@ -10,9 +10,10 @@
     /* Frame pointer must point into current CPU stack. */                    \
     ASSERT(diff < STACK_SIZE);                                                \
     /* If not a guest frame, it must be a hypervisor frame. */                \
-    ASSERT((diff == 0) || (r->cs == __HYPERVISOR_CS));                        \
+    if ( diff < PRIMARY_STACK_SIZE )                                          \
+        ASSERT(!diff || ((r)->cs == __HYPERVISOR_CS));                        \
     /* Return TRUE if it's a guest frame. */                                  \
-    (diff == 0);                                                              \
+    !diff || ((r)->cs != __HYPERVISOR_CS);                                    \
 })
 
 #endif /* __X86_REGS_H__ */


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2020-05-27 15:17 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-27  8:03 [PATCH] x86: refine guest_mode() Jan Beulich
2020-04-27  9:59 ` Roger Pau Monné
2020-04-27 14:08   ` Jan Beulich
2020-04-27 16:00     ` Roger Pau Monné
2020-04-27 14:35 ` Andrew Cooper
2020-04-27 15:15   ` Jan Beulich
2020-04-27 20:11     ` Andrew Cooper
2020-04-28  6:30       ` Jan Beulich
2020-05-18 14:51         ` Roger Pau Monné
2020-05-20  8:56           ` Jan Beulich
2020-05-20 15:13             ` Roger Pau Monné
2020-05-22  9:52               ` Jan Beulich
2020-05-22 10:48                 ` Roger Pau Monné
2020-05-22 12:00                   ` Jan Beulich
2020-05-26 10:56                     ` Roger Pau Monné
2020-05-26 13:55                       ` Jan Beulich
2020-05-27 15:17                         ` Roger Pau Monné

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.