aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Shelton <eshelton@pobox.com>2013-04-30 11:03:03 -0400
committerIan Campbell <ian.campbell@citrix.com>2013-05-01 12:52:37 +0100
commit1612897f484ebb886b6bd143a0d55331370c28aa (patch)
tree8f3b4e843afe09a2ec2b2b2a50e4d7b84e4f7729
parent6aaee4960d8a56aeab9d962ce554dff7f987e1fd (diff)
downloadxen-1612897f484ebb886b6bd143a0d55331370c28aa.tar.gz
xen-1612897f484ebb886b6bd143a0d55331370c28aa.tar.bz2
xen-1612897f484ebb886b6bd143a0d55331370c28aa.zip
libxl: adjust point of backend name resolution
Resolution of a backend name to a domid needs to happen a little earlier in some cases. For example, if a domU is specified as a backend for a disk and, as previously written, libxl__device_disk_setdefault() calls libxl__resolve_domid() last, then disk->backend_domid still equals LIBXL_TOOLSTACK_DOMID when libxl__device_disk_set_backend() is called. This results in libxl__device_disk_set_backend() making an incorrect attempt to validate the target by calling stat() on a file on dom0, resulting in ERROR_INVAL (see libxl_device.c lines 239-248), which prevents creation of the frontend domain. Likewise, libxl__device_nic_setdefault() previously made use of nic->backend_domid before it was set. Signed-off-by: Eric Shelton <eshelton@pobox.com> Acked-by: Ian Campbell <ian.campbell@citrix.com> Reviewed-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
-rw-r--r--tools/libxl/libxl.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index ea8281d35b..87bda724bf 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -1978,10 +1978,10 @@ int libxl__device_disk_setdefault(libxl__gc *gc, libxl_device_disk *disk)
{
int rc;
- rc = libxl__device_disk_set_backend(gc, disk);
- if (rc) return rc;
-
rc = libxl__resolve_domid(gc, disk->backend_domname, &disk->backend_domid);
+ if (rc < 0) return rc;
+
+ rc = libxl__device_disk_set_backend(gc, disk);
return rc;
}
@@ -2812,6 +2812,10 @@ int libxl__device_nic_setdefault(libxl__gc *gc, libxl_device_nic *nic,
LOG(ERROR, "unable to get current hotplug scripts execution setting");
return run_hotplug_scripts;
}
+
+ rc = libxl__resolve_domid(gc, nic->backend_domname, &nic->backend_domid);
+ if (rc < 0) return rc;
+
if (nic->backend_domid != LIBXL_TOOLSTACK_DOMID && run_hotplug_scripts) {
LOG(ERROR, "cannot use a backend domain different than %d if"
"hotplug scripts are executed from libxl",
@@ -2837,7 +2841,6 @@ int libxl__device_nic_setdefault(libxl__gc *gc, libxl_device_nic *nic,
abort();
}
- rc = libxl__resolve_domid(gc, nic->backend_domname, &nic->backend_domid);
return rc;
}