All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Guy Briggs <rgb@redhat.com>
To: Paul Moore <paul@paul-moore.com>
Cc: containers@lists.linux-foundation.org, linux-api@vger.kernel.org,
	Linux-Audit Mailing List <linux-audit@redhat.com>,
	linux-fsdevel@vger.kernel.org,
	LKML <linux-kernel@vger.kernel.org>,
	netdev@vger.kernel.org, netfilter-devel@vger.kernel.org,
	sgrubb@redhat.com, omosnace@redhat.com, dhowells@redhat.com,
	simo@redhat.com, Eric Paris <eparis@parisplace.org>,
	Serge Hallyn <serge@hallyn.com>,
	ebiederm@xmission.com, nhorman@tuxdriver.com,
	Dan Walsh <dwalsh@redhat.com>,
	mpatel@redhat.com
Subject: Re: [PATCH ghak90 V8 11/16] audit: add support for containerid to network namespaces
Date: Tue, 4 Feb 2020 18:42:58 -0500	[thread overview]
Message-ID: <20200204234258.uwaqk3s3c42fxews@madcap2.tricolour.ca> (raw)
In-Reply-To: <CAHC9VhRw3Fj9-hi+Vj8JJb_GXM4B9N5hRXa9H6aQkuuFqJJ15w@mail.gmail.com>

