mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
libxl: Do not trust backend for cdrom insert
Use the /libxl path where appropriate. Rename `path' variable to `be_path' to make sure we caught all the occurrences. Specifically, when checking that the device still exists, check the `frontend' value in /libxl, rather than anything in the backend directory. This is part of XSA-178. Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com> Reviewed-by: Wei Liu <wei.liu2@citrix.com>
This commit is contained in:
1 parent
29225b2973
commit
3cc74772fd
1 file changed
+10
-10
+10
-10
@@ -2900,7 +2900,7 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
|
||||
libxl_domain_config d_config;
|
||||
int rc, dm_ver;
|
||||
libxl__device device;
|
||||
const char *path, *libxl_path;
|
||||
const char *be_path, *libxl_path;
|
||||
char * tmp;
|
||||
libxl__domain_userdata_lock *lock = NULL;
|
||||
xs_transaction_t t = XBT_NULL;
|
||||
@@ -2973,7 +2973,7 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
|
||||
rc = libxl__device_from_disk(gc, domid, disk, &device);
|
||||
if (rc) goto out;
|
||||
|
||||
path = libxl__device_backend_path(gc, &device);
|
||||
be_path = libxl__device_backend_path(gc, &device);
|
||||
libxl_path = libxl__device_libxl_path(gc, &device);
|
||||
|
||||
insert = flexarray_make(gc, 4, 1);
|
||||
@@ -3013,19 +3013,19 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
|
||||
for (;;) {
|
||||
rc = libxl__xs_transaction_start(gc, &t);
|
||||
if (rc) goto out;
|
||||
/* Sanity check: make sure the backend exists before writing here */
|
||||
tmp = libxl__xs_read(gc, t, GCSPRINTF("%s/frontend", path));
|
||||
/* Sanity check: make sure the device exists before writing here */
|
||||
tmp = libxl__xs_read(gc, t, GCSPRINTF("%s/frontend", libxl_path));
|
||||
if (!tmp)
|
||||
{
|
||||
LOG(ERROR, "Internal error: %s does not exist",
|
||||
GCSPRINTF("%s/frontend", path));
|
||||
GCSPRINTF("%s/frontend", libxl_path));
|
||||
rc = ERROR_FAIL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
char **kvs = libxl__xs_kvs_of_flexarray(gc, empty, empty->count);
|
||||
|
||||
rc = libxl__xs_writev(gc, t, path, kvs);
|
||||
rc = libxl__xs_writev(gc, t, be_path, kvs);
|
||||
if (rc) goto out;
|
||||
|
||||
rc = libxl__xs_writev(gc, t, libxl_path, kvs);
|
||||
@@ -3052,12 +3052,12 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
|
||||
for (;;) {
|
||||
rc = libxl__xs_transaction_start(gc, &t);
|
||||
if (rc) goto out;
|
||||
/* Sanity check: make sure the backend exists before writing here */
|
||||
tmp = libxl__xs_read(gc, t, GCSPRINTF("%s/frontend", path));
|
||||
/* Sanity check: make sure the device exists before writing here */
|
||||
tmp = libxl__xs_read(gc, t, GCSPRINTF("%s/frontend", libxl_path));
|
||||
if (!tmp)
|
||||
{
|
||||
LOG(ERROR, "Internal error: %s does not exist",
|
||||
GCSPRINTF("%s/frontend", path));
|
||||
GCSPRINTF("%s/frontend", libxl_path));
|
||||
rc = ERROR_FAIL;
|
||||
goto out;
|
||||
}
|
||||
@@ -3067,7 +3067,7 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
|
||||
|
||||
char **kvs = libxl__xs_kvs_of_flexarray(gc, insert, insert->count);
|
||||
|
||||
rc = libxl__xs_writev(gc, t, path, kvs);
|
||||
rc = libxl__xs_writev(gc, t, be_path, kvs);
|
||||
if (rc) goto out;
|
||||
|
||||
rc = libxl__xs_writev(gc, t, libxl_path, kvs);
|
||||
|
||||