[ubsan] fix some bugs and warnings discovered by ubsan
- X86 cpuid feature list dump was using the wrong array and walking off the end of one. - GICv2 code had a left shift by up to 31 of an integer. Needs to be unsigned. - PLIC same as GIC code. - fdtwalker code should be using a bytewise accessor based helper function for reading large integers out of an unaliged FDT. - PCI BIOS32 search code could do a 32bit unaligned read of a string, switch to using memcmp.
This commit is contained in:
@@ -229,7 +229,7 @@ static void x86_feature_dump_cpuid(void) {
|
||||
for (uint32_t i = X86_CPUID_EXT_BASE; i <= max_cpuid_leaf_ext; i++) {
|
||||
uint32_t index = i - X86_CPUID_EXT_BASE;
|
||||
printf("X86: cpuid leaf %#x: %08x %08x %08x %08x\n", i,
|
||||
saved_cpuids[index].a, saved_cpuids[index].b, saved_cpuids[index].c, saved_cpuids[index].d);
|
||||
saved_cpuids_ext[index].a, saved_cpuids_ext[index].b, saved_cpuids_ext[index].c, saved_cpuids_ext[index].d);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -105,7 +105,8 @@ enum x86_cpuid_leaf_num {
|
||||
X86_CPUID_BRAND = 0x80000002,
|
||||
X86_CPUID_ADDR_WIDTH = 0x80000008,
|
||||
X86_CPUID_AMD_TOPOLOGY = 0x8000001e,
|
||||
__X86_MAX_SUPPORTED_CPUID_EXT = X86_CPUID_AMD_TOPOLOGY,
|
||||
X86_CPUID_AMD_EXTENDED_TOPOLOGY = 0x80000025,
|
||||
__X86_MAX_SUPPORTED_CPUID_EXT = X86_CPUID_AMD_EXTENDED_TOPOLOGY,
|
||||
};
|
||||
|
||||
struct x86_cpuid_bit {
|
||||
|
||||
Reference in New Issue
Block a user