[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC] libxl: relax readonly check introduced by XSA-142 fix
On Wed, 11 Nov 2015, Jim Fehlig wrote: > Hi All, > > Apologies for only noticing the fix for XSA-142 as it starting flowing to our > various downstreams. The current fix seems like quite a big hammer IMO. qemu > doesn't support readonly IDE/SATA disks > > # /usr/lib/xen/bin/qemu-system-i386 -drive > file=/tmp/disk.raw,if=ide,media=disk,format=raw,readonly=on > qemu-system-i386: Can't use a read-only drive > > But it does support readonly SCSI disks > > # /usr/lib/xen/bin/qemu-system-i386 -drive > file=/tmp/disk.raw,if=scsi,media=disk,format=raw,readonly=on > [ok] > > Inside a guest using such a disk, the SCSI kernel driver sees write protect on > > [ 7.339232] sd 2:0:1:0: [sdb] Write Protect is on > > Also, PV drivers support readonly, but the patch rejects such configuration > even > when PV drivers (vdev=xvd*) have been explicitly specified and creation of an > emulated twin is skipped. > > The attached follow-up loosens the restriction to reject readonly when > creating > and emulated IDE disk, but allows it when the backend is known to support > readonly. > > Regards, > Jim Hi Jim, thanks for the patch, I think is good. Just one question below: > diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c > index 9c9eaa3..ccfc827 100644 > --- a/tools/libxl/libxl_dm.c > +++ b/tools/libxl/libxl_dm.c > @@ -1152,12 +1152,6 @@ static int > libxl__build_device_model_args_new(libxl__gc *gc, > (gc, > "file=%s,if=ide,index=%d,readonly=%s,media=cdrom,format=%s,cache=writeback,id=ide-%i", > disks[i].pdev_path, disk, disks[i].readwrite ? > "off" : "on", format, dev_number); > } else { > - if (!disks[i].readwrite) { > - LOG(ERROR, > - "qemu-xen doesn't support read-only disk drivers"); > - return ERROR_INVAL; > - } > - > if (disks[i].format == LIBXL_DISK_FORMAT_EMPTY) { > LOG(WARN, "cannot support"" empty disk format for %s", > disks[i].vdev); > @@ -1185,29 +1179,34 @@ static int > libxl__build_device_model_args_new(libxl__gc *gc, > * For other disks we translate devices 0..3 into > * hd[a-d] and ignore the rest. > */ > - if (strncmp(disks[i].vdev, "sd", 2) == 0) > + if (strncmp(disks[i].vdev, "sd", 2) == 0) { > drive = libxl__sprintf > - (gc, > "file=%s,if=scsi,bus=0,unit=%d,format=%s,cache=writeback", > - pdev_path, disk, format); > - else if (strncmp(disks[i].vdev, "xvd", 3) == 0) > + (gc, > "file=%s,if=scsi,bus=0,unit=%d,format=%s,readonly=%s,cache=writeback", > + pdev_path, disk, format, disks[i].readwrite ? "off" > : "on"); > + } else if (strncmp(disks[i].vdev, "xvd", 3) == 0) { > /* > * Do not add any emulated disk when PV disk are > * explicitly asked for. > */ > continue; > - else if (disk < 6 && b_info->u.hvm.hdtype == > LIBXL_HDTYPE_AHCI) { > + } else if (disk < 6 && b_info->u.hvm.hdtype == > LIBXL_HDTYPE_AHCI) { > flexarray_vappend(dm_args, "-drive", > - > GCSPRINTF("file=%s,if=none,id=ahcidisk-%d,format=%s,cache=writeback", > - pdev_path, disk, format), > + > GCSPRINTF("file=%s,if=none,id=ahcidisk-%d,format=%s,readonly=%s,cache=writeback", > + pdev_path, disk, format, > disks[i].readwrite ? "off" : "on"), > "-device", > GCSPRINTF("ide-hd,bus=ahci0.%d,unit=0,drive=ahcidisk-%d", > disk, disk), NULL); The commit message doesn't say anything about AHCI. Are AHCI disks actually emulated correctly by QEMU with readonly=on? > continue; > - } else if (disk < 4) > + } else if (disk < 4) { > + if (!disks[i].readwrite) { > + LOG(ERROR, "qemu-xen doesn't support read-only IDE > disk drivers"); > + return ERROR_INVAL; > + } > drive = libxl__sprintf > (gc, > "file=%s,if=ide,index=%d,media=disk,format=%s,cache=writeback", > pdev_path, disk, format); > - else > + } else { > continue; /* Do not emulate this disk */ > + } I don't think that libxl CODING_STYLE requires brackets for one statement blocks. But I won't enforce it. > } > > flexarray_append(dm_args, "-drive"); > -- > 1.8.0.1 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |