52 lines
1.2 KiB
Plaintext
52 lines
1.2 KiB
Plaintext
$NetBSD: patch-CVE-2013-1918_7,v 1.1 2013/05/03 16:48:38 drochner Exp $
|
|
|
|
--- xen/common/domain.c.orig 2013-05-03 13:28:00.000000000 +0000
|
|
+++ xen/common/domain.c
|
|
@@ -770,14 +770,18 @@ int boot_vcpu(struct domain *d, int vcpu
|
|
return arch_set_info_guest(v, ctxt);
|
|
}
|
|
|
|
-void vcpu_reset(struct vcpu *v)
|
|
+int vcpu_reset(struct vcpu *v)
|
|
{
|
|
struct domain *d = v->domain;
|
|
+ int rc;
|
|
|
|
vcpu_pause(v);
|
|
domain_lock(d);
|
|
|
|
- arch_vcpu_reset(v);
|
|
+ set_bit(_VPF_in_reset, &v->pause_flags);
|
|
+ rc = arch_vcpu_reset(v);
|
|
+ if ( rc )
|
|
+ goto out_unlock;
|
|
|
|
set_bit(_VPF_down, &v->pause_flags);
|
|
|
|
@@ -793,9 +797,13 @@ void vcpu_reset(struct vcpu *v)
|
|
#endif
|
|
cpus_clear(v->cpu_affinity_tmp);
|
|
clear_bit(_VPF_blocked, &v->pause_flags);
|
|
+ clear_bit(_VPF_in_reset, &v->pause_flags);
|
|
|
|
+ out_unlock:
|
|
domain_unlock(v->domain);
|
|
vcpu_unpause(v);
|
|
+
|
|
+ return rc;
|
|
}
|
|
|
|
|
|
@@ -834,6 +842,11 @@ long do_vcpu_op(int cmd, int vcpuid, XEN
|
|
domain_unlock(d);
|
|
|
|
xfree(ctxt);
|
|
+
|
|
+ if ( rc == -EAGAIN )
|
|
+ rc = hypercall_create_continuation(__HYPERVISOR_vcpu_op, "iih",
|
|
+ cmd, vcpuid, arg);
|
|
+
|
|
break;
|
|
|
|
case VCPUOP_up:
|