mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
libxl: restore passing "readonly=" to qemu for SCSI disks
A read-only check was introduced for XSA-142, commitef6cb76026("libxl: relax readonly check introduced by XSA-142 fix") added the passing of the extra setting, but commitdab0539568("Introduce COLO mode and refactor relevant function") dropped the passing of the setting again, quite likely due to improper re-basing. Restore the readonly= parameter to SCSI disks. For IDE disks this is supposed to be rejected; add an assert. And there is a bare ad-hoc disk drive string in libxl__build_device_model_args_new, which we also update. This is XSA-266. Reported-by: Andrew Reimers <andrew.reimers@orionvm.com> Signed-off-by: Jan Beulich <jbeulich@suse.com> Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com> master commit:dd64d3c41amaster date: 2018-06-28 09:05:06 +0200
This commit is contained in:
1 parent
b2444d2f81
commit
23081587da
1 file changed
+7
-3
@@ -798,7 +798,8 @@ static char *qemu_disk_scsi_drive_string(libxl__gc *gc, const char *target_path,
|
||||
int colo_mode)
|
||||
{
|
||||
char *drive = NULL;
|
||||
char *common = GCSPRINTF("cache=writeback");
|
||||
char *common = GCSPRINTF("cache=writeback,readonly=%s",
|
||||
disk->readwrite ? "off" : "on");
|
||||
const char *exportname = disk->colo_export;
|
||||
const char *active_disk = disk->active_disk;
|
||||
const char *hidden_disk = disk->hidden_disk;
|
||||
@@ -867,6 +868,8 @@ static char *qemu_disk_ide_drive_string(libxl__gc *gc, const char *target_path,
|
||||
const char *exportname = disk->colo_export;
|
||||
const char *active_disk = disk->active_disk;
|
||||
const char *hidden_disk = disk->hidden_disk;
|
||||
|
||||
assert(disk->readwrite); /* should have been checked earlier */
|
||||
|
||||
switch (colo_mode) {
|
||||
case LIBXL__COLO_NONE:
|
||||
@@ -1576,8 +1579,9 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
|
||||
if (strncmp(disks[i].vdev, "sd", 2) == 0) {
|
||||
if (colo_mode == LIBXL__COLO_SECONDARY) {
|
||||
drive = libxl__sprintf
|
||||
(gc, "if=none,driver=%s,file=%s,id=%s",
|
||||
format, target_path, disks[i].colo_export);
|
||||
(gc, "if=none,driver=%s,file=%s,id=%s,readonly=%s",
|
||||
format, target_path, disks[i].colo_export,
|
||||
disks[i].readwrite ? "off" : "on");
|
||||
|
||||
flexarray_append(dm_args, "-drive");
|
||||
flexarray_append(dm_args, drive);
|
||||
|
||||