TERulesDifference: add extended permission rules

Related to #73
This commit is contained in:
Chris PeBenito 2016-03-25 15:33:07 -04:00
parent 7840f98afd
commit 47d8eda957
5 changed files with 963 additions and 0 deletions

View File

@ -18,6 +18,7 @@
# #
from collections import namedtuple from collections import namedtuple
from ..policyrep import ioctlSet
from ..policyrep.exception import RuleNotConditional, RuleUseError, TERuleNoFilename from ..policyrep.exception import RuleNotConditional, RuleUseError, TERuleNoFilename
from .conditional import ConditionalExprWrapper from .conditional import ConditionalExprWrapper
@ -56,6 +57,22 @@ class TERulesDifference(Difference):
removed_dontaudits = DiffResultDescriptor("diff_dontaudits") removed_dontaudits = DiffResultDescriptor("diff_dontaudits")
modified_dontaudits = DiffResultDescriptor("diff_dontaudits") modified_dontaudits = DiffResultDescriptor("diff_dontaudits")
added_allowxperms = DiffResultDescriptor("diff_allowxperms")
removed_allowxperms = DiffResultDescriptor("diff_allowxperms")
modified_allowxperms = DiffResultDescriptor("diff_allowxperms")
added_auditallowxperms = DiffResultDescriptor("diff_auditallowxperms")
removed_auditallowxperms = DiffResultDescriptor("diff_auditallowxperms")
modified_auditallowxperms = DiffResultDescriptor("diff_auditallowxperms")
added_neverallowxperms = DiffResultDescriptor("diff_neverallowxperms")
removed_neverallowxperms = DiffResultDescriptor("diff_neverallowxperms")
modified_neverallowxperms = DiffResultDescriptor("diff_neverallowxperms")
added_dontauditxperms = DiffResultDescriptor("diff_dontauditxperms")
removed_dontauditxperms = DiffResultDescriptor("diff_dontauditxperms")
modified_dontauditxperms = DiffResultDescriptor("diff_dontauditxperms")
added_type_transitions = DiffResultDescriptor("diff_type_transitions") added_type_transitions = DiffResultDescriptor("diff_type_transitions")
removed_type_transitions = DiffResultDescriptor("diff_type_transitions") removed_type_transitions = DiffResultDescriptor("diff_type_transitions")
modified_type_transitions = DiffResultDescriptor("diff_type_transitions") modified_type_transitions = DiffResultDescriptor("diff_type_transitions")
@ -81,6 +98,18 @@ class TERulesDifference(Difference):
_left_dontaudits = None _left_dontaudits = None
_right_dontaudits = None _right_dontaudits = None
_left_allowxperms = None
_right_allowxperms = None
_left_auditallowxperms = None
_right_auditallowxperms = None
_left_neverallowxperms = None
_right_neverallowxperms = None
_left_dontauditxperms = None
_right_dontauditxperms = None
_left_type_transitions = None _left_type_transitions = None
_right_type_transitions = None _right_type_transitions = None
@ -151,6 +180,70 @@ class TERulesDifference(Difference):
self._expand_generator(self._left_dontaudits, AVRuleWrapper), self._expand_generator(self._left_dontaudits, AVRuleWrapper),
self._expand_generator(self._right_dontaudits, AVRuleWrapper)) self._expand_generator(self._right_dontaudits, AVRuleWrapper))
def diff_allowxperms(self):
"""Generate the difference in allowxperm rules between the policies."""
self.log.info(
"Generating allowxperm differences from {0.left_policy} to {0.right_policy}".
format(self))
if self._left_allowxperms is None or self._right_allowxperms is None:
self._create_te_rule_lists()
self.added_allowxperms, \
self.removed_allowxperms, \
self.modified_allowxperms = self._diff_avx_rules(
self._expand_generator(self._left_allowxperms, AVRuleXpermWrapper),
self._expand_generator(self._right_allowxperms, AVRuleXpermWrapper))
def diff_auditallowxperms(self):
"""Generate the difference in auditallowxperm rules between the policies."""
self.log.info(
"Generating auditallowxperm differences from {0.left_policy} to {0.right_policy}".
format(self))
if self._left_auditallowxperms is None or self._right_auditallowxperms is None:
self._create_te_rule_lists()
self.added_auditallowxperms, \
self.removed_auditallowxperms, \
self.modified_auditallowxperms = self._diff_avx_rules(
self._expand_generator(self._left_auditallowxperms, AVRuleXpermWrapper),
self._expand_generator(self._right_auditallowxperms, AVRuleXpermWrapper))
def diff_neverallowxperms(self):
"""Generate the difference in neverallowxperm rules between the policies."""
self.log.info(
"Generating neverallowxperm differences from {0.left_policy} to {0.right_policy}".
format(self))
if self._left_neverallowxperms is None or self._right_neverallowxperms is None:
self._create_te_rule_lists()
self.added_neverallowxperms, \
self.removed_neverallowxperms, \
self.modified_neverallowxperms = self._diff_avx_rules(
self._expand_generator(self._left_neverallowxperms, AVRuleXpermWrapper),
self._expand_generator(self._right_neverallowxperms, AVRuleXpermWrapper))
def diff_dontauditxperms(self):
"""Generate the difference in dontauditxperm rules between the policies."""
self.log.info(
"Generating dontauditxperm differences from {0.left_policy} to {0.right_policy}".
format(self))
if self._left_dontauditxperms is None or self._right_dontauditxperms is None:
self._create_te_rule_lists()
self.added_dontauditxperms, \
self.removed_dontauditxperms, \
self.modified_dontauditxperms = self._diff_avx_rules(
self._expand_generator(self._left_dontauditxperms, AVRuleXpermWrapper),
self._expand_generator(self._right_dontauditxperms, AVRuleXpermWrapper))
def diff_type_transitions(self): def diff_type_transitions(self):
"""Generate the difference in type_transition rules between the policies.""" """Generate the difference in type_transition rules between the policies."""
@ -209,6 +302,10 @@ class TERulesDifference(Difference):
self._left_auditallows = [] self._left_auditallows = []
self._left_neverallows = [] self._left_neverallows = []
self._left_dontaudits = [] self._left_dontaudits = []
self._left_allowxperms = []
self._left_auditallowxperms = []
self._left_neverallowxperms = []
self._left_dontauditxperms = []
self._left_type_transitions = [] self._left_type_transitions = []
self._left_type_changes = [] self._left_type_changes = []
self._left_type_members = [] self._left_type_members = []
@ -223,6 +320,14 @@ class TERulesDifference(Difference):
self._left_neverallows.append(rule) self._left_neverallows.append(rule)
elif rule.ruletype == "dontaudit": elif rule.ruletype == "dontaudit":
self._left_dontaudits.append(rule) self._left_dontaudits.append(rule)
elif rule.ruletype == "allowxperm":
self._left_allowxperms.append(rule)
elif rule.ruletype == "auditallowxperm":
self._left_auditallowxperms.append(rule)
elif rule.ruletype == "neverallowxperm":
self._left_neverallowxperms.append(rule)
elif rule.ruletype == "dontauditxperm":
self._left_dontauditxperms.append(rule)
elif rule.ruletype == "type_transition": elif rule.ruletype == "type_transition":
self._left_type_transitions.append(rule) self._left_type_transitions.append(rule)
elif rule.ruletype == "type_change": elif rule.ruletype == "type_change":
@ -237,6 +342,10 @@ class TERulesDifference(Difference):
self._right_auditallows = [] self._right_auditallows = []
self._right_neverallows = [] self._right_neverallows = []
self._right_dontaudits = [] self._right_dontaudits = []
self._right_allowxperms = []
self._right_auditallowxperms = []
self._right_neverallowxperms = []
self._right_dontauditxperms = []
self._right_type_transitions = [] self._right_type_transitions = []
self._right_type_changes = [] self._right_type_changes = []
self._right_type_members = [] self._right_type_members = []
@ -251,6 +360,14 @@ class TERulesDifference(Difference):
self._right_neverallows.append(rule) self._right_neverallows.append(rule)
elif rule.ruletype == "dontaudit": elif rule.ruletype == "dontaudit":
self._right_dontaudits.append(rule) self._right_dontaudits.append(rule)
elif rule.ruletype == "allowxperm":
self._right_allowxperms.append(rule)
elif rule.ruletype == "auditallowxperm":
self._right_auditallowxperms.append(rule)
elif rule.ruletype == "neverallowxperm":
self._right_neverallowxperms.append(rule)
elif rule.ruletype == "dontauditxperm":
self._right_dontauditxperms.append(rule)
elif rule.ruletype == "type_transition": elif rule.ruletype == "type_transition":
self._right_type_transitions.append(rule) self._right_type_transitions.append(rule)
elif rule.ruletype == "type_change": elif rule.ruletype == "type_change":
@ -284,6 +401,29 @@ class TERulesDifference(Difference):
return added, removed, modified return added, removed, modified
def _diff_avx_rules(self, left_list, right_list):
"""Common method for comparing extended permission access vector rules."""
added, removed, matched = self._set_diff(left_list, right_list)
modified = []
for left_rule, right_rule in matched:
# Criteria for modified rules
# 1. change to permissions
added_perms, removed_perms, matched_perms = self._set_diff(left_rule.perms,
right_rule.perms)
# the final set comprehension is to avoid having lists
# like [("perm1", "perm1"), ("perm2", "perm2")], as the
# matched_perms return from _set_diff is a set of tuples
if added_perms or removed_perms:
modified.append(modified_avrule_record(left_rule,
ioctlSet(added_perms),
ioctlSet(removed_perms),
ioctlSet(p[0] for p in matched_perms)))
return added, removed, modified
def _diff_te_rules(self, left_list, right_list): def _diff_te_rules(self, left_list, right_list):
"""Common method for comparing type_* rules.""" """Common method for comparing type_* rules."""
added, removed, matched = self._set_diff(left_list, right_list) added, removed, matched = self._set_diff(left_list, right_list)
@ -315,6 +455,18 @@ class TERulesDifference(Difference):
self.added_dontaudits = None self.added_dontaudits = None
self.removed_dontaudits = None self.removed_dontaudits = None
self.modified_dontaudits = None self.modified_dontaudits = None
self.added_allowxperms = None
self.removed_allowxperms = None
self.modified_allowxperms = None
self.added_auditallowxperms = None
self.removed_auditallowxperms = None
self.modified_auditallowxperms = None
self.added_neverallowxperms = None
self.removed_neverallowxperms = None
self.modified_neverallowxperms = None
self.added_dontauditxperms = None
self.removed_dontauditxperms = None
self.modified_dontauditxperms = None
self.added_type_transitions = None self.added_type_transitions = None
self.removed_type_transitions = None self.removed_type_transitions = None
self.modified_type_transitions = None self.modified_type_transitions = None
@ -334,6 +486,14 @@ class TERulesDifference(Difference):
self._right_neverallows = None self._right_neverallows = None
self._left_dontaudits = None self._left_dontaudits = None
self._right_dontaudits = None self._right_dontaudits = None
self._left_allowxperms = None
self._right_allowxperms = None
self._left_auditallowxperms = None
self._right_auditallowxperms = None
self._left_neverallowxperms = None
self._right_neverallowxperms = None
self._left_dontauditxperms = None
self._right_dontauditxperms = None
self._left_type_transitions = None self._left_type_transitions = None
self._right_type_transitions = None self._right_type_transitions = None
self._left_type_changes = None self._left_type_changes = None
@ -377,6 +537,34 @@ class AVRuleWrapper(Wrapper):
self.conditional_block == other.conditional_block self.conditional_block == other.conditional_block
class AVRuleXpermWrapper(Wrapper):
"""Wrap extended permission access vector rules to allow set operations."""
def __init__(self, rule):
self.origin = rule
self.ruletype = rule.ruletype
self.source = SymbolWrapper(rule.source)
self.target = SymbolWrapper(rule.target)
self.tclass = SymbolWrapper(rule.tclass)
self.xperm_type = rule.xperm_type
self.key = hash(rule)
def __hash__(self):
return self.key
def __lt__(self, other):
return self.key < other.key
def __eq__(self, other):
# because TERuleDifference groups rules by ruletype,
# the ruletype always matches.
return self.source == other.source and \
self.target == other.target and \
self.tclass == other.tclass and \
self.xperm_type == other.xperm_type
class TERuleWrapper(Wrapper): class TERuleWrapper(Wrapper):
"""Wrap type_* rules to allow set operations.""" """Wrap type_* rules to allow set operations."""