On 2020-01-22 16:28, Paul Moore wrote:
> On Tue, Dec 31, 2019 at 2:51 PM Richard Guy Briggs <rgb@redhat.com> wrote:
> >
> > This also adds support to qualify NETFILTER_PKT records.
> >
> > Audit events could happen in a network namespace outside of a task
> > context due to packets received from the net that trigger an auditing
> > rule prior to being associated with a running task.  The network
> > namespace could be in use by multiple containers by association to the
> > tasks in that network namespace.  We still want a way to attribute
> > these events to any potential containers.  Keep a list per network
> > namespace to track these audit container identifiiers.
> >
> > Add/increment the audit container identifier on:
> > - initial setting of the audit container identifier via /proc
> > - clone/fork call that inherits an audit container identifier
> > - unshare call that inherits an audit container identifier
> > - setns call that inherits an audit container identifier
> > Delete/decrement the audit container identifier on:
> > - an inherited audit container identifier dropped when child set
> > - process exit
> > - unshare call that drops a net namespace
> > - setns call that drops a net namespace
> >
> > Add audit container identifier auxiliary record(s) to NETFILTER_PKT
> > event standalone records.  Iterate through all potential audit container
> > identifiers associated with a network namespace.
> >
> > Please see the github audit kernel issue for contid net support:
> >   https://github.com/linux-audit/audit-kernel/issues/92
> > Please see the github audit testsuiite issue for the test case:
> >   https://github.com/linux-audit/audit-testsuite/issues/64
> > Please see the github audit wiki for the feature overview:
> >   https://github.com/linux-audit/audit-kernel/wiki/RFE-Audit-Container-ID
> > Signed-off-by: Richard Guy Briggs <rgb@redhat.com>
> > Acked-by: Neil Horman <nhorman@tuxdriver.com>
> > Reviewed-by: Ondrej Mosnacek <omosnace@redhat.com>
> > ---
> >  include/linux/audit.h    |  24 +++++++++
> >  kernel/audit.c           | 132 ++++++++++++++++++++++++++++++++++++++++++++++-
> >  kernel/nsproxy.c         |   4 ++
> >  net/netfilter/nft_log.c  |  11 +++-
> >  net/netfilter/xt_AUDIT.c |  11 +++-
> >  5 files changed, 176 insertions(+), 6 deletions(-)
> 
> ...
> 
> > diff --git a/include/linux/audit.h b/include/linux/audit.h
> > index 5531d37a4226..ed8d5b74758d 100644
> > --- a/include/linux/audit.h
> > +++ b/include/linux/audit.h
> > @@ -12,6 +12,7 @@
> >  #include <linux/sched.h>
> >  #include <linux/ptrace.h>
> >  #include <uapi/linux/audit.h>
> > +#include <linux/refcount.h>
> >
> >  #define AUDIT_INO_UNSET ((unsigned long)-1)
> >  #define AUDIT_DEV_UNSET ((dev_t)-1)
> > @@ -121,6 +122,13 @@ struct audit_task_info {
> >
> >  extern struct audit_task_info init_struct_audit;
> >
> > +struct audit_contobj_netns {
> > +       struct list_head        list;
> > +       u64                     id;
> 
> Since we now track audit container IDs in their own structure, why not
> link directly to the audit container ID object (and bump the
> refcount)?

Ok, I've done this but at first I had doubts about the complexity.

> > +       refcount_t              refcount;
> > +       struct rcu_head         rcu;
> > +};
> > +
> >  extern int is_audit_feature_set(int which);
> >
> >  extern int __init audit_register_class(int class, unsigned *list);
> > @@ -225,6 +233,12 @@ static inline u64 audit_get_contid(struct task_struct *tsk)
> >  }
> >
> >  extern void audit_log_container_id(struct audit_context *context, u64 contid);
> > +extern void audit_netns_contid_add(struct net *net, u64 contid);
> > +extern void audit_netns_contid_del(struct net *net, u64 contid);
> > +extern void audit_switch_task_namespaces(struct nsproxy *ns,
> > +                                        struct task_struct *p);
> > +extern void audit_log_netns_contid_list(struct net *net,
> > +                                       struct audit_context *context);
> >
> >  extern u32 audit_enabled;
> >
> > @@ -297,6 +311,16 @@ static inline u64 audit_get_contid(struct task_struct *tsk)
> >
> >  static inline void audit_log_container_id(struct audit_context *context, u64 contid)
> >  { }
> > +static inline void audit_netns_contid_add(struct net *net, u64 contid)
> > +{ }
> > +static inline void audit_netns_contid_del(struct net *net, u64 contid)
> > +{ }
> > +static inline void audit_switch_task_namespaces(struct nsproxy *ns,
> > +                                               struct task_struct *p)
> > +{ }
> > +static inline void audit_log_netns_contid_list(struct net *net,
> > +                                              struct audit_context *context)
> > +{ }
> >
> >  #define audit_enabled AUDIT_OFF
> >
> > diff --git a/kernel/audit.c b/kernel/audit.c
> > index d4e6eafe5644..f7a8d3288ca0 100644
> > --- a/kernel/audit.c
> > +++ b/kernel/audit.c
> > @@ -59,6 +59,7 @@
> >  #include <linux/freezer.h>
> >  #include <linux/pid_namespace.h>
> >  #include <net/netns/generic.h>
> > +#include <net/net_namespace.h>
> >
> >  #include "audit.h"
> >
> > @@ -86,9 +87,13 @@
> >  /**
> >   * struct audit_net - audit private network namespace data
> >   * @sk: communication socket
> > + * @contid_list: audit container identifier list
> > + * @contid_list_lock audit container identifier list lock
> >   */
> >  struct audit_net {
> >         struct sock *sk;
> > +       struct list_head contid_list;
> > +       spinlock_t contid_list_lock;
> >  };
> >
> >  /**
> > @@ -305,8 +310,11 @@ struct audit_task_info init_struct_audit = {
> >  void audit_free(struct task_struct *tsk)
> >  {
> >         struct audit_task_info *info = tsk->audit;
> > +       struct nsproxy *ns = tsk->nsproxy;
> >
> >         audit_free_syscall(tsk);
> > +       if (ns)
> > +               audit_netns_contid_del(ns->net_ns, audit_get_contid(tsk));
> >         /* Freeing the audit_task_info struct must be performed after
> >          * audit_log_exit() due to need for loginuid and sessionid.
> >          */
> > @@ -409,6 +417,120 @@ static struct sock *audit_get_sk(const struct net *net)
> >         return aunet->sk;
> >  }
> >
> > +void audit_netns_contid_add(struct net *net, u64 contid)
> > +{
> > +       struct audit_net *aunet;
> > +       struct list_head *contid_list;
> > +       struct audit_contobj_netns *cont;
> > +
> > +       if (!net)
> > +               return;
> > +       if (!audit_contid_valid(contid))
> > +               return;
> > +       aunet = net_generic(net, audit_net_id);
> > +       if (!aunet)
> > +               return;
> > +       contid_list = &aunet->contid_list;
> > +       rcu_read_lock();
> > +       list_for_each_entry_rcu(cont, contid_list, list)
> > +               if (cont->id == contid) {
> > +                       spin_lock(&aunet->contid_list_lock);
> > +                       refcount_inc(&cont->refcount);
> > +                       spin_unlock(&aunet->contid_list_lock);
> > +                       goto out;
> > +               }
> > +       cont = kmalloc(sizeof(*cont), GFP_ATOMIC);
> > +       if (cont) {
> > +               INIT_LIST_HEAD(&cont->list);
> > +               cont->id = contid;
> > +               refcount_set(&cont->refcount, 1);
> > +               spin_lock(&aunet->contid_list_lock);
> > +               list_add_rcu(&cont->list, contid_list);
> > +               spin_unlock(&aunet->contid_list_lock);
> > +       }
> > +out:
> > +       rcu_read_unlock();
> > +}
> 
> See my comments about refcount_t, spinlocks, and list manipulation
> races from earlier in the patchset; the same thing applies to the
> function above.

This was some of the complexity that concerned me, but switching to rcu
read locks helped.  In this case, since a stale list would cause an
update issue and these counts aren't used or updated anywere else,
switching to an int makes sense.

> paul moore

- RGB

--
Richard Guy Briggs <rgb@redhat.com>
Sr. S/W Engineer, Kernel Security, Base Operating Systems
Remote, Ottawa, Red Hat Canada
IRC: rgb, SunRaycer
Voice: +1.647.777.2635, Internal: (81) 32635


  reply	other threads:[~2020-02-04 23:43 UTC|newest]

Thread overview: 168+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-31 19:48 [PATCH ghak90 V8 00/16] audit: implement container identifier Richard Guy Briggs
2019-12-31 19:48 ` [PATCH ghak90 V8 01/16] audit: collect audit task parameters Richard Guy Briggs
2019-12-31 19:48 ` [PATCH ghak90 V8 02/16] audit: add container id Richard Guy Briggs
2020-01-22 21:28   ` Paul Moore
2020-01-22 21:28     ` Paul Moore
2020-01-30 17:53     ` Richard Guy Briggs
2019-12-31 19:48 ` [PATCH ghak90 V8 03/16] audit: read container ID of a process Richard Guy Briggs
2019-12-31 19:48 ` [PATCH ghak90 V8 04/16] audit: convert to contid list to check for orch/engine ownership Richard Guy Briggs
2020-01-22 21:28   ` Paul Moore
2020-01-22 21:28     ` Paul Moore
2020-02-04 22:51     ` Richard Guy Briggs
2020-02-04 22:51       ` Richard Guy Briggs
2020-02-05 22:40       ` Paul Moore
2020-02-05 22:40         ` Paul Moore
2019-12-31 19:48 ` [PATCH ghak90 V8 05/16] audit: log drop of contid on exit of last task Richard Guy Briggs
2020-01-22 21:28   ` Paul Moore
2020-02-04 23:02     ` Richard Guy Briggs
2020-02-04 23:02       ` Richard Guy Briggs
2019-12-31 19:48 ` [PATCH ghak90 V8 06/16] audit: log container info of syscalls Richard Guy Briggs
2019-12-31 19:48 ` [PATCH ghak90 V8 07/16] audit: add contid support for signalling the audit daemon Richard Guy Briggs
2020-01-22 21:28   ` Paul Moore
2020-01-22 21:28     ` Paul Moore
2020-01-23 16:29     ` Richard Guy Briggs
2020-01-23 17:09       ` Paul Moore
2020-01-23 20:04         ` Richard Guy Briggs
2020-01-23 21:35           ` Paul Moore
2020-02-04 23:14             ` Richard Guy Briggs
2020-02-05 22:50               ` Paul Moore
2020-02-05 22:50                 ` Paul Moore
2020-02-12 22:38                 ` Steve Grubb
2020-02-13  0:09                   ` Paul Moore
2020-02-13 21:44                     ` Paul Moore
2020-03-12 19:30                       ` Richard Guy Briggs
2020-03-12 19:30                         ` Richard Guy Briggs
2020-03-13 16:29                         ` Paul Moore
2020-03-13 16:29                           ` Paul Moore
2020-03-13 18:59                           ` Richard Guy Briggs
2020-03-13 18:59                             ` Richard Guy Briggs
2020-03-18 20:56                             ` Paul Moore
2020-03-18 20:56                               ` Paul Moore
2020-03-18 21:26                               ` Richard Guy Briggs
2020-03-18 21:26                                 ` Richard Guy Briggs
2020-03-18 21:42                                 ` Paul Moore
2020-03-18 21:42                                   ` Paul Moore
2020-03-18 21:55                                   ` Richard Guy Briggs
2020-03-18 21:55                                     ` Richard Guy Briggs
2020-03-18 22:06                                     ` Paul Moore
2020-03-18 22:06                                       ` Paul Moore
2020-03-19 22:02                                       ` Richard Guy Briggs
2020-03-19 22:02                                         ` Richard Guy Briggs
2020-03-24  0:16                                         ` Paul Moore
2020-03-24  0:16                                           ` Paul Moore
2020-03-24 21:01                                           ` Richard Guy Briggs
2020-03-24 21:01                                             ` Richard Guy Briggs
2020-03-29  3:11                                             ` Paul Moore
2020-03-29  3:11                                               ` Paul Moore
2020-03-30 13:47                                               ` Richard Guy Briggs
2020-03-30 13:47                                                 ` Richard Guy Briggs
2020-03-30 14:26                                                 ` Paul Moore
2020-03-30 14:26                                                   ` Paul Moore
2020-03-30 16:21                                                   ` Richard Guy Briggs
2020-03-30 16:21                                                     ` Richard Guy Briggs
2020-03-30 17:34                                                     ` Paul Moore
2020-03-30 17:34                                                       ` Paul Moore
2020-03-30 17:49                                                       ` Richard Guy Briggs
2020-03-30 17:49                                                         ` Richard Guy Briggs
2020-03-30 19:55                                                         ` Paul Moore
2020-03-30 19:55                                                           ` Paul Moore
2020-04-16 20:33                                                           ` Eric W. Biederman
2020-04-16 20:33                                                             ` Eric W. Biederman
2020-04-16 21:53                                                             ` Paul Moore
2020-04-16 21:53                                                               ` Paul Moore
2020-04-17 22:23                                                               ` Eric W. Biederman
2020-04-17 22:23                                                                 ` Eric W. Biederman
2020-04-22 17:24                                                                 ` Paul Moore
2020-04-22 17:24                                                                   ` Paul Moore
2020-06-08 18:03                                                                   ` Richard Guy Briggs
2020-06-08 18:03                                                                     ` Richard Guy Briggs
2020-06-17 21:33                                                                     ` Paul Moore
2020-06-17 21:33                                                                       ` Paul Moore
2020-06-19 15:22                                                                 ` Richard Guy Briggs
2020-06-19 15:22                                                                   ` Richard Guy Briggs
2020-03-12 20:27                     ` Richard Guy Briggs
2020-03-12 20:27                       ` Richard Guy Briggs
2020-03-13 16:42                       ` Paul Moore
2020-03-13 16:42                         ` Paul Moore
2020-03-13 16:45                         ` Steve Grubb
2020-03-13 16:45                           ` Steve Grubb
2020-03-13 16:49                           ` Paul Moore
2020-03-13 16:49                             ` Paul Moore
2020-03-13 19:23                         ` Richard Guy Briggs
2020-03-13 19:23                           ` Richard Guy Briggs
2020-03-18 21:01                           ` Paul Moore
2020-03-18 21:01                             ` Paul Moore
2020-03-18 21:41                             ` Richard Guy Briggs
2020-03-18 21:41                               ` Richard Guy Briggs
2020-03-18 21:47                               ` Paul Moore
2020-03-18 21:47                                 ` Paul Moore
2020-03-19 21:47                                 ` Richard Guy Briggs
2020-03-19 21:47                                   ` Richard Guy Briggs
2020-03-20 21:56                                   ` Paul Moore
2020-03-20 21:56                                     ` Paul Moore
2020-03-25 12:29                                     ` Richard Guy Briggs
2020-03-25 12:29                                       ` Richard Guy Briggs
2020-03-29  3:17                                       ` Paul Moore
2020-03-29  3:17                                         ` Paul Moore
2020-03-30 15:23                                         ` Richard Guy Briggs
2020-03-30 15:23                                           ` Richard Guy Briggs
2019-12-31 19:48 ` [PATCH ghak90 V8 08/16] audit: add support for non-syscall auxiliary records Richard Guy Briggs
2019-12-31 19:48 ` [PATCH ghak90 V8 09/16] audit: add containerid support for user records Richard Guy Briggs
2019-12-31 19:48   ` Richard Guy Briggs
2019-12-31 19:48 ` [PATCH ghak90 V8 10/16] audit: add containerid filtering Richard Guy Briggs
2019-12-31 19:48   ` Richard Guy Briggs
2019-12-31 19:48 ` [PATCH ghak90 V8 11/16] audit: add support for containerid to network namespaces Richard Guy Briggs
2019-12-31 19:48   ` Richard Guy Briggs
2020-01-22 21:28   ` Paul Moore
2020-01-22 21:28     ` Paul Moore
2020-02-04 23:42     ` Richard Guy Briggs [this message]
2020-02-05 22:51       ` Paul Moore
2019-12-31 19:48 ` [PATCH ghak90 V8 12/16] audit: contid check descendancy and nesting Richard Guy Briggs
2019-12-31 19:48   ` Richard Guy Briggs
2020-01-22 21:29   ` Paul Moore
2020-01-22 21:29     ` Paul Moore
2020-01-23 21:02     ` Richard Guy Briggs
2020-01-23 21:47       ` Paul Moore
2019-12-31 19:48 ` [PATCH ghak90 V8 13/16] audit: track container nesting Richard Guy Briggs
2019-12-31 19:48   ` Richard Guy Briggs
2020-01-22 21:29   ` Paul Moore
2020-01-22 21:29     ` Paul Moore
2020-01-30 19:27     ` Richard Guy Briggs
2020-02-05 23:05       ` Paul Moore
2020-02-05 23:50         ` Richard Guy Briggs
2020-02-13 21:49           ` Paul Moore
2020-03-12 20:51             ` Richard Guy Briggs
2020-03-12 20:51               ` Richard Guy Briggs
2020-03-13 16:47               ` Paul Moore
2020-03-13 16:47                 ` Paul Moore
2020-03-14 22:42                 ` Richard Guy Briggs
2020-03-14 22:42                   ` Richard Guy Briggs
2020-03-17 18:28                   ` Richard Guy Briggs
2020-03-17 18:28                     ` Richard Guy Briggs
2020-03-18 21:08                   ` Paul Moore
2020-03-18 21:08                     ` Paul Moore
2020-01-31 14:50     ` Steve Grubb
2020-02-04 13:19       ` Richard Guy Briggs
2020-02-04 15:47         ` Steve Grubb
2020-02-04 15:47           ` Steve Grubb
2020-02-04 15:52           ` Paul Moore
2020-02-04 15:52             ` Paul Moore
2020-02-04 18:12             ` Steve Grubb
2020-02-05 22:57               ` Paul Moore
2020-02-05 22:57                 ` Paul Moore
2019-12-31 19:48 ` [PATCH ghak90 V8 14/16] audit: check contid depth and add limit config param Richard Guy Briggs
2020-01-22 21:29   ` Paul Moore
2020-01-22 21:29     ` Paul Moore
2019-12-31 19:48 ` [PATCH ghak90 V8 15/16] audit: check contid count per netns and add config param limit Richard Guy Briggs
2020-01-22 21:29   ` Paul Moore
2020-01-22 21:29     ` Paul Moore
2019-12-31 19:48 ` [PATCH ghak90 V8 16/16] audit: add capcontid to set contid outside init_user_ns Richard Guy Briggs
2020-01-22 21:29   ` Paul Moore
2020-01-22 21:29     ` Paul Moore
2020-02-05  0:39     ` Richard Guy Briggs
2020-02-05 22:56       ` Paul Moore
2020-02-06 12:51         ` Richard Guy Briggs
2020-02-13 21:58           ` Paul Moore
2020-02-13 21:58             ` Paul Moore
2020-03-12 21:58             ` Richard Guy Briggs
2020-03-12 21:58               ` Richard Guy Briggs

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=20200204234258.uwaqk3s3c42fxews@madcap2.tricolour.ca \
    --to=rgb@redhat.com \
    --cc=containers@lists.linux-foundation.org \
    --cc=dhowells@redhat.com \
    --cc=dwalsh@redhat.com \
    --cc=ebiederm@xmission.com \
    --cc=eparis@parisplace.org \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-audit@redhat.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mpatel@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=netfilter-devel@vger.kernel.org \
    --cc=nhorman@tuxdriver.com \
    --cc=omosnace@redhat.com \
    --cc=paul@paul-moore.com \
    --cc=serge@hallyn.com \
    --cc=sgrubb@redhat.com \
    --cc=simo@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.