If the user passed in values outside the range of [0, MAX_NR_PROCESSORS),
it would cause the code to access out-of-bind engine function pointers.
Add some asserts to catch that and to fix the related compiler warnings.
+2021-06-27 Mike Frysinger <vapier@gentoo.org>
+
+ * cgen-run.c (engine_run_n): Assert cpu arguments are valid.
+
2021-06-27 Mike Frysinger <vapier@gentoo.org>
* cgen-trace.h (cgen_trace_printf): Add ATTRIBUTE_PRINTF_2.
int i;
ENGINE_FN *engine_fns[MAX_NR_PROCESSORS];
+ SIM_ASSERT (nr_cpus <= MAX_NR_PROCESSORS);
+ SIM_ASSERT (next_cpu_nr >= 0 && next_cpu_nr < nr_cpus);
+
for (i = 0; i < nr_cpus; ++i)
{
SIM_CPU *cpu = STATE_CPU (sd, i);
SIM_ENGINE_PREFIX_HOOK (sd);
/* FIXME: proper cycling of all of them, blah blah blah. */
- while (next_cpu_nr != nr_cpus)
+ while (next_cpu_nr < nr_cpus)
{
SIM_CPU *cpu = STATE_CPU (sd, next_cpu_nr);