diff options
author | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-08-31 11:21:35 +0100 |
---|---|---|
committer | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-08-31 11:21:35 +0100 |
commit | d046f361dc937d8fc179cc2da168f571726cb5a0 (patch) | |
tree | 578473169c1d081d7e3ed825d926377e4b8b9226 /xen/common/sysctl.c | |
parent | 3d030c1164e2c7bfc4873368e14bae9cc0e23e16 (diff) | |
download | xen-d046f361dc937d8fc179cc2da168f571726cb5a0.tar.gz xen-d046f361dc937d8fc179cc2da168f571726cb5a0.tar.bz2 xen-d046f361dc937d8fc179cc2da168f571726cb5a0.zip |
Xen Security Modules: XSM
Signed-off-by: George Coker <gscoker@alpha.ncsc.mil>
Diffstat (limited to 'xen/common/sysctl.c')
-rw-r--r-- | xen/common/sysctl.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/xen/common/sysctl.c b/xen/common/sysctl.c index 98d3777e0a..39d0d8c31d 100644 --- a/xen/common/sysctl.c +++ b/xen/common/sysctl.c @@ -23,6 +23,7 @@ #include <public/sysctl.h> #include <asm/numa.h> #include <xen/nodemask.h> +#include <xsm/xsm.h> extern long arch_do_sysctl( struct xen_sysctl *op, XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl); @@ -48,6 +49,10 @@ long do_sysctl(XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl) { case XEN_SYSCTL_readconsole: { + ret = xsm_readconsole(op->u.readconsole.clear); + if ( ret ) + break; + ret = read_console_ring( guest_handle_cast(op->u.readconsole.buffer, char), &op->u.readconsole.count, @@ -59,6 +64,10 @@ long do_sysctl(XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl) case XEN_SYSCTL_tbuf_op: { + ret = xsm_tbufcontrol(); + if ( ret ) + break; + ret = tb_control(&op->u.tbuf_op); if ( copy_to_guest(u_sysctl, op, 1) ) ret = -EFAULT; @@ -67,6 +76,10 @@ long do_sysctl(XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl) case XEN_SYSCTL_sched_id: { + ret = xsm_sched_id(); + if ( ret ) + break; + op->u.sched_id.sched_id = sched_id(); if ( copy_to_guest(u_sysctl, op, 1) ) ret = -EFAULT; @@ -90,6 +103,10 @@ long do_sysctl(XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl) if ( num_domains == op->u.getdomaininfolist.max_domains ) break; + ret = xsm_getdomaininfo(d); + if ( ret ) + continue; + getdomaininfo(d, &info); if ( copy_to_guest_offset(op->u.getdomaininfolist.buffer, @@ -117,6 +134,10 @@ long do_sysctl(XEN_GUEST_HANDLE(xen_sysctl_t) u_sysctl) #ifdef PERF_COUNTERS case XEN_SYSCTL_perfc_op: { + ret = xsm_perfcontrol(); + if ( ret ) + break; + ret = perfc_control(&op->u.perfc_op); if ( copy_to_guest(u_sysctl, op, 1) ) ret = -EFAULT; |