mirror of
https://github.com/chipsec/chipsec
synced 2026-06-08 13:31:00 +00:00
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:
committed by
Nathaniel Mitchell
parent
5eaefb6e24
commit
aaed42dde1
@@ -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
|
||||
@@ -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)
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user