[apparmor] [patch] delete_duplicates(): don't modify self.rules while looping over it
Christian Boltz
apparmor at cboltz.de
Sun Aug 7 14:57:44 UTC 2016
Hello,
by calling self.delete() inside the delete_duplicates() loop, the
self.rules list was modified. This resulted in some rules not being
checked and therefore (some, not all) superfluous rules not being
removed.
This patch switches to a temporary variable to loop over, and rebuilds
self.rules with the rules that are not superfluous.
This also fixes some strange issues already marked with a "Huh?" comment
in the tests.
I propose this patch for trunk and 2.10.
Note that in 2.10 cleanprof_test.* doesn't contain a ptrace rule,
therefore the cleanprof_test.out change doesn't make sense for 2.10.
[ 01-delete_duplicates-dont-modify-list-in-loop.diff ]
--- utils/apparmor/rule/__init__.py 2016-07-31 19:12:31.537453276 +0200
+++ utils/apparmor/rule/__init__.py 2016-08-07 16:32:19.435814124 +0200
@@ -431,10 +431,13 @@
# delete rules that are covered by include files
if include_rules:
- for rule in self.rules:
- if include_rules.is_covered(rule, True, True):
- self.delete(rule)
+ oldrules = self.rules
+ self.rules = []
+ for rule in oldrules:
+ if include_rules.is_covered(rule, True, False):
deleted += 1
+ else:
+ self.rules.append(rule)
# de-duplicate rules inside the profile
deleted += self.delete_in_profile_duplicates()
--- utils/test/cleanprof_test.out 2016-07-31 19:12:31.517453376 +0200
+++ utils/test/cleanprof_test.out 2016-08-07 16:37:22.402324691 +0200
@@ -16,8 +16,6 @@
signal set=(abrt alrm bus chld fpe hup ill int kill pipe quit segv stkflt term trap usr1 usr2),
- ptrace tracedby,
-
unix (receive) type=dgram,
allow /home/*/** r,
--- utils/test/test-capability.py 2015-11-19 17:42:26.325879118 +0100
+++ utils/test/test-capability.py 2016-08-07 16:40:33.097385534 +0200
@@ -817,7 +817,6 @@
inc.add(CapabilityRule.parse(rule))
expected_raw = [
- ' allow capability sys_admin,', # XXX huh? should be deleted!
' deny capability chgrp, # example comment',
'',
]
@@ -825,11 +824,9 @@
expected_clean = [
' deny capability chgrp, # example comment',
'',
- ' allow capability sys_admin,', # XXX huh? should be deleted!
- '',
]
- self.assertEqual(self.ruleset.delete_duplicates(inc), 1)
+ self.assertEqual(self.ruleset.delete_duplicates(inc), 2)
self.assertEqual(expected_raw, self.ruleset.get_raw(1))
self.assertEqual(expected_clean, self.ruleset.get_clean(1))
Regards,
Christian Boltz
--
Über den Autor Marcus Meissner:
Marcus Meissner entwickelt seit über 10 Jahren Opensource Entwickler.
[gefunden auf http://www.linuxtag.org/2007/de/conf/events/vp-mittwoch/vortragsdetails.html?talkid=40]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.ubuntu.com/archives/apparmor/attachments/20160807/07b2e424/attachment.pgp>
More information about the AppArmor
mailing list