From aaed42dde187fc137fbb89e6acdcb5bbebc783bc Mon Sep 17 00:00:00 2001 From: Sae86 Date: Sun, 24 Sep 2023 10:36:11 -0700 Subject: [PATCH] Add return codes support to cpuid_fuzz, ept_finder and hypercallfuzz (tools/vmm) Signed-off-by: Sae86 --- chipsec/modules/tools/vmm/cpuid_fuzz.py | 8 ++++++-- chipsec/modules/tools/vmm/ept_finder.py | 13 +++++++++---- chipsec/modules/tools/vmm/hypercallfuzz.py | 9 ++++++--- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/chipsec/modules/tools/vmm/cpuid_fuzz.py b/chipsec/modules/tools/vmm/cpuid_fuzz.py index 8f1111a2..927a3404 100644 --- a/chipsec/modules/tools/vmm/cpuid_fuzz.py +++ b/chipsec/modules/tools/vmm/cpuid_fuzz.py @@ -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 \ No newline at end of file diff --git a/chipsec/modules/tools/vmm/ept_finder.py b/chipsec/modules/tools/vmm/ept_finder.py index 9bc75f98..e8ebbbd4 100644 --- a/chipsec/modules/tools/vmm/ept_finder.py +++ b/chipsec/modules/tools/vmm/ept_finder.py @@ -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) \ No newline at end of file diff --git a/chipsec/modules/tools/vmm/hypercallfuzz.py b/chipsec/modules/tools/vmm/hypercallfuzz.py index e55aa2b7..7868ec29 100644 --- a/chipsec/modules/tools/vmm/hypercallfuzz.py +++ b/chipsec/modules/tools/vmm/hypercallfuzz.py @@ -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 \ No newline at end of file