[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/3] x86/PV: make '0' debug key dump Dom0's stacks again


  • To: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Wed, 29 Sep 2021 11:42:34 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=oLIHrV3tAS35bw50cNvZyc6rMif9PxUtegze2vI4lwY=; b=TbAPriCDm+1TWb9PRb7gdUnhZPs94+R+0U7PlQ906ThB8+hc0hP7b07532LtejwVMRzzkxnQsLDKYiFRYPOIoiatkaUHgIYwUFUNlc5Pb5HyS1V0F81fXgYBIV4Ch+Lx/kt0wQ8s9JonFmPWA1SzEp2iIJ7R/Il0+cqV4qKHmrb9qupUJ4Flw+jyisoomICosW8idKm1K8wZmJSeP+0bANgE3yCeAOsHVXW1O+Ajl/ziYHvs7qZYf8I7sZXB1i+wPUV+mnNJH4P27aecQmX0mxbOULEmVkxoby+KAsbn/OES/rXyWYRVwuHbtzCB5EaKU7sd21n4rHgiOFfjpAVqAg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GOhnbwJ6RW4GGHpRGXWyDQR8HD0efmyGHTSmFA1GUppXsd+kZoSoeOSUuCfKuUYeJ87IQPh9teeINy4/HRE7lMWKO3dRf2875LbO4SoNwNVrSa4tiIVKkqiGUbWTQKRePPnrrXI0nx6EsdjwzpyLVwdCkUs/GUL+xTAivvB46B20GiL50b7ajrB46sv3qN1gwCLEJ6yA9Ooe10UqhPu7OtE63+cwnQyP4ocH4w+67ESCDVCUMZgBhYCQX7XbuqsXljjYW7pMSFrVBzn2SqPenIvV4+S5xGr3NrqPDXB+/gqiiS5hNRK4rYdhrQ7bUZQVfgZ+FVOK7zfHoxlrRM7gDw==
  • Authentication-results: citrix.com; dkim=none (message not signed) header.d=none;citrix.com; dmarc=none action=none header.from=suse.com;
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Delivery-date: Wed, 29 Sep 2021 09:42:45 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

The conversion to __get_guest() failed to account for the fact that for
remote vCPU-s dumping gets done through a pointer obtained from
map_domain_page(): __get_guest() arranges for (apparent) accesses to
hypervisor space to cause #GP(0).

Fixes: 6a1d72d3739e ('x86: split __{get,put}_user() into "guest" and "unsafe" 
variants')
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
---
Using get_unsafe() might be an option as well, instead of the added
extra conditional.

--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -275,7 +275,9 @@ static void compat_show_guest_stack(stru
     {
         if ( (((long)stack - 1) ^ ((long)(stack + 1) - 1)) & mask )
             break;
-        if ( __get_guest(addr, stack) )
+        if ( stack_page )
+            addr = *stack;
+        else if ( __get_guest(addr, stack) )
         {
             if ( i != 0 )
                 printk("\n    ");
@@ -344,7 +346,9 @@ static void show_guest_stack(struct vcpu
     {
         if ( (((long)stack - 1) ^ ((long)(stack + 1) - 1)) & mask )
             break;
-        if ( __get_guest(addr, stack) )
+        if ( stack_page )
+            addr = *stack;
+        else if ( __get_guest(addr, stack) )
         {
             if ( i != 0 )
                 printk("\n    ");




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.