View File

@ -1555,6 +1555,262 @@ class PolicyDifferenceTest(ValidateRule, unittest.TestCase):
self.assertEqual("mod_parent_added", added_bound) self.assertEqual("mod_parent_added", added_bound)
self.assertEqual("mod_parent_removed", removed_bound) self.assertEqual("mod_parent_removed", removed_bound)
#
# Allowxperm rules
#
def test_added_allowxperm_rules(self):
"""Diff: added allowxperm rules."""
rules = sorted(self.diff.added_allowxperms)
self.assertEqual(2, len(rules))
# added rule with new type
self.validate_rule(rules[0], "allowxperm", "added_type", "added_type", "infoflow7",
set([0x0009]), xperm="ioctl")
# added rule with existing types
self.validate_rule(rules[1], "allowxperm", "ax_added_rule_source", "ax_added_rule_target",
"infoflow", set([0x0002]), xperm="ioctl")
def test_removed_allowxperm_rules(self):
"""Diff: removed allowxperm rules."""
rules = sorted(self.diff.removed_allowxperms)
self.assertEqual(2, len(rules))
# removed rule with existing types
self.validate_rule(rules[0], "allowxperm", "ax_removed_rule_source",
"ax_removed_rule_target", "infoflow", set([0x0002]), xperm="ioctl")
# removed rule with new type
self.validate_rule(rules[1], "allowxperm", "removed_type", "removed_type", "infoflow7",
set([0x0009]), xperm="ioctl")
def test_modified_allowxperm_rules(self):
"""Diff: modified allowxperm rules."""
l = sorted(self.diff.modified_allowxperms, key=lambda x: x.rule)
self.assertEqual(3, len(l))
# add permissions
rule, added_perms, removed_perms, matched_perms = l[0]
self.assertEqual("allowxperm", rule.ruletype)
self.assertEqual("ax_modified_rule_add_perms", rule.source)
self.assertEqual("ax_modified_rule_add_perms", rule.target)
self.assertEqual("infoflow", rule.tclass)
self.assertSetEqual(set([0x000f]), added_perms)
self.assertFalse(removed_perms)
self.assertSetEqual(set([0x0004]), matched_perms)
# add and remove permissions
rule, added_perms, removed_perms, matched_perms = l[1]
self.assertEqual("allowxperm", rule.ruletype)
self.assertEqual("ax_modified_rule_add_remove_perms", rule.source)
self.assertEqual("ax_modified_rule_add_remove_perms", rule.target)
self.assertEqual("infoflow2", rule.tclass)
self.assertSetEqual(set([0x0006]), added_perms)
self.assertSetEqual(set([0x0007]), removed_perms)
self.assertSetEqual(set([0x0008]), matched_perms)
# remove permissions
rule, added_perms, removed_perms, matched_perms = l[2]
self.assertEqual("allowxperm", rule.ruletype)
self.assertEqual("ax_modified_rule_remove_perms", rule.source)
self.assertEqual("ax_modified_rule_remove_perms", rule.target)
self.assertEqual("infoflow", rule.tclass)
self.assertFalse(added_perms)
self.assertSetEqual(set([0x0006]), removed_perms)
self.assertSetEqual(set([0x0005]), matched_perms)
#
# Auditallowxperm rules
#
def test_added_auditallowxperm_rules(self):
"""Diff: added auditallowxperm rules."""
rules = sorted(self.diff.added_auditallowxperms)
self.assertEqual(2, len(rules))
# added rule with existing types
self.validate_rule(rules[0], "auditallowxperm", "aax_added_rule_source",
"aax_added_rule_target", "infoflow", set([0x0002]), xperm="ioctl")
# added rule with new type
self.validate_rule(rules[1], "auditallowxperm", "added_type", "added_type", "infoflow7",
set([0x0009]), xperm="ioctl")
def test_removed_auditallowxperm_rules(self):
"""Diff: removed auditallowxperm rules."""
rules = sorted(self.diff.removed_auditallowxperms)
self.assertEqual(2, len(rules))
# removed rule with existing types
self.validate_rule(rules[0], "auditallowxperm", "aax_removed_rule_source",
"aax_removed_rule_target", "infoflow", set([0x0002]), xperm="ioctl")
# removed rule with new type
self.validate_rule(rules[1], "auditallowxperm", "removed_type", "removed_type", "infoflow7",
set([0x0009]), xperm="ioctl")
def test_modified_auditallowxperm_rules(self):
"""Diff: modified auditallowxperm rules."""
l = sorted(self.diff.modified_auditallowxperms, key=lambda x: x.rule)
self.assertEqual(3, len(l))
# add permissions
rule, added_perms, removed_perms, matched_perms = l[0]
self.assertEqual("auditallowxperm", rule.ruletype)
self.assertEqual("aax_modified_rule_add_perms", rule.source)
self.assertEqual("aax_modified_rule_add_perms", rule.target)
self.assertEqual("infoflow", rule.tclass)
self.assertSetEqual(set([0x000f]), added_perms)
self.assertFalse(removed_perms)
self.assertSetEqual(set([0x0004]), matched_perms)
# add and remove permissions
rule, added_perms, removed_perms, matched_perms = l[1]
self.assertEqual("auditallowxperm", rule.ruletype)
self.assertEqual("aax_modified_rule_add_remove_perms", rule.source)
self.assertEqual("aax_modified_rule_add_remove_perms", rule.target)
self.assertEqual("infoflow2", rule.tclass)
self.assertSetEqual(set([0x0006]), added_perms)
self.assertSetEqual(set([0x0007]), removed_perms)
self.assertSetEqual(set([0x0008]), matched_perms)
# remove permissions
rule, added_perms, removed_perms, matched_perms = l[2]
self.assertEqual("auditallowxperm", rule.ruletype)
self.assertEqual("aax_modified_rule_remove_perms", rule.source)
self.assertEqual("aax_modified_rule_remove_perms", rule.target)
self.assertEqual("infoflow", rule.tclass)
self.assertFalse(added_perms)
self.assertSetEqual(set([0x0006]), removed_perms)
self.assertSetEqual(set([0x0005]), matched_perms)
#
# Neverallowxperm rules
#
def test_added_neverallowxperm_rules(self):
"""Diff: added neverallowxperm rules."""
rules = sorted(self.diff.added_neverallowxperms)
self.assertEqual(2, len(rules))
# added rule with new type
self.validate_rule(rules[0], "neverallowxperm", "added_type", "added_type", "infoflow7",
set([0x0009]), xperm="ioctl")
# added rule with existing types
self.validate_rule(rules[1], "neverallowxperm", "nax_added_rule_source",
"nax_added_rule_target", "infoflow", set([0x0002]), xperm="ioctl")
def test_removed_neverallowxperm_rules(self):
"""Diff: removed neverallowxperm rules."""
rules = sorted(self.diff.removed_neverallowxperms)
self.assertEqual(2, len(rules))
# removed rule with existing types
self.validate_rule(rules[0], "neverallowxperm", "nax_removed_rule_source",
"nax_removed_rule_target", "infoflow", set([0x0002]), xperm="ioctl")
# removed rule with new type
self.validate_rule(rules[1], "neverallowxperm", "removed_type", "removed_type", "infoflow7",
set([0x0009]), xperm="ioctl")
def test_modified_neverallowxperm_rules(self):
"""Diff: modified neverallowxperm rules."""
l = sorted(self.diff.modified_neverallowxperms, key=lambda x: x.rule)
self.assertEqual(3, len(l))
# add permissions
rule, added_perms, removed_perms, matched_perms = l[0]
self.assertEqual("neverallowxperm", rule.ruletype)
self.assertEqual("nax_modified_rule_add_perms", rule.source)
self.assertEqual("nax_modified_rule_add_perms", rule.target)
self.assertEqual("infoflow", rule.tclass)
self.assertSetEqual(set([0x000f]), added_perms)
self.assertFalse(removed_perms)
self.assertSetEqual(set([0x0004]), matched_perms)
# add and remove permissions
rule, added_perms, removed_perms, matched_perms = l[1]
self.assertEqual("neverallowxperm", rule.ruletype)
self.assertEqual("nax_modified_rule_add_remove_perms", rule.source)
self.assertEqual("nax_modified_rule_add_remove_perms", rule.target)
self.assertEqual("infoflow2", rule.tclass)
self.assertSetEqual(set([0x0006]), added_perms)
self.assertSetEqual(set([0x0007]), removed_perms)
self.assertSetEqual(set([0x0008]), matched_perms)
# remove permissions
rule, added_perms, removed_perms, matched_perms = l[2]
self.assertEqual("neverallowxperm", rule.ruletype)
self.assertEqual("nax_modified_rule_remove_perms", rule.source)
self.assertEqual("nax_modified_rule_remove_perms", rule.target)
self.assertEqual("infoflow", rule.tclass)
self.assertFalse(added_perms)
self.assertSetEqual(set([0x0006]), removed_perms)
self.assertSetEqual(set([0x0005]), matched_perms)
#
# Dontauditxperm rules
#
def test_added_dontauditxperm_rules(self):
"""Diff: added dontauditxperm rules."""
rules = sorted(self.diff.added_dontauditxperms)
self.assertEqual(2, len(rules))
# added rule with new type
self.validate_rule(rules[0], "dontauditxperm", "added_type", "added_type", "infoflow7",
set([0x0009]), xperm="ioctl")
# added rule with existing types
self.validate_rule(rules[1], "dontauditxperm", "dax_added_rule_source",
"dax_added_rule_target", "infoflow", set([0x0002]), xperm="ioctl")
def test_removed_dontauditxperm_rules(self):
"""Diff: removed dontauditxperm rules."""
rules = sorted(self.diff.removed_dontauditxperms)
self.assertEqual(2, len(rules))
# removed rule with existing types
self.validate_rule(rules[0], "dontauditxperm", "dax_removed_rule_source",
"dax_removed_rule_target", "infoflow", set([0x0002]), xperm="ioctl")
# removed rule with new type
self.validate_rule(rules[1], "dontauditxperm", "removed_type", "removed_type", "infoflow7",
set([0x0009]), xperm="ioctl")
def test_modified_dontauditxperm_rules(self):
"""Diff: modified dontauditxperm rules."""
l = sorted(self.diff.modified_dontauditxperms, key=lambda x: x.rule)
self.assertEqual(3, len(l))
# add permissions
rule, added_perms, removed_perms, matched_perms = l[0]
self.assertEqual("dontauditxperm", rule.ruletype)
self.assertEqual("dax_modified_rule_add_perms", rule.source)
self.assertEqual("dax_modified_rule_add_perms", rule.target)
self.assertEqual("infoflow", rule.tclass)
self.assertSetEqual(set([0x000f]), added_perms)
self.assertFalse(removed_perms)
self.assertSetEqual(set([0x0004]), matched_perms)
# add and remove permissions
rule, added_perms, removed_perms, matched_perms = l[1]
self.assertEqual("dontauditxperm", rule.ruletype)
self.assertEqual("dax_modified_rule_add_remove_perms", rule.source)
self.assertEqual("dax_modified_rule_add_remove_perms", rule.target)
self.assertEqual("infoflow2", rule.tclass)
self.assertSetEqual(set([0x0006]), added_perms)
self.assertSetEqual(set([0x0007]), removed_perms)
self.assertSetEqual(set([0x0008]), matched_perms)
# remove permissions
rule, added_perms, removed_perms, matched_perms = l[2]
self.assertEqual("dontauditxperm", rule.ruletype)
self.assertEqual("dax_modified_rule_remove_perms", rule.source)
self.assertEqual("dax_modified_rule_remove_perms", rule.target)
self.assertEqual("infoflow", rule.tclass)
self.assertFalse(added_perms)
self.assertSetEqual(set([0x0006]), removed_perms)
self.assertSetEqual(set([0x0005]), matched_perms)
class PolicyDifferenceTestNoDiff(unittest.TestCase): class PolicyDifferenceTestNoDiff(unittest.TestCase):
@ -1945,6 +2201,54 @@ class PolicyDifferenceTestNoDiff(unittest.TestCase):
"""NoDiff: no modified typebounds.""" """NoDiff: no modified typebounds."""
self.assertFalse(self.diff.modified_typebounds) self.assertFalse(self.diff.modified_typebounds)
def test_added_allowxperms(self):
"""NoDiff: no added allowxperm rules."""
self.assertFalse(self.diff.added_allowxperms)
def test_removed_allowxperms(self):
"""NoDiff: no removed allowxperm rules."""
self.assertFalse(self.diff.removed_allowxperms)
def test_modified_allowxperms(self):
"""NoDiff: no modified allowxperm rules."""
self.assertFalse(self.diff.modified_allowxperms)
def test_added_auditallowxperms(self):
"""NoDiff: no added auditallowxperm rules."""
self.assertFalse(self.diff.added_auditallowxperms)
def test_removed_auditallowxperms(self):
"""NoDiff: no removed auditallowxperm rules."""
self.assertFalse(self.diff.removed_auditallowxperms)
def test_modified_auditallowxperms(self):
"""NoDiff: no modified auditallowxperm rules."""
self.assertFalse(self.diff.modified_auditallowxperms)
def test_added_neverallowxperms(self):
"""NoDiff: no added neverallowxperm rules."""
self.assertFalse(self.diff.added_neverallowxperms)
def test_removed_neverallowxperms(self):
"""NoDiff: no removed neverallowxperm rules."""
self.assertFalse(self.diff.removed_neverallowxperms)
def test_modified_neverallowxperms(self):
"""NoDiff: no modified neverallowxperm rules."""
self.assertFalse(self.diff.modified_neverallowxperms)
def test_added_dontauditxperms(self):
"""NoDiff: no added dontauditxperm rules."""
self.assertFalse(self.diff.added_dontauditxperms)
def test_removed_dontauditxperms(self):
"""NoDiff: no removed dontauditxperm rules."""
self.assertFalse(self.diff.removed_dontauditxperms)
def test_modified_dontauditxperms(self):
"""NoDiff: no modified dontauditxperm rules."""
self.assertFalse(self.diff.modified_dontauditxperms)
class PolicyDifferenceTestMLStoStandard(unittest.TestCase): class PolicyDifferenceTestMLStoStandard(unittest.TestCase):
@ -2352,3 +2656,51 @@ class PolicyDifferenceTestMLStoStandard(unittest.TestCase):
def test_modified_typebounds(self): def test_modified_typebounds(self):
"""MLSvsStandardDiff: no modified typebounds.""" """MLSvsStandardDiff: no modified typebounds."""
self.assertFalse(self.diff.modified_typebounds) self.assertFalse(self.diff.modified_typebounds)
def test_added_allowxperms(self):
"""NoDiff: no added allowxperm rules."""
self.assertFalse(self.diff.added_allowxperms)
def test_removed_allowxperms(self):
"""NoDiff: no removed allowxperm rules."""
self.assertFalse(self.diff.removed_allowxperms)
def test_modified_allowxperms(self):
"""NoDiff: no modified allowxperm rules."""
self.assertFalse(self.diff.modified_allowxperms)
def test_added_auditallowxperms(self):
"""NoDiff: no added auditallowxperm rules."""
self.assertFalse(self.diff.added_auditallowxperms)
def test_removed_auditallowxperms(self):
"""NoDiff: no removed auditallowxperm rules."""
self.assertFalse(self.diff.removed_auditallowxperms)
def test_modified_auditallowxperms(self):
"""NoDiff: no modified auditallowxperm rules."""
self.assertFalse(self.diff.modified_auditallowxperms)
def test_added_neverallowxperms(self):
"""NoDiff: no added neverallowxperm rules."""
self.assertFalse(self.diff.added_neverallowxperms)
def test_removed_neverallowxperms(self):
"""NoDiff: no removed neverallowxperm rules."""
self.assertFalse(self.diff.removed_neverallowxperms)
def test_modified_neverallowxperms(self):
"""NoDiff: no modified neverallowxperm rules."""
self.assertFalse(self.diff.modified_neverallowxperms)
def test_added_dontauditxperms(self):
"""NoDiff: no added dontauditxperm rules."""
self.assertFalse(self.diff.added_dontauditxperms)
def test_removed_dontauditxperms(self):
"""NoDiff: no removed dontauditxperm rules."""
self.assertFalse(self.diff.removed_dontauditxperms)
def test_modified_dontauditxperms(self):
"""NoDiff: no modified dontauditxperm rules."""
self.assertFalse(self.diff.modified_dontauditxperms)

