From ff9d3e9cd9f7c41d8b822c0d12b0176d8e7e530d Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Mon, 11 Jul 2016 19:09:12 +0100 Subject: [PATCH 1/2] target-arm: Fix unreachable code in gicv3_class_name() Coverity complains that the exit() in gicv3_class_name() can be unreachable, because if TARGET_AARCH64 is defined then all code paths return before reaching it. Move the exit() up to the error_report() that it belongs with. Signed-off-by: Peter Maydell Reviewed-by: Shannon Zhao Message-id: 1468260552-8400-1-git-send-email-peter.maydell@linaro.org --- target-arm/machine.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/target-arm/machine.c b/target-arm/machine.c index 2dbeb826cd..7a6ca31a8e 100644 --- a/target-arm/machine.c +++ b/target-arm/machine.c @@ -340,10 +340,9 @@ const char *gicv3_class_name(void) #else error_report("KVM GICv3 acceleration is not supported on this " "platform"); + exit(1); #endif } else { return "arm-gicv3"; } - - exit(1); } From acd82796211041c5af43c8c523b85d250c2ccebe Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Mon, 11 Jul 2016 19:22:52 +0100 Subject: [PATCH 2/2] arm_gicv3: Add assert()s to tell Coverity that offsets are aligned Coverity complains that the GICR_IPRIORITYR case in gicv3_readl() can overflow an array, because it doesn't know that the offsets passed to that function must be word aligned. Add some assert()s which hopefully tell Coverity that this isn't possible. Signed-off-by: Peter Maydell Message-id: 1468261372-17508-1-git-send-email-peter.maydell@linaro.org --- hw/intc/arm_gicv3_redist.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/intc/arm_gicv3_redist.c b/hw/intc/arm_gicv3_redist.c index 2f60096e6e..77e5cfa327 100644 --- a/hw/intc/arm_gicv3_redist.c +++ b/hw/intc/arm_gicv3_redist.c @@ -420,6 +420,8 @@ MemTxResult gicv3_redist_read(void *opaque, hwaddr offset, uint64_t *data, MemTxResult r; int cpuidx; + assert((offset & (size - 1)) == 0); + /* This region covers all the redistributor pages; there are * (for GICv3) two 64K pages per CPU. At the moment they are * all contiguous (ie in this one region), though we might later @@ -468,6 +470,8 @@ MemTxResult gicv3_redist_write(void *opaque, hwaddr offset, uint64_t data, MemTxResult r; int cpuidx; + assert((offset & (size - 1)) == 0); + /* This region covers all the redistributor pages; there are * (for GICv3) two 64K pages per CPU. At the moment they are * all contiguous (ie in this one region), though we might later