[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 11/27] ide: fail I/O to empty disk
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 11/27] ide: fail I/O to empty disk |
Date: |
Wed, 29 Feb 2012 16:17:52 +0100 |
From: Paolo Bonzini <address@hidden>
Requesting a read or a write operation on an empty disk can lead
to QEMU dumping core.
Also fix a few braces here and there.
Signed-off-by: Paolo Bonzini <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
hw/ide/core.c | 24 ++++++++++++++++++++----
1 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/hw/ide/core.c b/hw/ide/core.c
index ce570a7..4d568ac 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -1068,6 +1068,9 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val)
ide_set_signature(s); /* odd, but ATA4 8.27.5.2 requires it */
goto abort_cmd;
}
+ if (!s->bs) {
+ goto abort_cmd;
+ }
ide_cmd_lba48_transform(s, lba48);
s->req_nb_sectors = 1;
ide_sector_read(s);
@@ -1078,6 +1081,9 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val)
case WIN_WRITE_ONCE:
case CFA_WRITE_SECT_WO_ERASE:
case WIN_WRITE_VERIFY:
+ if (!s->bs) {
+ goto abort_cmd;
+ }
ide_cmd_lba48_transform(s, lba48);
s->error = 0;
s->status = SEEK_STAT | READY_STAT;
@@ -1088,8 +1094,12 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val)
case WIN_MULTREAD_EXT:
lba48 = 1;
case WIN_MULTREAD:
- if (!s->mult_sectors)
+ if (!s->bs) {
goto abort_cmd;
+ }
+ if (!s->mult_sectors) {
+ goto abort_cmd;
+ }
ide_cmd_lba48_transform(s, lba48);
s->req_nb_sectors = s->mult_sectors;
ide_sector_read(s);
@@ -1098,8 +1108,12 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val)
lba48 = 1;
case WIN_MULTWRITE:
case CFA_WRITE_MULTI_WO_ERASE:
- if (!s->mult_sectors)
+ if (!s->bs) {
goto abort_cmd;
+ }
+ if (!s->mult_sectors) {
+ goto abort_cmd;
+ }
ide_cmd_lba48_transform(s, lba48);
s->error = 0;
s->status = SEEK_STAT | READY_STAT;
@@ -1114,8 +1128,9 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val)
lba48 = 1;
case WIN_READDMA:
case WIN_READDMA_ONCE:
- if (!s->bs)
+ if (!s->bs) {
goto abort_cmd;
+ }
ide_cmd_lba48_transform(s, lba48);
ide_sector_start_dma(s, IDE_DMA_READ);
break;
@@ -1123,8 +1138,9 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val)
lba48 = 1;
case WIN_WRITEDMA:
case WIN_WRITEDMA_ONCE:
- if (!s->bs)
+ if (!s->bs) {
goto abort_cmd;
+ }
ide_cmd_lba48_transform(s, lba48);
ide_sector_start_dma(s, IDE_DMA_WRITE);
s->media_changed = 1;
--
1.7.6.5
- [Qemu-devel] [PATCH 03/27] fdc: most control commands do not generate interrupts, (continued)
- [Qemu-devel] [PATCH 03/27] fdc: most control commands do not generate interrupts, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 08/27] fdc: check if media rate is correct before doing any transfer, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 09/27] fdc: fix seek command, which shouldn't check tracks, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 02/27] fdc: set busy bit when starting a command, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 12/27] qcow2: Fix build with DEBUG_EXT enabled, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 18/27] QMP: Add qmp command for blockdev-group-snapshot-sync, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 01/27] fdc: take side count into account, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 10/27] fdc: DIR (Digital Input Register) should return status of current drive..., Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 16/27] qcow2: Reject too large header extensions, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 14/27] block: drop aio_multiwrite in BlockDriver, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 11/27] ide: fail I/O to empty disk,
Kevin Wolf <=
- [Qemu-devel] [PATCH 22/27] qemu-iotests: Filter out DOS line endings, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 13/27] block: remove unused fields in BlockDriverState, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 15/27] qcow2: Fix offset in qcow2_read_extensions, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 06/27] block: add a transfer rate for floppy types, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 07/27] fdc: add a 'check media rate' property. Not used yet, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 19/27] qemu-iotests: export TEST_DIR for non-bash tests, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 27/27] qemu-img: fix segment fault when the image format is qed, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 05/27] fdc: add CCR (Configuration Control Register) write register, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 23/27] qemu-iotests: 026: Reduce output changes for cache=none qcow2, Kevin Wolf, 2012/02/29
- [Qemu-devel] [PATCH 26/27] qemu-io: fix segment fault when the image format is qed, Kevin Wolf, 2012/02/29