diff options
author | Jacob Garber <jgarber1@ualberta.ca> | 2019-05-28 11:47:49 -0600 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2019-05-29 20:11:50 +0000 |
commit | 5b922726e1220585cbae4e0392817dcca3a2b11f (patch) | |
tree | b4380b10e57720697a64ea522a7be1acd8e96498 /src/cpu | |
parent | bdcb4d37506f04e205f11ff45fd0925cf2a5cbc1 (diff) | |
download | coreboot-5b922726e1220585cbae4e0392817dcca3a2b11f.tar.gz coreboot-5b922726e1220585cbae4e0392817dcca3a2b11f.tar.bz2 coreboot-5b922726e1220585cbae4e0392817dcca3a2b11f.zip |
cpu/x86/mtrr: Assert that MSR arrays are fully initialized
The initialization logic for the fixed_msrs and msr_index arrays depends
on the contents of the fixed MTRR descriptor. However, Coverity is unable
to check these values and believes (incorrectly) that the arrays may not
be entirely initialized. An assert was added in commit b28025a434 to
ensure that one of the loops is entered, but it is simplest to just
check that msr_num has iterated over the entire array after the loops
are over. This also acts as a sanity check that the values in the MTRR
descriptor were hardcoded correctly.
Change-Id: Ia573792f74aa6ea5e659c1e2253f112184fbb0a5
Signed-off-by: Jacob Garber <jgarber1@ualberta.ca>
Found-by: Coverity CID 1370582
Reviewed-on: https://review.coreboot.org/c/coreboot/+/33048
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Lance Zhao <lance.zhao@gmail.com>
Diffstat (limited to 'src/cpu')
-rw-r--r-- | src/cpu/x86/mtrr/mtrr.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/cpu/x86/mtrr/mtrr.c b/src/cpu/x86/mtrr/mtrr.c index d87c3d43d304..60eee319ceec 100644 --- a/src/cpu/x86/mtrr/mtrr.c +++ b/src/cpu/x86/mtrr/mtrr.c @@ -331,7 +331,6 @@ static void commit_fixed_mtrrs(void) desc = &fixed_mtrr_desc[i]; num_ranges = (desc->end - desc->begin) / desc->step; - ASSERT(num_ranges > 0); for (j = 0; j < num_ranges; j += RANGES_PER_FIXED_MTRR) { msr_index[msr_num] = desc->msr_index_base + (j / RANGES_PER_FIXED_MTRR); @@ -355,6 +354,9 @@ static void commit_fixed_mtrrs(void) } } + /* Ensure that both arrays were fully initialized */ + ASSERT(msr_num == NUM_FIXED_MTRRS) + for (i = 0; i < ARRAY_SIZE(fixed_msrs); i++) printk(BIOS_DEBUG, "MTRR: Fixed MSR 0x%lx 0x%08x%08x\n", msr_index[i], fixed_msrs[i].hi, fixed_msrs[i].lo); |