mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +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>
This commit is contained in:
1 parent
724e5aa31b
commit
dd64d3c41a
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, const char **id_ptr)
|
||||
{
|
||||
char *drive = NULL;
|
||||
char *common = GCSPRINTF("if=none,cache=writeback");
|
||||
char *common = GCSPRINTF("if=none,readonly=%s,cache=writeback",
|
||||
disk->readwrite ? "off" : "on");
|
||||
const char *exportname = disk->colo_export;
|
||||
const char *active_disk = disk->active_disk;
|
||||
const char *hidden_disk = disk->hidden_disk;
|
||||
@@ -852,6 +853,8 @@ static char *qemu_disk_ide_drive_string(libxl__gc *gc, const char *target_path,
|
||||
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:
|
||||
drive = GCSPRINTF
|
||||
@@ -1574,8 +1577,9 @@ static int libxl__build_device_model_args_new(libxl__gc *gc,
|
||||
const char *drive_id;
|
||||
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);
|
||||
|
||||