|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V2] libxl: relax readonly check introduced by XSA-142 fix
On 11/12/2015 07:40 PM, Jim Fehlig wrote:
> The fix for XSA-142 is quite a big hammer, rejecting readonly
> disk configuration even when the requested backend is known to
> support readonly. While it is true that qemu doesn't support
> readonly for emulated IDE or AHCI 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
>
> $ /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
>
> 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 skiped.
>
> This follow-up patch loosens the restriction to reject readonly when
> creating and emulated IDE or AHCI disk, but allows it when the backend
s/and/an/. I can fix this typo if a V3 is needed.
Regards,
Jim
> is known to support readonly.
>
> Signed-off-by: Jim Fehlig <jfehlig@xxxxxxxx>
> ---
>
> V2: Along with IDE+readonly, blacklist AHCI+readonly since it is not
> supported by qemu either.
>
> tools/libxl/libxl_dm.c | 29 ++++++++++++++++-------------
> 1 file changed, 16 insertions(+), 13 deletions(-)
>
> diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
> index 9c9eaa3..cb6deec 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,38 @@ 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) {
> + if (!disks[i].readwrite) {
> + LOG(ERROR, "qemu-xen doesn't support read-only AHCI
> disk drivers");
> + return ERROR_INVAL;
> + }
> flexarray_vappend(dm_args, "-drive",
>
> GCSPRINTF("file=%s,if=none,id=ahcidisk-%d,format=%s,cache=writeback",
> pdev_path, disk, format),
> "-device",
> GCSPRINTF("ide-hd,bus=ahci0.%d,unit=0,drive=ahcidisk-%d",
> disk, disk), NULL);
> 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 */
> + }
> }
>
> flexarray_append(dm_args, "-drive");
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |