From bbfddf66cbbc57edda6d130e6e9b7c676f58d09a Mon Sep 17 00:00:00 2001 From: anthraxx Date: Tue, 26 Jun 2018 00:21:10 +0200 Subject: [PATCH] support logical OR operations on options The OR class implementation supports combining Opt's logically with an or-operator. If any of the Opt's provided to the OR class returns True, the check is considered OK. Fixes #1 Conflicts resolved by @a13xp0p0v --- kconfig-hardened-check.py | 41 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/kconfig-hardened-check.py b/kconfig-hardened-check.py index 30f3d17..89b343e 100755 --- a/kconfig-hardened-check.py +++ b/kconfig-hardened-check.py @@ -49,6 +49,41 @@ class OptCheck: return '{} = {}'.format(self.name, self.state) +class OR: + def __init__(self, *opts): + self.opts = opts + self.result = None + + @property + def name(self): + return self.opts[0].name + + @property + def expected(self): + return self.opts[0].expected + + @property + def state(self): + return self.opts[0].state + + @property + def decision(self): + return self.opts[0].decision + + @property + def reason(self): + return self.opts[0].reason + + def check(self): + for opt in self.opts: + result, msg = opt.check() + if result: + self.result = 'OK (CONFIG_{} {})'.format(opt.name, opt.state) + return result, self.result + self.result = 'FAIL: "{}"'.format(self.opts[0].state) + return False, self.result + + def construct_opt_checks(): checklist.append(OptCheck('BUG', 'y', 'ubuntu18', 'self_protection')) checklist.append(OptCheck('PAGE_TABLE_ISOLATION', 'y', 'ubuntu18', 'self_protection')) @@ -178,7 +213,11 @@ def get_option_state(options, name): def perform_checks(parsed_options): for opt in checklist: - opt.state = get_option_state(parsed_options, opt.name) + if hasattr(opt, 'opts'): + for o in opt.opts: + o.state = get_option_state(parsed_options, o.name) + else: + opt.state = get_option_state(parsed_options, opt.name) opt.check() -- 2.31.1