|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 2/3] x86/PV: replace assertions in '0' debug key stack dumping
While it was me to add them, I'm afraid I don't see justification for
the assertions: A vCPU may very well have got preempted while in user
mode. Limit compat guest user mode stack dumps to the containing page
(like is done when using do_page_walk()), and suppress their dumping
altogether for 64-bit Dom0.
Fixes: cc0de53a903c ("x86: improve output resulting from sending '0' over
serial")
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
---
An alternative to suppressing the dump for 64-bit would be to make
do_page_fault() guest-user-mode aware.
--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -254,7 +254,6 @@ static void compat_show_guest_stack(stru
struct vcpu *vcpu;
unsigned long mfn;
- ASSERT(guest_kernel_mode(v, regs));
mfn = read_cr3() >> PAGE_SHIFT;
for_each_vcpu( v->domain, vcpu )
if ( pagetable_get_pfn(vcpu->arch.guest_table) == mfn )
@@ -269,6 +268,8 @@ static void compat_show_guest_stack(stru
}
mask = PAGE_SIZE;
}
+ else if ( !guest_kernel_mode(v, regs) )
+ mask = PAGE_SIZE;
}
for ( i = 0; i < debug_stack_lines * 8; i++ )
@@ -328,7 +329,12 @@ static void show_guest_stack(struct vcpu
{
struct vcpu *vcpu;
- ASSERT(guest_kernel_mode(v, regs));
+ if ( !guest_kernel_mode(v, regs) )
+ {
+ printk("User mode stack\n");
+ return;
+ }
+
vcpu = maddr_get_owner(read_cr3()) == v->domain ? v : NULL;
if ( !vcpu )
{
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |