changeset 72890a571a7b in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=72890a571a7b
description:
        dev: Avoid invalid sized reads in PL390 with DPRINTF enabled

        The first DPRINTF() in PL390::writeDistributor always read a uint32_t, 
though a
        packet may have only been 1 or 2 bytes.  This caused an assertion in
        packet->get().

diffstat:

 src/dev/arm/gic_pl390.cc |  19 ++++++++++++++++++-
 1 files changed, 18 insertions(+), 1 deletions(-)

diffs (30 lines):

diff -r 82a4fa2d19a0 -r 72890a571a7b src/dev/arm/gic_pl390.cc
--- a/src/dev/arm/gic_pl390.cc  Wed Sep 03 07:42:25 2014 -0400
+++ b/src/dev/arm/gic_pl390.cc  Wed Sep 03 07:42:27 2014 -0400
@@ -395,8 +395,25 @@
     assert(pkt->req->hasContextId());
     int ctx_id = pkt->req->contextId();
 
+    uint32_t pkt_data M5_VAR_USED;
+    switch (pkt->getSize())
+    {
+      case 1:
+        pkt_data = pkt->get<uint8_t>();
+        break;
+      case 2:
+        pkt_data = pkt->get<uint16_t>();
+        break;
+      case 4:
+        pkt_data = pkt->get<uint32_t>();
+        break;
+      default:
+        panic("Invalid size when writing to priority regs in Gic: %d\n",
+              pkt->getSize());
+    }
+
     DPRINTF(GIC, "gic distributor write register %#x size %#x value %#x \n",
-            daddr, pkt->getSize(), pkt->get<uint32_t>());
+            daddr, pkt->getSize(), pkt_data);
 
     if (daddr >= ICDISER_ST && daddr < ICDISER_ED + 4) {
         assert((daddr-ICDISER_ST) >> 2 < 32);
_______________________________________________
gem5-dev mailing list
gem5-dev@gem5.org
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to