[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] SCSI-GENERIC: Specify the xfer direction for UNMAP/
From: |
Ronnie Sahlberg |
Subject: |
[Qemu-devel] [PATCH] SCSI-GENERIC: Specify the xfer direction for UNMAP/WRITESAME16/ATAPASSTHROUGH command |
Date: |
Sat, 28 Apr 2012 23:49:36 +1000 |
scsi_cmd_xfer_mode() is used to specify the xfer direction for SCSI commands
that come in from the guest.
If the direction is set incorrectly this will eventually cause QEMU to
kernel-panic the guest.
Add UNMAP/WRITESAME16/ATAPASSTHROUGH as commands that send data to the device.
Without this change, recent kernels will send both UNMAP as well as
ATAPASSTHROUGH commands to any /dev/sg* device, which due to the incorrect xfer
direction very quickly causes the guest kernel to crash.
Example causing a crash without the patch applied:
./x86_64-softmmu/qemu-system-x86_64 -m 1024 -enable-kvm -cdrom
linuxmint-12-gnome-dvd-64bit.iso -drive file=/dev/sg4,if=scsi,bus=0,unit=6
Signed-off-by: Ronnie Sahlberg <address@hidden>
---
hw/scsi-bus.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c
index dbdb99c..bca2be8 100644
--- a/hw/scsi-bus.c
+++ b/hw/scsi-bus.c
@@ -920,6 +920,8 @@ static void scsi_cmd_xfer_mode(SCSICommand *cmd)
case UPDATE_BLOCK:
case WRITE_LONG_10:
case WRITE_SAME_10:
+ case WRITE_SAME_16:
+ case UNMAP:
case SEARCH_HIGH_12:
case SEARCH_EQUAL_12:
case SEARCH_LOW_12:
@@ -929,6 +931,7 @@ static void scsi_cmd_xfer_mode(SCSICommand *cmd)
case SEND_DVD_STRUCTURE:
case PERSISTENT_RESERVE_OUT:
case MAINTENANCE_OUT:
+ case ATA_PASSTHROUGH:
cmd->mode = SCSI_XFER_TO_DEV;
break;
default:
--
1.7.3.1