xsm: label xen-consumer event channels
authorDaniel De Graaf <dgdegra@tycho.nsa.gov>
Wed, 29 Feb 2012 13:46:32 +0000 (13:46 +0000)
committerDaniel De Graaf <dgdegra@tycho.nsa.gov>
Wed, 29 Feb 2012 13:46:32 +0000 (13:46 +0000)
Event channels created during the domain build process for HVM domains
did not call the XSM creation hook. Since these channels are used
internally by Xen, redirect them to DOMAIN_INVAID instead of failing
to create if the XSM hook fails the permissions check.

Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
Committed-by: Keir Fraser <keir@xen.org>
xen/common/event_channel.c

index 989ebae1338edb59fd455d550a15f10999bfa50c..c69d2c753e10af2e274401cf306335225ccbbb6e 100644 (file)
@@ -1105,7 +1105,7 @@ int alloc_unbound_xen_event_channel(
 {
     struct evtchn *chn;
     struct domain *d = local_vcpu->domain;
-    int            port;
+    int            port, rc;
 
     spin_lock(&d->event_lock);
 
@@ -1113,10 +1113,12 @@ int alloc_unbound_xen_event_channel(
         goto out;
     chn = evtchn_from_port(d, port);
 
+    rc = xsm_evtchn_unbound(d, chn, remote_domid);
+
     chn->state = ECS_UNBOUND;
     chn->xen_consumer = get_xen_consumer(notification_fn);
     chn->notify_vcpu_id = local_vcpu->vcpu_id;
-    chn->u.unbound.remote_domid = remote_domid;
+    chn->u.unbound.remote_domid = !rc ? remote_domid : DOMID_INVALID;
 
  out:
     spin_unlock(&d->event_lock);