View File

@ -24,6 +24,7 @@ common infoflow
low_r low_r
med_r med_r
hi_r hi_r
ioctl
} }
common removed_common common removed_common
@ -634,6 +635,146 @@ role role_tr_old_role;
role role_tr_new_role; role role_tr_new_role;
role_transition role_tr_matched_source role_tr_matched_target:infoflow3 role_tr_old_role; role_transition role_tr_matched_source role_tr_matched_target:infoflow3 role_tr_old_role;
# Allowxperm rule differences
type ax_matched_source;
type ax_matched_target;
allowxperm ax_matched_source ax_matched_target:infoflow ioctl 0x0001;
type ax_removed_rule_source;
type ax_removed_rule_target;
allowxperm ax_removed_rule_source ax_removed_rule_target:infoflow ioctl 0x0002;
type ax_added_rule_source;
type ax_added_rule_target;
type ax_modified_rule_add_perms;
allowxperm ax_modified_rule_add_perms self:infoflow ioctl 0x0004;
type ax_modified_rule_remove_perms;
allowxperm ax_modified_rule_remove_perms self:infoflow ioctl { 0x0005 0x0006 };
type ax_modified_rule_add_remove_perms;
allowxperm ax_modified_rule_add_remove_perms self:infoflow2 ioctl { 0x0007 0x0008 };
allowxperm removed_type self:infoflow7 ioctl 0x0009;
attribute ax_match_rule_by_attr;
type ax_match_rule_by_attr_A_t, ax_match_rule_by_attr;
type ax_match_rule_by_attr_B_t, ax_match_rule_by_attr;
allowxperm ax_match_rule_by_attr self:infoflow2 ioctl 0x000a;
attribute ax_unioned_perm_via_attr;
type ax_unioned_perm_via_attr_A_t, ax_unioned_perm_via_attr;
type ax_unioned_perm_via_attr_B_t, ax_unioned_perm_via_attr;
allowxperm ax_unioned_perm_via_attr self:infoflow2 ioctl 0x000b;
allowxperm ax_unioned_perm_via_attr_A_t self:infoflow2 ioctl 0x000c;
allowxperm ax_unioned_perm_via_attr_B_t self:infoflow2 ioctl 0x000d;
# Auditallowxperm rule differences
type aax_matched_source;
type aax_matched_target;
auditallowxperm aax_matched_source aax_matched_target:infoflow ioctl 0x0001;
type aax_removed_rule_source;
type aax_removed_rule_target;
auditallowxperm aax_removed_rule_source aax_removed_rule_target:infoflow ioctl 0x0002;
type aax_added_rule_source;
type aax_added_rule_target;
type aax_modified_rule_add_perms;
auditallowxperm aax_modified_rule_add_perms self:infoflow ioctl 0x0004;
type aax_modified_rule_remove_perms;
auditallowxperm aax_modified_rule_remove_perms self:infoflow ioctl { 0x0005 0x0006 };
type aax_modified_rule_add_remove_perms;
auditallowxperm aax_modified_rule_add_remove_perms self:infoflow2 ioctl { 0x0007 0x0008 };
auditallowxperm removed_type self:infoflow7 ioctl 0x0009;
attribute aax_match_rule_by_attr;
type aax_match_rule_by_attr_A_t, aax_match_rule_by_attr;
type aax_match_rule_by_attr_B_t, aax_match_rule_by_attr;
auditallowxperm aax_match_rule_by_attr self:infoflow2 ioctl 0x000a;
attribute aax_unioned_perm_via_attr;
type aax_unioned_perm_via_attr_A_t, aax_unioned_perm_via_attr;
type aax_unioned_perm_via_attr_B_t, aax_unioned_perm_via_attr;
auditallowxperm aax_unioned_perm_via_attr self:infoflow2 ioctl 0x000b;
auditallowxperm aax_unioned_perm_via_attr_A_t self:infoflow2 ioctl 0x000c;
auditallowxperm aax_unioned_perm_via_attr_B_t self:infoflow2 ioctl 0x000d;
# Neverallowxperm rule differences
type nax_matched_source;
type nax_matched_target;
neverallowxperm nax_matched_source nax_matched_target:infoflow ioctl 0x0001;
type nax_removed_rule_source;
type nax_removed_rule_target;
neverallowxperm nax_removed_rule_source nax_removed_rule_target:infoflow ioctl 0x0002;
type nax_added_rule_source;
type nax_added_rule_target;
type nax_modified_rule_add_perms;
neverallowxperm nax_modified_rule_add_perms self:infoflow ioctl 0x0004;
type nax_modified_rule_remove_perms;
neverallowxperm nax_modified_rule_remove_perms self:infoflow ioctl { 0x0005 0x0006 };
type nax_modified_rule_add_remove_perms;
neverallowxperm nax_modified_rule_add_remove_perms self:infoflow2 ioctl { 0x0007 0x0008 };
neverallowxperm removed_type self:infoflow7 ioctl 0x0009;
attribute nax_match_rule_by_attr;
type nax_match_rule_by_attr_A_t, nax_match_rule_by_attr;
type nax_match_rule_by_attr_B_t, nax_match_rule_by_attr;
neverallowxperm nax_match_rule_by_attr self:infoflow2 ioctl 0x000a;
attribute nax_unioned_perm_via_attr;
type nax_unioned_perm_via_attr_A_t, nax_unioned_perm_via_attr;
type nax_unioned_perm_via_attr_B_t, nax_unioned_perm_via_attr;
neverallowxperm nax_unioned_perm_via_attr self:infoflow2 ioctl 0x000b;
neverallowxperm nax_unioned_perm_via_attr_A_t self:infoflow2 ioctl 0x000c;
neverallowxperm nax_unioned_perm_via_attr_B_t self:infoflow2 ioctl 0x000d;
# Dontauditxperm rule differences
type dax_matched_source;
type dax_matched_target;
dontauditxperm dax_matched_source dax_matched_target:infoflow ioctl 0x0001;
type dax_removed_rule_source;
type dax_removed_rule_target;
dontauditxperm dax_removed_rule_source dax_removed_rule_target:infoflow ioctl 0x0002;
type dax_added_rule_source;
type dax_added_rule_target;
type dax_modified_rule_add_perms;
dontauditxperm dax_modified_rule_add_perms self:infoflow ioctl 0x0004;
type dax_modified_rule_remove_perms;
dontauditxperm dax_modified_rule_remove_perms self:infoflow ioctl { 0x0005 0x0006 };
type dax_modified_rule_add_remove_perms;
dontauditxperm dax_modified_rule_add_remove_perms self:infoflow2 ioctl { 0x0007 0x0008 };
dontauditxperm removed_type self:infoflow7 ioctl 0x0009;
attribute dax_match_rule_by_attr;
type dax_match_rule_by_attr_A_t, dax_match_rule_by_attr;
type dax_match_rule_by_attr_B_t, dax_match_rule_by_attr;
dontauditxperm dax_match_rule_by_attr self:infoflow2 ioctl 0x000a;
attribute dax_unioned_perm_via_attr;
type dax_unioned_perm_via_attr_A_t, dax_unioned_perm_via_attr;
type dax_unioned_perm_via_attr_B_t, dax_unioned_perm_via_attr;
dontauditxperm dax_unioned_perm_via_attr self:infoflow2 ioctl 0x000b;
dontauditxperm dax_unioned_perm_via_attr_A_t self:infoflow2 ioctl 0x000c;
dontauditxperm dax_unioned_perm_via_attr_B_t self:infoflow2 ioctl 0x000d;
################################################################################ ################################################################################
# matching typebounds # matching typebounds
type match_parent; type match_parent;

