mirror of
https://gitlab.com/apparmor/apparmor.git
synced 2025-03-04 00:14:44 +01:00
parser: equality tests: fix equality failure due to xtable
exec rules that specify an specific target profile generate an entry in the xtable. The test entries containing " -> b" are an example of this. Currently the parser allocates the xtable entry before priorities are applied in the backend, or minimization is done. Further more the parser does not ref count the xtable entry to know what it is no longer referenced. The equality tests generate rules that are designed to completely override and remove a lower priority rule, and remove it. Eg. /t { priority=1 /* ux, /f px -> b, } and then compares the generated profile to the functionaly equivalent profile eg. /t { priority=1 /* ux, } To verify the overridden rule has been completely removed. Unfortunately the compilation is not removing the unused xtable entry for the specified transition, causing the equality comparison to fail. Ideally the parser should be fixed so unused xtable entries are removed, but that should be done in a different MR, and have its own test. To fix the current tests, and another rule that adds an xtable entry to the same target that can not be overriden by the x rule using pivot_root. The parser will dedup the xtable entry resulting in the known and test profile both having the same xtable. So the test will pass and meet the original goal of verifying the x rule being overriden and eliminated. Signed-off-by: John Johansen <john.johansen@canonical.com>
This commit is contained in:
parent
cca842b897
commit
84650beb2f
1 changed files with 14 additions and 4 deletions
|
@ -649,14 +649,24 @@ do
|
|||
"pix -> b" "Pix -> b" "cux -> b" "Cux -> b" \
|
||||
"cix -> b" "Cix -> b"
|
||||
do
|
||||
|
||||
# Fixme: have to do special handling for -> b, as this
|
||||
# creates an entry in the transition table. However
|
||||
# priority rules can make it so the reference to the
|
||||
# transition table is removed, but the parser still keeps
|
||||
# the tranition. This can lead to a situation where the
|
||||
# test dfa with a "-> b" transition is functionally equivalent
|
||||
# but will fail equality comparison.
|
||||
# fix this by adding a pivot_root -> b, rule which add
|
||||
# add an xtable entry that is deduped with the xrule
|
||||
if [ "$perm1" == "$perm2" ] || priority_gt "$p1" "" ; then
|
||||
verify_binary_equality "'$p1'x'$p2' Exec perm \"${perm1}\" - most specific match: same as glob" \
|
||||
"/t { $p1 /* ${perm1}, /f ${perm2}, }" \
|
||||
"/t { $p2 /* ${perm1}, }"
|
||||
"/t { $p1 /* ${perm1}, /f ${perm2}, pivot_root -> b, }" \
|
||||
"/t { $p2 /* ${perm1}, pivot_root -> b, }"
|
||||
else
|
||||
verify_binary_inequality "'$p1'x'$p2' Exec \"${perm1}\" vs \"${perm2}\" - most specific match: different from glob" \
|
||||
"/t { $p1 /* ${perm1}, /f ${perm2}, }" \
|
||||
"/t { $p2 /* ${perm1}, }"
|
||||
"/t { $p1 /* ${perm1}, /f ${perm2}, pivot_root -> b, }" \
|
||||
"/t { $p2 /* ${perm1}, pivot_root -> b, }"
|
||||
fi
|
||||
done
|
||||
verify_binary_inequality "'$p1'x'$p2' Exec \"${perm1}\" vs deny x - most specific match: different from glob" \
|
||||
|
|
Loading…
Add table
Reference in a new issue