From patchwork Wed Oct 19 06:55:52 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [1/2] hw/nand: reject read-only drives Date: Tue, 18 Oct 2011 20:55:52 -0000 From: Juha.Riihimaki@nokia.com X-Patchwork-Id: 120563 Message-Id: <1319007353-16041-2-git-send-email-juha.riihimaki@nokia.com> To: qemu-devel@nongnu.org From: Juha Riihimäki Signed-off-by: Juha Riihimäki --- hw/nand.c | 23 +++++++++++++++-------- 1 files changed, 15 insertions(+), 8 deletions(-) diff --git a/hw/nand.c b/hw/nand.c index c27783e..da6529d 100644 --- a/hw/nand.c +++ b/hw/nand.c @@ -19,6 +19,7 @@ # include "flash.h" # include "blockdev.h" # include "sysbus.h" +#include "qemu-error.h" # define NAND_CMD_READ0 0x00 # define NAND_CMD_READ1 0x01 @@ -384,18 +385,24 @@ static int nand_device_init(SysBusDevice *dev) nand_init_2048(s); break; default: - hw_error("%s: Unsupported NAND block size.\n", __func__); + error_report("Unsupported NAND block size"); + return -1; } - pagesize = 1 << s->oob_shift; s->mem_oob = 1; - if (s->bdrv && bdrv_getlength(s->bdrv) >= + if (s->bdrv) { + if (bdrv_is_read_only(s->bdrv)) { + error_report("Can't use a read-only drive"); + return -1; + } + if (bdrv_getlength(s->bdrv) >= (s->pages << s->page_shift) + (s->pages << s->oob_shift)) { - pagesize = 0; - s->mem_oob = 0; - } - - if (!s->bdrv) { + pagesize = 0; + s->mem_oob = 0; + } else { + pagesize = 1 << s->oob_shift; + } + } else { pagesize += 1 << s->page_shift; } if (pagesize) {