[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
Stefano Stabellini wrote: > 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? I just double checked, and good thing since AHCI + readonly is another rejected combination /usr/lib/xen/bin/qemu-system-i386 -device ahci,id=ahci0 \ -drive file=/tmp/disk.raw,if=none,id=ahcidisk-0,format=raw,readonly=on \ -device ide-hd,bus=ahci0.0,unit=0,drive=ahcidisk-0 qemu-system-i386: -device ide-hd,bus=ahci0.0,unit=0,drive=ahcidisk-0: Can't use a read-only drive So IDE/SATA/AHCI are all incompatible with readonly=on. I'll fix this and ammend the commit message in V2. > > >> 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. I can remove the unneeded brackets if desired. That habit comes from working on projects where all if/else blocks are required to have brackets when any one of the blocks requires brackets. Regards, Jim > > >> } >> >> 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 |