minijail: Modify compile_seccomp_policy to compile denylist policies
Add an option to compile_seccomp_policy.py to be able to compile
denylist policies.
BUG=chromium:1162104
TEST=$ ../tools/compile_seccomp_policy.py --denylist
\ generated_policy.policy simple_filter
$ libseccomp/tools/scmp_bpf_disasm < simple_filter
Check that bpf is for a denylist policy
Change-Id: I98b945bb8f77a15afb5e5805ecbcc5a135dd8d12
diff --git a/tools/compile_seccomp_policy.py b/tools/compile_seccomp_policy.py
index f2b714b..b8f9f83 100755
--- a/tools/compile_seccomp_policy.py
+++ b/tools/compile_seccomp_policy.py
@@ -51,6 +51,10 @@
arg_parser.add_argument('--include-depth-limit', default=10)
arg_parser.add_argument('--arch-json', default='constants.json')
arg_parser.add_argument(
+ '--denylist',
+ action='store_true',
+ help='Compile as a denylist policy rather than the deafult allowlist.')
+ arg_parser.add_argument(
'--default-action',
type=str,
help=('Use the specified default action, overriding any @default '
@@ -101,7 +105,8 @@
optimization_strategy=opts.optimization_strategy,
kill_action=kill_action,
include_depth_limit=opts.include_depth_limit,
- override_default_action=override_default_action).opcodes)
+ override_default_action=override_default_action,
+ denylist=opts.denylist).opcodes)
return 0
diff --git a/tools/compiler.py b/tools/compiler.py
index 161eadf..dd7c4d6 100644
--- a/tools/compiler.py
+++ b/tools/compiler.py
@@ -270,7 +270,8 @@
optimization_strategy,
kill_action,
include_depth_limit=10,
- override_default_action=None):
+ override_default_action=None,
+ denylist=False):
"""Return a compiled BPF program from the provided policy file."""
policy_parser = parser.PolicyParser(
self._arch,
@@ -286,8 +287,12 @@
visitor = bpf.FlatteningVisitor(
arch=self._arch, kill_action=kill_action)
- accept_action = bpf.Allow()
- reject_action = parsed_policy.default_action
+ if denylist:
+ accept_action = parsed_policy.default_action
+ reject_action = bpf.Allow()
+ else:
+ accept_action = bpf.Allow()
+ reject_action = parsed_policy.default_action
if entries:
if optimization_strategy == OptimizationStrategy.BST:
next_action = _compile_entries_bst(entries, accept_action,