]> git.proxmox.com Git - mirror_qemu.git/commitdiff
ppc/pnv: fix check on return value of blk_getlength()
authorCédric Le Goater <clg@kaod.org>
Tue, 7 Jan 2020 17:18:09 +0000 (18:18 +0100)
committerDavid Gibson <david@gibson.dropbear.id.au>
Wed, 8 Jan 2020 01:01:14 +0000 (12:01 +1100)
blk_getlength() returns an int64_t but the result is stored in a
uint32_t. Errors (negative values) won't be caught by the check in
pnv_pnor_realize() and blk_blockalign() will allocate a very large
buffer in such cases.

Fixes Coverity issue CID 1412226.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Message-Id: <20200107171809.15556-3-clg@kaod.org>
Reviewed-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
hw/ppc/pnv_pnor.c
include/hw/ppc/pnv_pnor.h

index 0e86ae2feae673ebe6383a744373184f824b52fd..b061106d1c0cb2163231ae1bcbe44768dd162b80 100644 (file)
@@ -111,7 +111,7 @@ static void pnv_pnor_realize(DeviceState *dev, Error **errp)
 }
 
 static Property pnv_pnor_properties[] = {
-    DEFINE_PROP_UINT32("size", PnvPnor, size, 128 << 20),
+    DEFINE_PROP_INT64("size", PnvPnor, size, 128 << 20),
     DEFINE_PROP_DRIVE("drive", PnvPnor, blk),
     DEFINE_PROP_END_OF_LIST(),
 };
index c3dd28643cae32ed63d1259ccb45a33345252cf8..4f96abdfb402c480c48586e98ab3f3494fe1e07b 100644 (file)
@@ -23,7 +23,7 @@ typedef struct PnvPnor {
     BlockBackend   *blk;
 
     uint8_t        *storage;
-    uint32_t       size;
+    int64_t        size;
     MemoryRegion   mmio;
 } PnvPnor;