qemu-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]