mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Casey Schaufler <casey@schaufler-ca.com>
To: Paul Moore <paul@paul-moore.com>
Cc: casey.schaufler@intel.com, jmorris@namei.org,
	linux-security-module@vger.kernel.org, selinux@vger.kernel.org,
	linux-audit@redhat.com, keescook@chromium.org,
	john.johansen@canonical.com, penguin-kernel@i-love.sakura.ne.jp,
	stephen.smalley.work@gmail.com, linux-kernel@vger.kernel.org,
	Casey Schaufler <casey@schaufler-ca.com>
Subject: Re: [PATCH v33 26/29] Audit: Add record for multiple task security contexts
Date: Tue, 15 Mar 2022 17:17:06 -0700	[thread overview]
Message-ID: <8be54cd7-61e1-5534-5f27-e3c24c6ad8fa@schaufler-ca.com> (raw)
In-Reply-To: <CAHC9VhSYr3nC87jk+cPzvVLgYZO9p9vaM7n+jvGEF60RaNJw7A@mail.gmail.com>

On 3/15/2022 4:47 PM, Paul Moore wrote:
> On Thu, Mar 10, 2022 at 6:59 PM Casey Schaufler <casey@schaufler-ca.com> wrote:
>> Create a new audit record AUDIT_MAC_TASK_CONTEXTS.
>> An example of the MAC_TASK_CONTEXTS (1420) record is:
>>
>>      type=MAC_TASK_CONTEXTS[1420]
>>      msg=audit(1600880931.832:113)
>>      subj_apparmor=unconfined
>>      subj_smack=_
>>
>> When an audit event includes a AUDIT_MAC_TASK_CONTEXTS record
>> the "subj=" field in other records in the event will be "subj=?".
>> An AUDIT_MAC_TASK_CONTEXTS record is supplied when the system has
>> multiple security modules that may make access decisions based
>> on a subject security context.
>>
>> Functions are created to manage the skb list in the audit_buffer.
>>
>> Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
>> ---
>>   include/uapi/linux/audit.h |   1 +
>>   kernel/audit.c             | 104 ++++++++++++++++++++++++++++++++-----
>>   2 files changed, 93 insertions(+), 12 deletions(-)
>>
>> diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h
>> index 8eda133ca4c1..af0aaccfaf57 100644
>> --- a/include/uapi/linux/audit.h
>> +++ b/include/uapi/linux/audit.h
>> @@ -143,6 +143,7 @@
>>   #define AUDIT_MAC_UNLBL_STCDEL 1417    /* NetLabel: del a static label */
>>   #define AUDIT_MAC_CALIPSO_ADD  1418    /* NetLabel: add CALIPSO DOI entry */
>>   #define AUDIT_MAC_CALIPSO_DEL  1419    /* NetLabel: del CALIPSO DOI entry */
>> +#define AUDIT_MAC_TASK_CONTEXTS        1420    /* Multiple LSM task contexts */
>>
>>   #define AUDIT_FIRST_KERN_ANOM_MSG   1700
>>   #define AUDIT_LAST_KERN_ANOM_MSG    1799
>> diff --git a/kernel/audit.c b/kernel/audit.c
>> index 4713e66a12af..ad825af203cf 100644
>> --- a/kernel/audit.c
>> +++ b/kernel/audit.c
>> @@ -2147,8 +2147,65 @@ void audit_log_key(struct audit_buffer *ab, char *key)
>>                  audit_log_format(ab, "(null)");
>>   }
>>
>> +/*
>> + * A brief note on aux record management.
>> + *
>> + * Aux records are allocated and added to the skb list of
>> + * the "main" record. The ab->skb is reset to point to the
>> + * aux record on its creation. When the aux record in complete
>                                                        ^^
>                                                       "is"
>> + * ab->skb has to be reset to point to the "main" record.
>> + * This allows the audit_log_ functions to be ignorant of
>> + * which kind of record it is logging to. It also avoids adding
>> + * special data for aux records.
>> + */
> It might be good to move the above comment into the
> audit_buffer_aux_new() comment header (below) so it does not get
> misplaced.
>
>> +/**
>> + * audit_buffer_aux_new - Add an aux record buffer to the skb list
>> + * @ab: audit_buffer
>> + * @type: message type
>> + *
>> + * On success ab->skb will point to the new aux record.
>> + * Returns 0 on success, -ENOMEM should allocation fail.
>> + */
>> +static int audit_buffer_aux_new(struct audit_buffer *ab, int type)
> ...
>
>> @@ -2157,16 +2214,44 @@ int audit_log_task_context(struct audit_buffer *ab)
>>          if (!lsmblob_is_set(&blob))
>>                  return 0;
>>
>> -       error = security_secid_to_secctx(&blob, &context, LSMBLOB_FIRST);
>> +       if (!lsm_multiple_contexts()) {
>> +               error = security_secid_to_secctx(&blob, &context,
>> +                                                LSMBLOB_FIRST);
>> +               if (error) {
>> +                       if (error != -EINVAL)
>> +                               goto error_path;
>> +                       return 0;
>> +               }
>>
>> -       if (error) {
>> -               if (error != -EINVAL)
>> +               audit_log_format(ab, " subj=%s", context.context);
>> +               security_release_secctx(&context);
>> +       } else {
>> +               /* Multiple LSMs provide contexts. Include an aux record. */
>> +               audit_log_format(ab, " subj=?");
>> +               error = audit_buffer_aux_new(ab, AUDIT_MAC_TASK_CONTEXTS);
>> +               if (error)
>>                          goto error_path;
>> -               return 0;
>> +               for (i = 0; i < LSMBLOB_ENTRIES; i++) {
>> +                       if (blob.secid[i] == 0)
>> +                               continue;
>> +                       error = security_secid_to_secctx(&blob, &context, i);
>> +                       if (error) {
>> +                               if (error != -EINVAL)
>> +                                       audit_panic("error in audit_log_task_context");
>> +                               audit_log_format(ab, "%ssubj_%s=?",
>> +                                                i ? " " : "",
>> +                                                lsm_slot_to_name(i));
> I wonder if it might be better to record the "subj_smack=?" field
> before checking @error and potentially calling audit_panic().  In
> practice it likely shouldn't matter, I feel better if we at least
> record the subject information before we call the wildcard that is
> audit_panic().

Not a problem. Easy enough to fix.

>
>> +                       } else {
>> +                               audit_log_format(ab, "%ssubj_%s=%s",
>> +                                                i ? " " : "",
>> +                                                lsm_slot_to_name(i),
>> +                                                context.context);
>> +                               security_release_secctx(&context);
>> +                       }
>> +               }
>> +               audit_buffer_aux_end(ab);
>>          }
>>
>> -       audit_log_format(ab, " subj=%s", context.context);
>> -       security_release_secctx(&context);
>>          return 0;
>>
>>   error_path:
>> @@ -2382,13 +2467,8 @@ int audit_signal_info(int sig, struct task_struct *t)
>>   }
>>
>>   /**
>> - * __audit_log_end - end one audit record
>> + * __audit_log_end - send one audit record
> If we want to be very nit-picky here, "end" is more correct than
> "send".  First, audit_log_end() doesn't actually send the record, it
> just queues the record for the kauditd_thread which then attempts to
> send it.  Second, there is no guarantee that the record will actually
> be sent at this point, although it would be nice if that were true :)

My bad. I thought I had deleted the 's', so I fixed it.


>>    * @skb: the buffer to send
>> - *
>> - * We can not do a netlink send inside an irq context because it blocks (last
>> - * arg, flags, is not set to MSG_DONTWAIT), so the audit buffer is placed on a
>> - * queue and a kthread is scheduled to remove them from the queue outside the
>> - * irq context.  May be called in any context.
>>    */
> This should probably be moved to patch 25/29 as it has more to do with
> the __audit_log_end() introduction than this patch.
>
>
> --
> paul-moore.com

  reply	other threads:[~2022-03-16  0:17 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20220310234632.16194-1-casey.ref@schaufler-ca.com>
2022-03-10 23:46 ` [PATCH v33 00/29] LSM: Module stacking for AppArmor Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 01/29] integrity: disassociate ima_filter_rule from security_audit_rule Casey Schaufler
2022-03-11 10:48     ` kernel test robot
2022-03-10 23:46   ` [PATCH v33 02/29] LSM: Infrastructure management of the sock security Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 03/29] LSM: Add the lsmblob data structure Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 04/29] LSM: provide lsm name and id slot mappings Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 05/29] IMA: avoid label collisions with stacked LSMs Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 06/29] LSM: Use lsmblob in security_audit_rule_match Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 07/29] LSM: Use lsmblob in security_kernel_act_as Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 08/29] LSM: Use lsmblob in security_secctx_to_secid Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 09/29] LSM: Use lsmblob in security_secid_to_secctx Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 10/29] LSM: Use lsmblob in security_ipc_getsecid Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 11/29] LSM: Use lsmblob in security_current_getsecid Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 12/29] LSM: Use lsmblob in security_inode_getsecid Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 13/29] LSM: Use lsmblob in security_cred_getsecid Casey Schaufler
2022-03-11  7:52     ` kernel test robot
2022-03-11  9:16     ` kernel test robot
2022-03-12  4:50     ` kernel test robot
2022-03-10 23:46   ` [PATCH v33 14/29] LSM: Specify which LSM to display Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 15/29] LSM: Ensure the correct LSM context releaser Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 16/29] LSM: Use lsmcontext in security_secid_to_secctx Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 17/29] LSM: Use lsmcontext in security_inode_getsecctx Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 18/29] LSM: security_secid_to_secctx in netlink netfilter Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 19/29] NET: Store LSM netlabel data in a lsmblob Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 20/29] binder: Pass LSM identifier for confirmation Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 21/29] LSM: Extend security_secid_to_secctx to include module selection Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 22/29] Audit: Keep multiple LSM data in audit_names Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 23/29] Audit: Create audit_stamp structure Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 24/29] LSM: Add a function to report multiple LSMs Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 25/29] Audit: Allow multiple records in an audit_buffer Casey Schaufler
2022-03-15 23:47     ` Paul Moore
2022-03-16  0:06       ` Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 26/29] Audit: Add record for multiple task security contexts Casey Schaufler
2022-03-15 23:47     ` Paul Moore
2022-03-16  0:17       ` Casey Schaufler [this message]
2022-03-10 23:46   ` [PATCH v33 27/29] Audit: Add record for multiple object " Casey Schaufler
2022-03-15 23:47     ` Paul Moore
2022-03-16  0:23       ` Casey Schaufler
2022-03-16  1:08         ` Paul Moore
2022-03-10 23:46   ` [PATCH v33 28/29] LSM: Add /proc attr entry for full LSM context Casey Schaufler
2022-03-10 23:46   ` [PATCH v33 29/29] AppArmor: Remove the exclusive flag Casey Schaufler

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8be54cd7-61e1-5534-5f27-e3c24c6ad8fa@schaufler-ca.com \
    --to=casey@schaufler-ca.com \
    --cc=casey.schaufler@intel.com \
    --cc=jmorris@namei.org \
    --cc=john.johansen@canonical.com \
    --cc=keescook@chromium.org \
    --cc=linux-audit@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=paul@paul-moore.com \
    --cc=penguin-kernel@i-love.sakura.ne.jp \
    --cc=selinux@vger.kernel.org \
    --cc=stephen.smalley.work@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®