[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC PATCH 08/10] xsm-silo: convert silo over to domain roles
This converts the SILO XSM module to function as an extension to the domain roles system to implement an extended enforcement policy. Signed-off-by: Daniel P. Smith <dpsmith@xxxxxxxxxxxxxxxxxxxx> --- xen/xsm/silo.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/xen/xsm/silo.c b/xen/xsm/silo.c index 4850756a3d..3b3ca8fb84 100644 --- a/xen/xsm/silo.c +++ b/xen/xsm/silo.c @@ -17,9 +17,11 @@ * You should have received a copy of the GNU General Public License along with * this program; If not, see <http://www.gnu.org/licenses/>. */ -#define XSM_NO_WRAPPERS -#include <xsm/dummy.h> +#include <xsm/xsm.h> +#include <xsm/roles.h> + +#define SILO_ALLOWED_ROLES ( XSM_DOM_SUPER | XSM_DEV_BACK ) /* * Check if inter-domain communication is allowed. * Return true when pass check. @@ -29,8 +31,10 @@ static bool silo_mode_dom_check(const struct domain *ldom, { const struct domain *currd = current->domain; - return (is_control_domain(currd) || is_control_domain(ldom) || - is_control_domain(rdom) || ldom == rdom); + return ( currd->xsm_roles & SILO_ALLOWED_ROLES || + ldom->xsm_roles & SILO_ALLOWED_ROLES || + rdom->xsm_roles & SILO_ALLOWED_ROLES || + ldom == rdom ); } static int silo_evtchn_unbound(struct domain *d1, struct evtchn *chn, @@ -44,7 +48,7 @@ static int silo_evtchn_unbound(struct domain *d1, struct evtchn *chn, else { if ( silo_mode_dom_check(d1, d2) ) - rc = xsm_evtchn_unbound(d1, chn, id2); + rc = xsm_validate_role(TARGET_PRIVS, current->domain, d1); rcu_unlock_domain(d2); } @@ -55,7 +59,7 @@ static int silo_evtchn_interdomain(struct domain *d1, struct evtchn *chan1, struct domain *d2, struct evtchn *chan2) { if ( silo_mode_dom_check(d1, d2) ) - return xsm_evtchn_interdomain(d1, chan1, d2, chan2); + return xsm_validate_role(XSM_NONE, d1, d2); return -EPERM; } @@ -63,21 +67,21 @@ static int silo_grant_mapref(struct domain *d1, struct domain *d2, uint32_t flags) { if ( silo_mode_dom_check(d1, d2) ) - return xsm_grant_mapref(d1, d2, flags); + return xsm_validate_role(XSM_NONE, d1, d2); return -EPERM; } static int silo_grant_transfer(struct domain *d1, struct domain *d2) { if ( silo_mode_dom_check(d1, d2) ) - return xsm_grant_transfer(d1, d2); + return xsm_validate_role(XSM_NONE, d1, d2); return -EPERM; } static int silo_grant_copy(struct domain *d1, struct domain *d2) { if ( silo_mode_dom_check(d1, d2) ) - return xsm_grant_copy(d1, d2); + return xsm_validate_role(XSM_NONE, d1, d2); return -EPERM; } -- 2.20.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |