sim: Prevent segfault in the wakeCpu m5op if id is invalid
authorJose Marinho <jose.marinho@arm.com>
Wed, 21 Jun 2017 12:41:04 +0000 (13:41 +0100)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Thu, 20 Jul 2017 09:38:47 +0000 (09:38 +0000)
Change-Id: I86229cedb206e10326cdee3f09a5c871e49c8d48
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/3965

src/sim/pseudo_inst.cc

index 8c2d26b00ed51a5a4777a209333f7d6ba119979a..778675fd306c4c3baeb14d278f8ccfe925447acc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2012, 2015 ARM Limited
+ * Copyright (c) 2010-2012, 2015, 2017 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -285,6 +285,13 @@ wakeCPU(ThreadContext *tc, uint64_t cpuid)
 {
     DPRINTF(PseudoInst, "PseudoInst::wakeCPU(%i)\n", cpuid);
     System *sys = tc->getSystemPtr();
+
+    if (sys->numContexts() <= cpuid) {
+        warn("PseudoInst::wakeCPU(%i), cpuid greater than number of contexts"
+             "(%i)\n",cpuid, sys->numContexts());
+        return;
+    }
+
     ThreadContext *other_tc = sys->threadContexts[cpuid];
     if (other_tc->status() == ThreadContext::Suspended)
         other_tc->activate();