WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] Correct 32on64 handling of VCPUOP_registe

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Correct 32on64 handling of VCPUOP_register_runstate_memory_area. We
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 04 Jun 2007 03:15:58 -0700
Delivery-date: Mon, 04 Jun 2007 03:17:30 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxxxxx>
# Date 1180103332 -3600
# Node ID 88e41a91301c109b99443db3a4bf3c8e6bbad042
# Parent  f2d2d5f18543de04191c1f5e22471e74d8767147
Correct 32on64 handling of VCPUOP_register_runstate_memory_area.  We
were copying too many bytes from the guest so the test for
area.addr.h.c != area.addr.p was failing.

Added a WARN_ON to the kernel to catch this case. It would be a BUG_ON
but this would break the new kernel on older hypervisors and the only
real problem is that stolen time is not updated, which we can live
with.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxxxxx>
---
 linux-2.6-xen-sparse/arch/i386/kernel/time-xen.c |    4 +++-
 linux-2.6-xen-sparse/arch/ia64/kernel/time.c     |    4 +++-
 xen/arch/x86/x86_64/domain.c                     |    4 +++-
 3 files changed, 9 insertions(+), 3 deletions(-)

diff -r f2d2d5f18543 -r 88e41a91301c 
linux-2.6-xen-sparse/arch/i386/kernel/time-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/time-xen.c  Fri May 25 13:41:01 
2007 +0100
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/time-xen.c  Fri May 25 15:28:52 
2007 +0100
@@ -732,11 +732,13 @@ static void init_missing_ticks_accountin
 {
        struct vcpu_register_runstate_memory_area area;
        struct vcpu_runstate_info *runstate = &per_cpu(runstate, cpu);
+       int rc;
 
        memset(runstate, 0, sizeof(*runstate));
 
        area.addr.v = runstate;
-       HYPERVISOR_vcpu_op(VCPUOP_register_runstate_memory_area, cpu, &area);
+       rc = HYPERVISOR_vcpu_op(VCPUOP_register_runstate_memory_area, cpu, 
&area);
+       WARN_ON(rc && rc != -ENOSYS);
 
        per_cpu(processed_blocked_time, cpu) =
                runstate->time[RUNSTATE_blocked];
diff -r f2d2d5f18543 -r 88e41a91301c 
linux-2.6-xen-sparse/arch/ia64/kernel/time.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/time.c      Fri May 25 13:41:01 
2007 +0100
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/time.c      Fri May 25 15:28:52 
2007 +0100
@@ -257,11 +257,13 @@ static void init_missing_ticks_accountin
 {
        struct vcpu_register_runstate_memory_area area;
        struct vcpu_runstate_info *runstate = &per_cpu(runstate, cpu);
+       int rc;
 
        memset(runstate, 0, sizeof(*runstate));
 
        area.addr.v = runstate;
-       HYPERVISOR_vcpu_op(VCPUOP_register_runstate_memory_area, cpu, &area);
+       rc = HYPERVISOR_vcpu_op(VCPUOP_register_runstate_memory_area, cpu, 
&area);
+       WARN_ON(rc && rc != -ENOSYS);
 
        per_cpu(processed_blocked_time, cpu) = runstate->time[RUNSTATE_blocked];
        per_cpu(processed_stolen_time, cpu) = runstate->time[RUNSTATE_runnable]
diff -r f2d2d5f18543 -r 88e41a91301c xen/arch/x86/x86_64/domain.c
--- a/xen/arch/x86/x86_64/domain.c      Fri May 25 13:41:01 2007 +0100
+++ b/xen/arch/x86/x86_64/domain.c      Fri May 25 15:28:52 2007 +0100
@@ -22,8 +22,10 @@ arch_compat_vcpu_op(
         struct compat_vcpu_register_runstate_memory_area area;
         struct compat_vcpu_runstate_info info;
 
+        area.addr.p = 0;
+
         rc = -EFAULT;
-        if ( copy_from_guest(&area, arg, 1) )
+        if ( copy_from_guest(&area.addr.h, arg, 1) )
             break;
 
         if ( area.addr.h.c != area.addr.p ||

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] Correct 32on64 handling of VCPUOP_register_runstate_memory_area. We, Xen patchbot-unstable <=