libxl: Cleanup: Have libxl__alloc_vdev use /libxl

When allocating a vdev for a new disk, look in /libxl/device, rather
than the frontends directory in xenstore.

This is more in line with the other parts of libxl, which ought not to
trust frontends.  In this case, though, there is no security bug prior
to this patch because the frontend is the toolstack domain itself.

If libxl__alloc_vdev were ever changed to take a frontend domain
argument, this patch will fix a latent security bug.

This is a followup to XSA-175.

Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
This commit is contained in:
Ian Jackson authored and Ian Jackson committed 2016-06-06 16:24:41 +01:00
1 parent a0b99aba04
commit 45c12108db
1 file changed
+2 -2
+2 -2
View File
@@ -2627,7 +2627,7 @@ static char * libxl__alloc_vdev(libxl__gc *gc, void *get_vdev_user,
{
const char *blkdev_start = (const char *) get_vdev_user;
int devid = 0, disk = 0, part = 0;
char *dompath = libxl__xs_get_dompath(gc, LIBXL_TOOLSTACK_DOMID);
char *libxl_dom_path = libxl__xs_libxl_path(gc, LIBXL_TOOLSTACK_DOMID);
libxl__device_disk_dev_number(blkdev_start, &disk, &part);
if (part != 0) {
@@ -2642,7 +2642,7 @@ static char * libxl__alloc_vdev(libxl__gc *gc, void *get_vdev_user,
return NULL;
if (libxl__xs_read(gc, t,
libxl__sprintf(gc, "%s/device/vbd/%d/backend",
dompath, devid)) == NULL) {
libxl_dom_path, devid)) == NULL) {
if (errno == ENOENT)
return libxl__devid_to_localdev(gc, devid);
else
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.