[apparmor] [PATCH 10/16] apparmor: fix: log failures for all profiles in a set
Seth Arnold
seth.arnold at canonical.com
Thu Apr 28 03:10:56 UTC 2016
On Wed, Apr 20, 2016 at 11:52:52PM -0700, John Johansen wrote:
> currently only the profile that is causing the failure is logged. This
> makes it more confusing than necessary about which profiles loaded
> and which didn't. So make sure to log success and failure messages for
> all profiles in the set being loaded.
>
> Signed-off-by: John Johansen <john.johansen at canonical.com>
Very neat.
Acked-by: Seth Arnold <seth.arnold at canonical.com>
Thanks
> ---
> security/apparmor/policy.c | 29 +++++++++++++++++++----------
> 1 file changed, 19 insertions(+), 10 deletions(-)
>
> diff --git a/security/apparmor/policy.c b/security/apparmor/policy.c
> index 455c9f8..db31bc5 100644
> --- a/security/apparmor/policy.c
> +++ b/security/apparmor/policy.c
> @@ -1067,7 +1067,7 @@ static int __lookup_replace(struct aa_namespace *ns, const char *hname,
> */
> ssize_t aa_replace_profiles(void *udata, size_t size, bool noreplace)
> {
> - const char *ns_name, *name = NULL, *info = NULL;
> + const char *ns_name, *info = NULL;
> struct aa_namespace *ns = NULL;
> struct aa_load_ent *ent, *tmp;
> int op = OP_PROF_REPL;
> @@ -1082,18 +1082,15 @@ ssize_t aa_replace_profiles(void *udata, size_t size, bool noreplace)
> /* released below */
> ns = aa_prepare_namespace(ns_name);
> if (!ns) {
> - info = "failed to prepare namespace";
> - error = -ENOMEM;
> - name = ns_name;
> - goto fail;
> + error = audit_policy(op, GFP_KERNEL, ns_name,
> + "failed to prepare namespace", -ENOMEM);
> + goto free;
> }
>
> mutex_lock(&ns->lock);
> /* setup parent and ns info */
> list_for_each_entry(ent, &lh, list) {
> struct aa_policy *policy;
> -
> - name = ent->new->base.hname;
> error = __lookup_replace(ns, ent->new->base.hname, noreplace,
> &ent->old, &info);
> if (error)
> @@ -1121,7 +1118,6 @@ ssize_t aa_replace_profiles(void *udata, size_t size, bool noreplace)
> if (!p) {
> error = -ENOENT;
> info = "parent does not exist";
> - name = ent->new->base.hname;
> goto fail_lock;
> }
> rcu_assign_pointer(ent->new->parent, aa_get_profile(p));
> @@ -1214,9 +1210,22 @@ out:
>
> fail_lock:
> mutex_unlock(&ns->lock);
> -fail:
> - error = audit_policy(op, GFP_KERNEL, name, info, error);
>
> + /* audit cause of failure */
> + op = (!ent->old) ? OP_PROF_LOAD : OP_PROF_REPL;
> + audit_policy(op, GFP_KERNEL, ent->new->base.hname, info, error);
> + /* audit status that rest of profiles in the atomic set failed too */
> + info = "valid profile in failed atomic policy load";
> + list_for_each_entry(tmp, &lh, list) {
> + if (tmp == ent) {
> + info = "unchecked profile in failed atomic policy load";
> + /* skip entry that caused failure */
> + continue;
> + }
> + op = (!ent->old) ? OP_PROF_LOAD : OP_PROF_REPL;
> + audit_policy(op, GFP_KERNEL, tmp->new->base.hname, info, error);
> + }
> +free:
> list_for_each_entry_safe(ent, tmp, &lh, list) {
> list_del_init(&ent->list);
> aa_load_ent_free(ent);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: Digital signature
URL: <https://lists.ubuntu.com/archives/apparmor/attachments/20160427/3d0811f3/attachment.pgp>
More information about the AppArmor
mailing list