mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
libxl: Specify format of inserted cdrom
Without this extra parameter on the QMP command, QEMU will guess the
format of the new file.
This is XSA-258.
Reported-by: Anthony PERARD <anthony.perard@citrix.com>
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
master commit: d8f65e68a7
master date: 2018-04-25 14:38:47 +0200
This commit is contained in:
1 parent
501718a68c
commit
a2f02dfdcb
4 files changed
+17
-14
No files matched your search
@@ -425,6 +425,18 @@ char *libxl__device_disk_string_of_backend(libxl_disk_backend backend)
|
||||
}
|
||||
}
|
||||
|
||||
const char *libxl__qemu_disk_format_string(libxl_disk_format format)
|
||||
{
|
||||
switch (format) {
|
||||
case LIBXL_DISK_FORMAT_QCOW: return "qcow";
|
||||
case LIBXL_DISK_FORMAT_QCOW2: return "qcow2";
|
||||
case LIBXL_DISK_FORMAT_VHD: return "vpc";
|
||||
case LIBXL_DISK_FORMAT_RAW: return "raw";
|
||||
case LIBXL_DISK_FORMAT_EMPTY: return NULL;
|
||||
default: return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
int libxl__device_physdisk_major_minor(const char *physpath, int *major, int *minor)
|
||||
{
|
||||
struct stat buf;
|
||||
|
||||
+2
-14
@@ -669,18 +669,6 @@ static int libxl__build_device_model_args_old(libxl__gc *gc,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char *qemu_disk_format_string(libxl_disk_format format)
|
||||
{
|
||||
switch (format) {
|
||||
case LIBXL_DISK_FORMAT_QCOW: return "qcow";
|
||||
case LIBXL_DISK_FORMAT_QCOW2: return "qcow2";
|
||||
case LIBXL_DISK_FORMAT_VHD: return "vpc";
|
||||
case LIBXL_DISK_FORMAT_RAW: return "raw";
|
||||
case LIBXL_DISK_FORMAT_EMPTY: return NULL;
|
||||
default: return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static char *dm_spice_options(libxl__gc *gc,
|
||||
const libxl_spice_info *spice)
|
||||
{
|
||||
@@ -1342,9 +1330,9 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
|
||||
* always raw
|
||||
*/
|
||||
if (disks[i].backend == LIBXL_DISK_BACKEND_QDISK)
|
||||
format = qemu_disk_format_string(disks[i].format);
|
||||
format = libxl__qemu_disk_format_string(disks[i].format);
|
||||
else
|
||||
format = qemu_disk_format_string(LIBXL_DISK_FORMAT_RAW);
|
||||
format = libxl__qemu_disk_format_string(LIBXL_DISK_FORMAT_RAW);
|
||||
|
||||
if (disks[i].format == LIBXL_DISK_FORMAT_EMPTY) {
|
||||
if (!disks[i].is_cdrom) {
|
||||
|
||||
@@ -1170,6 +1170,7 @@ _hidden int libxl__domain_pvcontrol_write(libxl__gc *gc, xs_transaction_t t,
|
||||
/* from xl_device */
|
||||
_hidden char *libxl__device_disk_string_of_backend(libxl_disk_backend backend);
|
||||
_hidden char *libxl__device_disk_string_of_format(libxl_disk_format format);
|
||||
_hidden const char *libxl__qemu_disk_format_string(libxl_disk_format format);
|
||||
_hidden int libxl__device_disk_set_backend(libxl__gc*, libxl_device_disk*);
|
||||
|
||||
_hidden int libxl__device_physdisk_major_minor(const char *physpath, int *major, int *minor);
|
||||
|
||||
@@ -982,6 +982,8 @@ int libxl__qmp_insert_cdrom(libxl__gc *gc, int domid,
|
||||
return qmp_run_command(gc, domid, "eject", args, NULL, NULL);
|
||||
} else {
|
||||
qmp_parameters_add_string(gc, &args, "target", disk->pdev_path);
|
||||
qmp_parameters_add_string(gc, &args, "arg",
|
||||
libxl__qemu_disk_format_string(disk->format));
|
||||
return qmp_run_command(gc, domid, "change", args, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||