[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] xsm/flask: clean interdomain event channel hook
# HG changeset patch # User Daniel De Graaf <dgdegra@xxxxxxxxxxxxx> # Date 1330523231 0 # Node ID 2e6c3194c3b291e837df5ba6c80394fb1c0977f4 # Parent ea7a07622a4321283a1c6b74f8915890dab714a6 xsm/flask: clean interdomain event channel hook Don't attempt to relabel the already-bound half of the event channel pair created by an interdomain event channel. This relabeling also performed an incorrect check that the destination domain is permitted to create the reverse event channel, which may not be true if the unbound channel was created by the domain builder (like the xenstore channel). Signed-off-by: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx> Committed-by: Keir Fraser <keir@xxxxxxx> --- diff -r ea7a07622a43 -r 2e6c3194c3b2 xen/xsm/flask/hooks.c --- a/xen/xsm/flask/hooks.c Wed Feb 29 13:46:32 2012 +0000 +++ b/xen/xsm/flask/hooks.c Wed Feb 29 13:47:11 2012 +0000 @@ -182,12 +182,12 @@ static int flask_evtchn_interdomain(struct domain *d1, struct evtchn *chn1, struct domain *d2, struct evtchn *chn2) { - u32 newsid1; - u32 newsid2; + u32 newsid; int rc; - struct domain_security_struct *dsec1, *dsec2; + struct domain_security_struct *dsec, *dsec1, *dsec2; struct evtchn_security_struct *esec1, *esec2; + dsec = current->domain->ssid; dsec1 = d1->ssid; dsec2 = d2->ssid; @@ -195,7 +195,7 @@ esec2 = chn2->ssid; rc = security_transition_sid(dsec1->sid, dsec2->sid, - SECCLASS_EVENT, &newsid1); + SECCLASS_EVENT, &newsid); if ( rc ) { printk("%s: security_transition_sid failed, rc=%d (domain=%d)\n", @@ -203,33 +203,19 @@ return rc; } - rc = avc_has_perm(dsec1->sid, newsid1, SECCLASS_EVENT, EVENT__CREATE, NULL); + rc = avc_has_perm(dsec->sid, newsid, SECCLASS_EVENT, EVENT__CREATE, NULL); if ( rc ) return rc; - rc = security_transition_sid(dsec2->sid, dsec1->sid, - SECCLASS_EVENT, &newsid2); - if ( rc ) - { - printk("%s: security_transition_sid failed, rc=%d (domain=%d)\n", - __FUNCTION__, -rc, d1->domain_id); - return rc; - } - - rc = avc_has_perm(dsec2->sid, newsid2, SECCLASS_EVENT, EVENT__CREATE, NULL); + rc = avc_has_perm(newsid, dsec2->sid, SECCLASS_EVENT, EVENT__BIND, NULL); if ( rc ) return rc; - rc = avc_has_perm(newsid1, dsec2->sid, SECCLASS_EVENT, EVENT__BIND, NULL); + rc = avc_has_perm(esec2->sid, dsec1->sid, SECCLASS_EVENT, EVENT__BIND, NULL); if ( rc ) return rc; - rc = avc_has_perm(newsid2, dsec1->sid, SECCLASS_EVENT, EVENT__BIND, NULL); - if ( rc ) - return rc; - - esec1->sid = newsid1; - esec2->sid = newsid2; + esec1->sid = newsid; return rc; } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |