aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxc/xc_private.c
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2010-10-27 12:24:28 +0100
committerIan Campbell <ian.campbell@citrix.com>2010-10-27 12:24:28 +0100
commit31e4f2432e508c3ee007fed69aad6b867e6a2fed (patch)
tree7f84f4b6886d6120dc9e0aedf50778b3f9d6d083 /tools/libxc/xc_private.c
parent47c1755f36d5b57f5e9e5ba9a3d0ab7331272dee (diff)
downloadxen-31e4f2432e508c3ee007fed69aad6b867e6a2fed.tar.gz
xen-31e4f2432e508c3ee007fed69aad6b867e6a2fed.tar.bz2
xen-31e4f2432e508c3ee007fed69aad6b867e6a2fed.zip
libxc: fix xc_version by handling all known command types.
xend was crashing since 22289:ca4a781c8ae8 due to missing handling of XENVER_commandline. Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Diffstat (limited to 'tools/libxc/xc_private.c')
-rw-r--r--tools/libxc/xc_private.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/tools/libxc/xc_private.c b/tools/libxc/xc_private.c
index 9e0d3ce2db..1c7a5268e8 100644
--- a/tools/libxc/xc_private.c
+++ b/tools/libxc/xc_private.c
@@ -447,11 +447,14 @@ int xc_sysctl(xc_interface *xch, struct xen_sysctl *sysctl)
int xc_version(xc_interface *xch, int cmd, void *arg)
{
DECLARE_HYPERCALL_BOUNCE(arg, 0, XC_HYPERCALL_BUFFER_BOUNCE_OUT); /* Size unknown until cmd decoded */
- size_t sz = 0;
+ size_t sz;
int rc;
switch ( cmd )
{
+ case XENVER_version:
+ sz = 0;
+ break;
case XENVER_extraversion:
sz = sizeof(xen_extraversion_t);
break;
@@ -467,6 +470,21 @@ int xc_version(xc_interface *xch, int cmd, void *arg)
case XENVER_platform_parameters:
sz = sizeof(xen_platform_parameters_t);
break;
+ case XENVER_get_features:
+ sz = sizeof(xen_feature_info_t);
+ break;
+ case XENVER_pagesize:
+ sz = 0;
+ break;
+ case XENVER_guest_handle:
+ sz = sizeof(xen_domain_handle_t);
+ break;
+ case XENVER_commandline:
+ sz = sizeof(xen_commandline_t);
+ break;
+ default:
+ ERROR("xc_version: unknown command %d\n", cmd);
+ return -EINVAL;
}
HYPERCALL_BOUNCE_SET_SIZE(arg, sz);