diff options
Diffstat (limited to 'sysutils/xenkernel42/patches/patch-XSA-166')
-rw-r--r-- | sysutils/xenkernel42/patches/patch-XSA-166 | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/sysutils/xenkernel42/patches/patch-XSA-166 b/sysutils/xenkernel42/patches/patch-XSA-166 new file mode 100644 index 00000000000..020f9dc7ab0 --- /dev/null +++ b/sysutils/xenkernel42/patches/patch-XSA-166 @@ -0,0 +1,42 @@ +$NetBSD: patch-XSA-166,v 1.1.2.2 2016/01/11 20:37:17 bsiegert Exp $ + +Patch for XSA-166, based on +http://xenbits.xenproject.org/xsa/xsa166-4.3.patch + +--- xen/arch/x86/hvm/hvm.c.orig ++++ xen/arch/x86/hvm/hvm.c +@@ -342,6 +342,7 @@ void hvm_migrate_pirqs(struct vcpu *v) + void hvm_do_resume(struct vcpu *v) + { + ioreq_t *p; ++ unsigned int state; + + pt_restore_timer(v); + +@@ -349,9 +350,10 @@ void hvm_do_resume(struct vcpu *v) + + /* NB. Optimised for common case (p->state == STATE_IOREQ_NONE). */ + p = get_ioreq(v); +- while ( p->state != STATE_IOREQ_NONE ) ++ while ( (state = p->state) != STATE_IOREQ_NONE ) + { +- switch ( p->state ) ++ rmb(); ++ switch ( state ) + { + case STATE_IORESP_READY: /* IORESP_READY -> NONE */ + hvm_io_assist(); +@@ -359,11 +361,10 @@ void hvm_do_resume(struct vcpu *v) + case STATE_IOREQ_READY: /* IOREQ_{READY,INPROCESS} -> IORESP_READY */ + case STATE_IOREQ_INPROCESS: + wait_on_xen_event_channel(v->arch.hvm_vcpu.xen_port, +- (p->state != STATE_IOREQ_READY) && +- (p->state != STATE_IOREQ_INPROCESS)); ++ p->state != state); + break; + default: +- gdprintk(XENLOG_ERR, "Weird HVM iorequest state %d.\n", p->state); ++ gdprintk(XENLOG_ERR, "Weird HVM iorequest state %u\n", state); + domain_crash(v->domain); + return; /* bail */ + } |