View File

@ -24,6 +24,7 @@ common infoflow
low_r low_r
med_r med_r
hi_r hi_r
ioctl
} }
common removed_common common removed_common
@ -556,6 +557,146 @@ role role_tr_old_role;
role role_tr_new_role; role role_tr_new_role;
role_transition role_tr_matched_source role_tr_matched_target:infoflow3 role_tr_old_role; role_transition role_tr_matched_source role_tr_matched_target:infoflow3 role_tr_old_role;
# Allowxperm rule differences
type ax_matched_source;
type ax_matched_target;
allowxperm ax_matched_source ax_matched_target:infoflow ioctl 0x0001;
type ax_removed_rule_source;
type ax_removed_rule_target;
allowxperm ax_removed_rule_source ax_removed_rule_target:infoflow ioctl 0x0002;
type ax_added_rule_source;
type ax_added_rule_target;
type ax_modified_rule_add_perms;
allowxperm ax_modified_rule_add_perms self:infoflow ioctl 0x0004;
type ax_modified_rule_remove_perms;
allowxperm ax_modified_rule_remove_perms self:infoflow ioctl { 0x0005 0x0006 };
type ax_modified_rule_add_remove_perms;
allowxperm ax_modified_rule_add_remove_perms self:infoflow2 ioctl { 0x0007 0x0008 };
allowxperm removed_type self:infoflow7 ioctl 0x0009;
attribute ax_match_rule_by_attr;
type ax_match_rule_by_attr_A_t, ax_match_rule_by_attr;
type ax_match_rule_by_attr_B_t, ax_match_rule_by_attr;
allowxperm ax_match_rule_by_attr self:infoflow2 ioctl 0x000a;
attribute ax_unioned_perm_via_attr;
type ax_unioned_perm_via_attr_A_t, ax_unioned_perm_via_attr;
type ax_unioned_perm_via_attr_B_t, ax_unioned_perm_via_attr;
allowxperm ax_unioned_perm_via_attr self:infoflow2 ioctl 0x000b;
allowxperm ax_unioned_perm_via_attr_A_t self:infoflow2 ioctl 0x000c;
allowxperm ax_unioned_perm_via_attr_B_t self:infoflow2 ioctl 0x000d;
# Auditallowxperm rule differences
type aax_matched_source;
type aax_matched_target;
auditallowxperm aax_matched_source aax_matched_target:infoflow ioctl 0x0001;
type aax_removed_rule_source;
type aax_removed_rule_target;
auditallowxperm aax_removed_rule_source aax_removed_rule_target:infoflow ioctl 0x0002;
type aax_added_rule_source;
type aax_added_rule_target;
type aax_modified_rule_add_perms;
auditallowxperm aax_modified_rule_add_perms self:infoflow ioctl 0x0004;
type aax_modified_rule_remove_perms;
auditallowxperm aax_modified_rule_remove_perms self:infoflow ioctl { 0x0005 0x0006 };
type aax_modified_rule_add_remove_perms;
auditallowxperm aax_modified_rule_add_remove_perms self:infoflow2 ioctl { 0x0007 0x0008 };
auditallowxperm removed_type self:infoflow7 ioctl 0x0009;
attribute aax_match_rule_by_attr;
type aax_match_rule_by_attr_A_t, aax_match_rule_by_attr;
type aax_match_rule_by_attr_B_t, aax_match_rule_by_attr;
auditallowxperm aax_match_rule_by_attr self:infoflow2 ioctl 0x000a;
attribute aax_unioned_perm_via_attr;
type aax_unioned_perm_via_attr_A_t, aax_unioned_perm_via_attr;
type aax_unioned_perm_via_attr_B_t, aax_unioned_perm_via_attr;
auditallowxperm aax_unioned_perm_via_attr self:infoflow2 ioctl 0x000b;
auditallowxperm aax_unioned_perm_via_attr_A_t self:infoflow2 ioctl 0x000c;
auditallowxperm aax_unioned_perm_via_attr_B_t self:infoflow2 ioctl 0x000d;
# Neverallowxperm rule differences
type nax_matched_source;
type nax_matched_target;
neverallowxperm nax_matched_source nax_matched_target:infoflow ioctl 0x0001;
type nax_removed_rule_source;
type nax_removed_rule_target;
neverallowxperm nax_removed_rule_source nax_removed_rule_target:infoflow ioctl 0x0002;
type nax_added_rule_source;
type nax_added_rule_target;
type nax_modified_rule_add_perms;
neverallowxperm nax_modified_rule_add_perms self:infoflow ioctl 0x0004;
type nax_modified_rule_remove_perms;
neverallowxperm nax_modified_rule_remove_perms self:infoflow ioctl { 0x0005 0x0006 };
type nax_modified_rule_add_remove_perms;
neverallowxperm nax_modified_rule_add_remove_perms self:infoflow2 ioctl { 0x0007 0x0008 };
neverallowxperm removed_type self:infoflow7 ioctl 0x0009;
attribute nax_match_rule_by_attr;
type nax_match_rule_by_attr_A_t, nax_match_rule_by_attr;
type nax_match_rule_by_attr_B_t, nax_match_rule_by_attr;
neverallowxperm nax_match_rule_by_attr self:infoflow2 ioctl 0x000a;
attribute nax_unioned_perm_via_attr;
type nax_unioned_perm_via_attr_A_t, nax_unioned_perm_via_attr;
type nax_unioned_perm_via_attr_B_t, nax_unioned_perm_via_attr;
neverallowxperm nax_unioned_perm_via_attr self:infoflow2 ioctl 0x000b;
neverallowxperm nax_unioned_perm_via_attr_A_t self:infoflow2 ioctl 0x000c;
neverallowxperm nax_unioned_perm_via_attr_B_t self:infoflow2 ioctl 0x000d;
# Dontauditxperm rule differences
type dax_matched_source;
type dax_matched_target;
dontauditxperm dax_matched_source dax_matched_target:infoflow ioctl 0x0001;
type dax_removed_rule_source;
type dax_removed_rule_target;
dontauditxperm dax_removed_rule_source dax_removed_rule_target:infoflow ioctl 0x0002;
type dax_added_rule_source;
type dax_added_rule_target;
type dax_modified_rule_add_perms;
dontauditxperm dax_modified_rule_add_perms self:infoflow ioctl 0x0004;
type dax_modified_rule_remove_perms;
dontauditxperm dax_modified_rule_remove_perms self:infoflow ioctl { 0x0005 0x0006 };
type dax_modified_rule_add_remove_perms;
dontauditxperm dax_modified_rule_add_remove_perms self:infoflow2 ioctl { 0x0007 0x0008 };
dontauditxperm removed_type self:infoflow7 ioctl 0x0009;
attribute dax_match_rule_by_attr;
type dax_match_rule_by_attr_A_t, dax_match_rule_by_attr;
type dax_match_rule_by_attr_B_t, dax_match_rule_by_attr;
dontauditxperm dax_match_rule_by_attr self:infoflow2 ioctl 0x000a;
attribute dax_unioned_perm_via_attr;
type dax_unioned_perm_via_attr_A_t, dax_unioned_perm_via_attr;
type dax_unioned_perm_via_attr_B_t, dax_unioned_perm_via_attr;
dontauditxperm dax_unioned_perm_via_attr self:infoflow2 ioctl 0x000b;
dontauditxperm dax_unioned_perm_via_attr_A_t self:infoflow2 ioctl 0x000c;
dontauditxperm dax_unioned_perm_via_attr_B_t self:infoflow2 ioctl 0x000d;
################################################################################ ################################################################################
# matching typebounds # matching typebounds
type match_parent; type match_parent;

