mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
apparmor: Fix regression in profile conflict logic
The intended behaviour in apparmor profile matching is to flag a
conflict if two profiles match equally well. However, right now a
conflict is generated if another profile has the same match length even
if that profile doesn't actually match. Fix the logic so we only
generate a conflict if the profiles match.
Fixes: 844b8292b6 ("apparmor: ensure that undecidable profile attachments fail")
Cc: Stable <[email protected]>
Signed-off-by: Matthew Garrett <[email protected]>
Signed-off-by: John Johansen <[email protected]>
This commit is contained in:
parent
0dda0b3fb2
commit
1a3881d305
1 changed files with 5 additions and 4 deletions
|
|
@ -330,10 +330,7 @@ static struct aa_profile *__attach_match(const char *name,
|
|||
continue;
|
||||
|
||||
if (profile->xmatch) {
|
||||
if (profile->xmatch_len == len) {
|
||||
conflict = true;
|
||||
continue;
|
||||
} else if (profile->xmatch_len > len) {
|
||||
if (profile->xmatch_len >= len) {
|
||||
unsigned int state;
|
||||
u32 perm;
|
||||
|
||||
|
|
@ -342,6 +339,10 @@ static struct aa_profile *__attach_match(const char *name,
|
|||
perm = dfa_user_allow(profile->xmatch, state);
|
||||
/* any accepting state means a valid match. */
|
||||
if (perm & MAY_EXEC) {
|
||||
if (profile->xmatch_len == len) {
|
||||
conflict = true;
|
||||
continue;
|
||||
}
|
||||
candidate = profile;
|
||||
len = profile->xmatch_len;
|
||||
conflict = false;
|
||||
|
|
|
|||
Loading…
Reference in a new issue