aa_inet_create_perm() and label_sk_has_perm2() iterate the label with
fn_for_each(), which also visits unconfined profiles. A stacked label
such as the one used by LXD containers (host profile stacked with the
container ns's unconfined profile) is not unconfined as a whole, so it
passes the !unconfined(label) check in the LSM hooks, and the ns's
unconfined profile then reaches aa_profile_af_perm()/
aa_profile_af_sk_perm(), triggering

  WARNING: security/apparmor/net.c:263 at aa_profile_af_perm+0x228/0x3b0

on any inet socket created inside the container.

Use fn_for_each_confined(), as aa_af_perm() and the unix socket
mediation do, so unconfined profiles in a stack do not mediate.

Fixes: 89ac6aa752ec ("apparmor: push inet mediation into profile callbacks, and 
improve auditing")
Signed-off-by: Georgia Garcia <[email protected]>
---
 security/apparmor/af_inet.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/security/apparmor/af_inet.c b/security/apparmor/af_inet.c
index 68e4b1449c40..924212e1f231 100644
--- a/security/apparmor/af_inet.c
+++ b/security/apparmor/af_inet.c
@@ -338,7 +338,7 @@ static int profile_opt_perm(struct aa_profile *profile, u32 
request,
                if (__EERROR == 0) {                            \
                        __EERROR = (YYYY);                      \
                        if (__EERROR == 0) {                    \
-                               __EERROR = fn_for_each(LABEL, PROFILE,  \
+                               __EERROR = fn_for_each_confined(LABEL, PROFILE, 
\
                                                       (CALLBACKFN));   \
                        }                                               \
                }                                                       \
@@ -396,7 +396,7 @@ int aa_inet_create_perm(struct aa_label *label, int family, 
int type,
 
        ad.subj_cred = current_cred();
        set_ad_create(&ad, family, type, protocol);
-       error = fn_for_each(label, profile,
+       error = fn_for_each_confined(label, profile,
                            profile_create_perm(profile, family, type,
                                                protocol, &ad));
 
-- 
2.43.0


Reply via email to