Add return codes support to cpuid_fuzz, ept_finder and hypercallfuzz (tools/vmm)

Signed-off-by: Sae86 <sara.batllori@intel.com>
This commit is contained in:
Sae86
2023-09-24 10:36:11 -07:00
committed by Nathaniel Mitchell
parent 5eaefb6e24
commit aaed42dde1
3 changed files with 21 additions and 9 deletions
+6 -2
View File
@@ -84,6 +84,9 @@ _LOG_OUT_RESULTS = False
class cpuid_fuzz (BaseModule):
def __init__(self):
BaseModule().__init__()
self.rc_res = ModuleResult(17, 'https://chipsec.github.io/modules/chipsec.modules.tools.vmm.cpuid_fuzz.html')
def fuzz_CPUID(self, eax_start, random_order = False):
eax_range = _NO_EAX_TO_FUZZ
@@ -141,5 +144,6 @@ class cpuid_fuzz (BaseModule):
self.logger.log_information('Module completed')
self.logger.log_warning('System may be in an unknown state, further evaluation may be needed.')
self.res = ModuleResult.WARNING
return self.res
self.rc_res.setStatusBit(self.rc_res.status.VERIFY)
self.res = self.rc_res.getReturnCode(ModuleResult.WARNING)
return self.res
+9 -4
View File
@@ -75,6 +75,7 @@ class ept_finder(BaseModule):
BaseModule.__init__(self)
self.read_from_file = False
self.par = []
self.rc_res = ModuleResult(18, 'https://chipsec.github.io/modules/chipsec.modules.tools.vmm.ept_finder.html')
def read_physical_mem(self, addr, size=0x1000):
if self.read_from_file:
@@ -207,21 +208,24 @@ class ept_finder(BaseModule):
else:
self.logger.log_error('Invalid parameters')
self.logger.log(self.__doc__.replace('`', ''))
return ModuleResult.ERROR
self.rc_res.setStatusBit(self.rc_res.status.UNSUPPORTED_OPTION)
return self.rc_res.getReturnCode(ModuleResult.ERROR)
else:
revision_id = self.cs.msr.read_msr(0, 0x480)[0]
self.par = self.get_memory_ranges()
if len(self.par) == 0:
self.logger.log_error("Memory ranges are not defined!")
return ModuleResult.ERROR
self.rc_res.setStatusBit(self.rc_res.status.UNDEFINED_RANGES)
return self.rc_res.getReturnCode(ModuleResult.ERROR)
if (len(module_argv) == 2) and (module_argv[0] == "dump"):
for (pa, end_pa, _) in self.par:
postfix = "lo" if pa == 0x0 else "hi" if pa == 0x100000000 else "0x{:08x}".format(pa)
filename = "{}.dram_{}".format(module_argv[1], postfix)
self.dump_dram(filename, pa, end_pa)
return ModuleResult.PASSED
self.rc_res.setStatusBit(self.rc_res.status.SUCCESS)
return self.rc_res.getReturnCode(ModuleResult.PASSED)
self.logger.log('[*] Searching Extended Page Tables ...')
ept_pt_list = self.find_ept_pt({}, 0, 4)
@@ -255,4 +259,5 @@ class ept_finder(BaseModule):
ept.save_configuration(self.path + 'ept_{:08x}.py'.format(eptp))
count += 1
return ModuleResult.INFORMATION
self.rc_res.setStatusBit(self.rc_res.status.INFORMATION)
return self.rc_res.getReturnCode(ModuleResult.INFORMATION)
+6 -3
View File
@@ -82,6 +82,7 @@ class hypercallfuzz(BaseModule):
def __init__(self):
BaseModule.__init__(self)
self.vmm = VMM(self.cs)
self.rc_res = ModuleResult(19, 'https://chipsec.github.io/modules/chipsec.modules.tools.vmm.hypercallfuzz.html')
self.random_order = True
self.gprs = GPRS
@@ -147,7 +148,8 @@ class hypercallfuzz(BaseModule):
pass
self.logger.log(f'[*] Finished fuzzing: time elapsed {time.time() - t:.3f}')
return ModuleResult.WARNING
self.rc_res.setStatusBit(self.rc_res.status.VERIFY)
return self.rc_res.getReturnCode(ModuleResult.WARNING)
def run(self, module_argv):
self.logger.start_test("Dumb VMM hypercall fuzzer")
@@ -177,5 +179,6 @@ class hypercallfuzz(BaseModule):
self.logger.log_information('Module completed')
self.logger.log_warning('System may be in an unknown state, further evaluation may be needed.')
self.res = ModuleResult.WARNING
return self.res
self.rc_res.setStatusBit(self.rc_res.status.VERIFY)
self.res = self.rc_res.getReturnCode(ModuleResult.WARNING)
return self.res