/* set global flag turning off the ability to load policy */
 static int param_set_aalockpolicy(const char *val, const struct kernel_param *kp)
 {
-       if (!policy_admin_capable())
+       if (!policy_admin_capable(NULL))
                return -EPERM;
        return param_set_bool(val, kp);
 }
 
 static int param_set_aabool(const char *val, const struct kernel_param *kp)
 {
-       if (!policy_admin_capable())
+       if (!policy_admin_capable(NULL))
                return -EPERM;
        return param_set_bool(val, kp);
 }
 
 static int param_set_aauint(const char *val, const struct kernel_param *kp)
 {
-       if (!policy_admin_capable())
+       if (!policy_admin_capable(NULL))
                return -EPERM;
        return param_set_uint(val, kp);
 }
 static int param_set_audit(const char *val, struct kernel_param *kp)
 {
        int i;
-       if (!policy_admin_capable())
+       if (!policy_admin_capable(NULL))
                return -EPERM;
 
        if (!apparmor_enabled)
 
 static int param_get_mode(char *buffer, struct kernel_param *kp)
 {
-       if (!policy_admin_capable())
+       if (!policy_view_capable(NULL))
                return -EPERM;
 
        if (!apparmor_enabled)
 static int param_set_mode(const char *val, struct kernel_param *kp)
 {
        int i;
-       if (!policy_admin_capable())
+       if (!policy_admin_capable(NULL))
                return -EPERM;
 
        if (!apparmor_enabled)
 
        return response;
 }
 
-bool policy_admin_capable(void)
+bool policy_admin_capable(struct aa_ns *ns)
 {
-       return policy_view_capable(NULL) && !aa_g_lock_policy;
+       struct user_namespace *user_ns = current_user_ns();
+       bool capable = ns_capable(user_ns, CAP_MAC_ADMIN);
+
+       AA_DEBUG("cap_mac_admin? %d\n", capable);
+       AA_DEBUG("policy locked? %d\n", aa_g_lock_policy);
+
+       return policy_view_capable(ns) && capable && !aa_g_lock_policy;
 }
 
 /**
                return 0;
        }
 
-       if (!policy_admin_capable()) {
+       if (!policy_admin_capable(NULL)) {
                audit_policy(__aa_current_profile(), op, GFP_KERNEL, NULL,
                             "not policy admin", -EACCES);
                return 0;