View File

@ -24,6 +24,7 @@ common infoflow
low_r low_r
med_r med_r
hi_r hi_r
ioctl
} }
common added_common common added_common
@ -634,6 +635,146 @@ role role_tr_old_role;
role role_tr_new_role; role role_tr_new_role;
role_transition role_tr_matched_source role_tr_matched_target:infoflow3 role_tr_new_role; role_transition role_tr_matched_source role_tr_matched_target:infoflow3 role_tr_new_role;
# Allowxperm rule differences
type ax_matched_source;
type ax_matched_target;
allowxperm ax_matched_source ax_matched_target:infoflow ioctl 0x0001;
type ax_removed_rule_source;
type ax_removed_rule_target;
type ax_added_rule_source;
type ax_added_rule_target;
allowxperm ax_added_rule_source ax_added_rule_target:infoflow ioctl 0x0002;
type ax_modified_rule_add_perms;
allowxperm ax_modified_rule_add_perms self:infoflow ioctl { 0x0004 0x000f };
type ax_modified_rule_remove_perms;
allowxperm ax_modified_rule_remove_perms self:infoflow ioctl 0x0005;
type ax_modified_rule_add_remove_perms;
allowxperm ax_modified_rule_add_remove_perms self:infoflow2 ioctl { 0x0006 0x0008 };
allowxperm added_type self:infoflow7 ioctl 0x0009;
attribute ax_match_rule_by_attr;
type ax_match_rule_by_attr_A_t, ax_match_rule_by_attr;
type ax_match_rule_by_attr_B_t, ax_match_rule_by_attr;
allowxperm ax_match_rule_by_attr_A_t self:infoflow2 ioctl 0x000a;
allowxperm ax_match_rule_by_attr_B_t self:infoflow2 ioctl 0x000a;
attribute ax_unioned_perm_via_attr;
type ax_unioned_perm_via_attr_A_t, ax_unioned_perm_via_attr;
type ax_unioned_perm_via_attr_B_t, ax_unioned_perm_via_attr;
allowxperm ax_unioned_perm_via_attr_A_t self:infoflow2 ioctl { 0x000b 0x000c };
allowxperm ax_unioned_perm_via_attr_B_t self:infoflow2 ioctl { 0x000b 0x000d };
# Auditallowxperm rule differences
type aax_matched_source;
type aax_matched_target;
auditallowxperm aax_matched_source aax_matched_target:infoflow ioctl 0x0001;
type aax_removed_rule_source;
type aax_removed_rule_target;
type aax_added_rule_source;
type aax_added_rule_target;
auditallowxperm aax_added_rule_source aax_added_rule_target:infoflow ioctl 0x0002;
type aax_modified_rule_add_perms;
auditallowxperm aax_modified_rule_add_perms self:infoflow ioctl { 0x0004 0x000f };
type aax_modified_rule_remove_perms;
auditallowxperm aax_modified_rule_remove_perms self:infoflow ioctl 0x0005;
type aax_modified_rule_add_remove_perms;
auditallowxperm aax_modified_rule_add_remove_perms self:infoflow2 ioctl { 0x0006 0x0008 };
auditallowxperm added_type self:infoflow7 ioctl 0x0009;
attribute aax_match_rule_by_attr;
type aax_match_rule_by_attr_A_t, aax_match_rule_by_attr;
type aax_match_rule_by_attr_B_t, aax_match_rule_by_attr;
auditallowxperm aax_match_rule_by_attr_A_t self:infoflow2 ioctl 0x000a;
auditallowxperm aax_match_rule_by_attr_B_t self:infoflow2 ioctl 0x000a;
attribute aax_unioned_perm_via_attr;
type aax_unioned_perm_via_attr_A_t, aax_unioned_perm_via_attr;
type aax_unioned_perm_via_attr_B_t, aax_unioned_perm_via_attr;
auditallowxperm aax_unioned_perm_via_attr_A_t self:infoflow2 ioctl { 0x000b 0x000c };
auditallowxperm aax_unioned_perm_via_attr_B_t self:infoflow2 ioctl { 0x000b 0x000d };
# Neverallowxperm rule differences
type nax_matched_source;
type nax_matched_target;
neverallowxperm nax_matched_source nax_matched_target:infoflow ioctl 0x0001;
type nax_removed_rule_source;
type nax_removed_rule_target;
type nax_added_rule_source;
type nax_added_rule_target;
neverallowxperm nax_added_rule_source nax_added_rule_target:infoflow ioctl 0x0002;
type nax_modified_rule_add_perms;
neverallowxperm nax_modified_rule_add_perms self:infoflow ioctl { 0x0004 0x000f };
type nax_modified_rule_remove_perms;
neverallowxperm nax_modified_rule_remove_perms self:infoflow ioctl 0x0005;
type nax_modified_rule_add_remove_perms;
neverallowxperm nax_modified_rule_add_remove_perms self:infoflow2 ioctl { 0x0006 0x0008 };
neverallowxperm added_type self:infoflow7 ioctl 0x0009;
attribute nax_match_rule_by_attr;
type nax_match_rule_by_attr_A_t, nax_match_rule_by_attr;
type nax_match_rule_by_attr_B_t, nax_match_rule_by_attr;
neverallowxperm nax_match_rule_by_attr_A_t self:infoflow2 ioctl 0x000a;
neverallowxperm nax_match_rule_by_attr_B_t self:infoflow2 ioctl 0x000a;
attribute nax_unioned_perm_via_attr;
type nax_unioned_perm_via_attr_A_t, nax_unioned_perm_via_attr;
type nax_unioned_perm_via_attr_B_t, nax_unioned_perm_via_attr;
neverallowxperm nax_unioned_perm_via_attr_A_t self:infoflow2 ioctl { 0x000b 0x000c };
neverallowxperm nax_unioned_perm_via_attr_B_t self:infoflow2 ioctl { 0x000b 0x000d };
# Dontauditxperm rule differences
type dax_matched_source;
type dax_matched_target;
dontauditxperm dax_matched_source dax_matched_target:infoflow ioctl 0x0001;
type dax_removed_rule_source;
type dax_removed_rule_target;
type dax_added_rule_source;
type dax_added_rule_target;
dontauditxperm dax_added_rule_source dax_added_rule_target:infoflow ioctl 0x0002;
type dax_modified_rule_add_perms;
dontauditxperm dax_modified_rule_add_perms self:infoflow ioctl { 0x0004 0x000f };
type dax_modified_rule_remove_perms;
dontauditxperm dax_modified_rule_remove_perms self:infoflow ioctl 0x0005;
type dax_modified_rule_add_remove_perms;
dontauditxperm dax_modified_rule_add_remove_perms self:infoflow2 ioctl { 0x0006 0x0008 };
dontauditxperm added_type self:infoflow7 ioctl 0x0009;
attribute dax_match_rule_by_attr;
type dax_match_rule_by_attr_A_t, dax_match_rule_by_attr;
type dax_match_rule_by_attr_B_t, dax_match_rule_by_attr;
dontauditxperm dax_match_rule_by_attr_A_t self:infoflow2 ioctl 0x000a;
dontauditxperm dax_match_rule_by_attr_B_t self:infoflow2 ioctl 0x000a;
attribute dax_unioned_perm_via_attr;
type dax_unioned_perm_via_attr_A_t, dax_unioned_perm_via_attr;
type dax_unioned_perm_via_attr_B_t, dax_unioned_perm_via_attr;
dontauditxperm dax_unioned_perm_via_attr_A_t self:infoflow2 ioctl { 0x000b 0x000c };
dontauditxperm dax_unioned_perm_via_attr_B_t self:infoflow2 ioctl { 0x000b 0x000d };
################################################################################ ################################################################################
# matching typebounds # matching typebounds
type match_parent; type match_parent;