[PATCH][RFC] audit: log namespace inode numbers

William Roberts bill.c.roberts at gmail.com
Sat Dec 21 09:01:40 UTC 2013


I'm doing work now involving namespaces....the necessity is real.  I'll
take a look early next week.
On Dec 20, 2013 10:34 PM, "Richard Guy Briggs" <rgb at redhat.com> wrote:

> Log the namespace details of a task.
> ---
>
> Does anyone have comments on this patch?
>
> I'm looking for guidance on which types of messages should have namespace
> information included.  I've included too many, I suspect.
>
> I also wonder if displaying these inode numbers in hexadecimal makes more
> sense
> than decimal, since they are all based around 0xF0000000.  These are all
> with
> reference to the proc filesystem, so a device number should not be
> necessary to
> qualify them.
>
>
>  include/linux/audit.h |    1 +
>  kernel/audit.c        |   29 +++++++++++++++++++++++++++++
>  kernel/audit_watch.c  |    1 +
>  kernel/auditfilter.c  |    1 +
>  kernel/auditsc.c      |    5 +++++
>  5 files changed, 37 insertions(+), 0 deletions(-)
>
> diff --git a/include/linux/audit.h b/include/linux/audit.h
> index 6976219..75fa602 100644
> --- a/include/linux/audit.h
> +++ b/include/linux/audit.h
> @@ -92,6 +92,7 @@ extern int audit_classify_arch(int arch);
>  struct filename;
>
>  extern void audit_log_session_info(struct audit_buffer *ab);
> +extern void audit_log_namespace_info(struct audit_buffer *ab, struct
> task_struct *tsk);
>
>  #ifdef CONFIG_AUDITSYSCALL
>  /* These are defined in auditsc.c */
> diff --git a/kernel/audit.c b/kernel/audit.c
> index dc03a30..b4c39a9 100644
> --- a/kernel/audit.c
> +++ b/kernel/audit.c
> @@ -62,7 +62,15 @@
>  #endif
>  #include <linux/freezer.h>
>  #include <linux/tty.h>
> +#include <linux/nsproxy.h>
> +#include <linux/utsname.h>
> +#include <linux/ipc_namespace.h>
> +#include "../fs/mount.h"
> +#include <linux/mount.h>
> +#include <linux/mnt_namespace.h>
>  #include <linux/pid_namespace.h>
> +#include <net/net_namespace.h>
> +#include <linux/user_namespace.h>
>  #include <net/netns/generic.h>
>
>  #include "audit.h"
> @@ -292,6 +300,7 @@ static int audit_log_config_change(char
> *function_name, int new, int old,
>                 return rc;
>         audit_log_format(ab, "%s=%d old=%d", function_name, new, old);
>         audit_log_session_info(ab);
> +       audit_log_namespace_info(ab, current);
>         rc = audit_log_task_context(ab);
>         if (rc)
>                 allow_changes = 0; /* Something weird, deny request */
> @@ -657,6 +666,7 @@ static int audit_log_common_recv_msg(struct
> audit_buffer **ab, u16 msg_type)
>                 return rc;
>         audit_log_format(*ab, "pid=%d uid=%u", task_tgid_vnr(current),
> uid);
>         audit_log_session_info(*ab);
> +       audit_log_namespace_info(*ab, current);
>         audit_log_task_context(*ab);
>
>         return rc;
> @@ -689,6 +699,7 @@ static void audit_log_feature_change(int which, u32
> old_feature, u32 new_feature
>                 return;
>
>         ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_FEATURE_CHANGE);
> +       audit_log_namespace_info(ab, current);
>         audit_log_format(ab, "feature=%s old=%d new=%d old_lock=%d
> new_lock=%d res=%d",
>                          audit_feature_names[which], !!old_feature,
> !!new_feature,
>                          !!old_lock, !!new_lock, res);
> @@ -1621,6 +1632,23 @@ void audit_log_session_info(struct audit_buffer *ab)
>         audit_log_format(ab, " auid=%u ses=%u", auid, sessionid);
>  }
>
> +void audit_log_namespace_info(struct audit_buffer *ab, struct task_struct
> *tsk)
> +{
> +       struct nsproxy *nsproxy;
> +
> +       rcu_read_lock();
> +       audit_log_format(ab, " pidns=%x",
> task_active_pid_ns(tsk)->proc_inum);
> +       nsproxy = task_nsproxy(tsk);
> +       if (nsproxy != NULL) {
> +               audit_log_format(ab, " usrns=%x",
> nsproxy->net_ns->user_ns->proc_inum);
> +               audit_log_format(ab, " utsns=%x",
> nsproxy->uts_ns->proc_inum);
> +               audit_log_format(ab, " ipcns=%x",
> nsproxy->ipc_ns->proc_inum);
> +               audit_log_format(ab, " mntns=%x",
> nsproxy->mnt_ns->proc_inum);
> +               audit_log_format(ab, " netns=%x",
> nsproxy->net_ns->proc_inum);
> +       }
> +       rcu_read_unlock();
> +}
> +
>  void audit_log_key(struct audit_buffer *ab, char *key)
>  {
>         audit_log_format(ab, " key=");
> @@ -1890,6 +1918,7 @@ void audit_log_link_denied(const char *operation,
> struct path *link)
>                 goto out;
>         audit_log_format(ab, "op=%s", operation);
>         audit_log_task_info(ab, current);
> +       audit_log_namespace_info(ab, current);
>         audit_log_format(ab, " res=0");
>         audit_log_end(ab);
>
> diff --git a/kernel/audit_watch.c b/kernel/audit_watch.c
> index 22831c4..2382a3e 100644
> --- a/kernel/audit_watch.c
> +++ b/kernel/audit_watch.c
> @@ -245,6 +245,7 @@ static void audit_watch_log_rule_change(struct
> audit_krule *r, struct audit_watc
>                 audit_log_format(ab, "auid=%u ses=%u op=",
>                                  from_kuid(&init_user_ns,
> audit_get_loginuid(current)),
>                                  audit_get_sessionid(current));
> +       audit_log_namespace_info(ab, current);
>                 audit_log_string(ab, op);
>                 audit_log_format(ab, " path=");
>                 audit_log_untrustedstring(ab, w->path);
> diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
> index 14a78cc..9c4b004 100644
> --- a/kernel/auditfilter.c
> +++ b/kernel/auditfilter.c
> @@ -1014,6 +1014,7 @@ static void audit_log_rule_change(char *action,
> struct audit_krule *rule, int re
>         if (!ab)
>                 return;
>         audit_log_format(ab, "auid=%u ses=%u" ,loginuid, sessionid);
> +       audit_log_namespace_info(ab, current);
>         audit_log_task_context(ab);
>         audit_log_format(ab, " op=");
>         audit_log_string(ab, action);
> diff --git a/kernel/auditsc.c b/kernel/auditsc.c
> index 10176cd..3c73a3b 100644
> --- a/kernel/auditsc.c
> +++ b/kernel/auditsc.c
> @@ -974,6 +974,7 @@ static int audit_log_pid_context(struct audit_context
> *context, pid_t pid,
>         audit_log_format(ab, "opid=%d oauid=%d ouid=%d oses=%d", pid,
>                          from_kuid(&init_user_ns, auid),
>                          from_kuid(&init_user_ns, uid), sessionid);
> +       audit_log_namespace_info(ab, current);
>         if (sid) {
>                 if (security_secid_to_secctx(sid, &ctx, &len)) {
>                         audit_log_format(ab, " obj=(none)");
> @@ -1302,6 +1303,7 @@ static void audit_log_exit(struct audit_context
> *context, struct task_struct *ts
>                          context->name_count);
>
>         audit_log_task_info(ab, tsk);
> +       audit_log_namespace_info(ab, current);
>         audit_log_key(ab, context->filterkey);
>         audit_log_end(ab);
>
> @@ -1987,6 +1989,7 @@ static void audit_log_set_loginuid(kuid_t
> koldloginuid, kuid_t kloginuid,
>                          current->pid, uid,
>                          oldloginuid, loginuid, oldsessionid, sessionid,
>                          !rc);
> +       audit_log_namespace_info(ab, current);
>         audit_log_end(ab);
>  }
>
> @@ -2400,6 +2403,7 @@ void audit_core_dumps(long signr)
>         if (unlikely(!ab))
>                 return;
>         audit_log_task(ab);
> +       audit_log_namespace_info(ab, current);
>         audit_log_format(ab, " sig=%ld", signr);
>         audit_log_end(ab);
>  }
> @@ -2412,6 +2416,7 @@ void __audit_seccomp(unsigned long syscall, long
> signr, int code)
>         if (unlikely(!ab))
>                 return;
>         audit_log_task(ab);
> +       audit_log_namespace_info(ab, current);
>         audit_log_format(ab, " sig=%ld", signr);
>         audit_log_format(ab, " syscall=%ld", syscall);
>         audit_log_format(ab, " compat=%d", is_compat_task());
> --
> 1.7.1
>
> --
> Linux-audit mailing list
> Linux-audit at redhat.com
> https://www.redhat.com/mailman/listinfo/linux-audit
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/linux-audit/attachments/20131221/4d923c26/attachment.htm>


More information about the Linux-audit mailing list