projects
/
kconfig-hardened-check.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
79beb2d
)
Make populate_with_data() aware of data type
author
Alexander Popov
<alex.popov@linux.com>
Mon, 14 Feb 2022 21:18:50 +0000
(
00:18
+0300)
committer
Alexander Popov
<alex.popov@linux.com>
Mon, 14 Feb 2022 22:03:09 +0000
(
01:03
+0300)
kconfig_hardened_check/__init__.py
patch
|
blob
|
history
diff --git
a/kconfig_hardened_check/__init__.py
b/kconfig_hardened_check/__init__.py
index 02d02818d893fc082309f141ec2a6e1ea3374739..5092742fcc4e5392fd01d38b3dc87faee30d0d91 100644
(file)
--- a/
kconfig_hardened_check/__init__.py
+++ b/
kconfig_hardened_check/__init__.py
@@
-81,6
+81,7
@@
import re
import json
from .__about__ import __version__
import json
from .__about__ import __version__
+TYPES_OF_CHECKS = ('kconfig', 'version')
class OptCheck:
def __init__(self, reason, decision, name, expected):
class OptCheck:
def __init__(self, reason, decision, name, expected):
@@
-693,27
+694,37
@@
def print_checklist(mode, checklist, with_results):
print('[+] Config check is finished: \'OK\' - {}{} / \'FAIL\' - {}{}'.format(ok_count, ok_suppressed, fail_count, fail_suppressed))
print('[+] Config check is finished: \'OK\' - {}{} / \'FAIL\' - {}{}'.format(ok_count, ok_suppressed, fail_count, fail_suppressed))
-def populate_opt_with_data(opt, parsed_options, kernel_version):
+def populate_simple_opt_with_data(opt, data, data_type):
+ if hasattr(opt, 'opts'):
+ sys.exit('[!] ERROR: unexpected ComplexOptCheck {}: {}'.format(opt.name, vars(opt)))
+ if data_type not in TYPES_OF_CHECKS:
+ sys.exit('[!] ERROR: invalid data type "{}"'.format(data_type))
+ if data_type != opt.type:
+ return
+ if data_type == 'kconfig':
+ opt.state = data.get(opt.name, None)
+ elif data_type == 'version':
+ opt.ver = data
+
+
+def populate_opt_with_data(opt, data, data_type):
if hasattr(opt, 'opts'):
if hasattr(opt, 'opts'):
- # prepare ComplexOptCheck
for o in opt.opts:
if hasattr(o, 'opts'):
for o in opt.opts:
if hasattr(o, 'opts'):
- # Recursion for nested ComplexOptChecks
- populate_opt_with_data(o, parsed_options, kernel_version)
- if hasattr(o, 'state'):
- o.state = parsed_options.get(o.name, None)
- if hasattr(o, 'ver'):
- o.ver = kernel_version
+ # Recursion for nested ComplexOptCheck objects
+ populate_opt_with_data(o, data, data_type)
+ else:
+ populate_simple_opt_with_data(o, data, data_type)
else:
else:
- #
prepare simple check, opt.state is mandatory
+ #
The 'state' is mandatory for simple checks
if not hasattr(opt, 'state'):
sys.exit('[!] ERROR: bad simple check {}'.format(vars(opt)))
if not hasattr(opt, 'state'):
sys.exit('[!] ERROR: bad simple check {}'.format(vars(opt)))
-
opt.state = parsed_options.get(opt.name, Non
e)
+
populate_simple_opt_with_data(opt, data, data_typ
e)
-def populate_with_data(checklist,
parsed_options, kernel_version
):
+def populate_with_data(checklist,
data, data_type
):
for opt in checklist:
for opt in checklist:
- populate_opt_with_data(opt,
parsed_options, kernel_version
)
+ populate_opt_with_data(opt,
data, data_type
)
def perform_checks(checklist):
def perform_checks(checklist):
@@
-796,7
+807,8
@@
def main():
# populate the checklist with the parsed kconfig data
parsed_kconfig_options = OrderedDict()
parse_kconfig_file(parsed_kconfig_options, args.config)
# populate the checklist with the parsed kconfig data
parsed_kconfig_options = OrderedDict()
parse_kconfig_file(parsed_kconfig_options, args.config)
- populate_with_data(config_checklist, parsed_kconfig_options, kernel_version)
+ populate_with_data(config_checklist, parsed_kconfig_options, 'kconfig')
+ populate_with_data(config_checklist, kernel_version, 'version')
# now everything is ready for performing the checks
perform_checks(config_checklist)
# now everything is ready for performing the checks
perform_checks(config_checklist)