Re: [PATCH ghak90 V5 08/10] audit: add containerid filtering

2019-03-27 Thread Richard Guy Briggs
On 2019-03-27 22:41, Ondrej Mosnacek wrote:
> On Tue, Mar 19, 2019 at 12:47 AM Richard Guy Briggs  wrote:
> > On 2019-03-18 21:02, Ondrej Mosnacek wrote:
> > > On Fri, Mar 15, 2019 at 7:35 PM Richard Guy Briggs  
> > > wrote:
> > > >
> > > > Implement audit container identifier filtering using the AUDIT_CONTID
> > > > field name to send an 8-character string representing a u64 since the
> > > > value field is only u32.
> > > >
> > > > Sending it as two u32 was considered, but gathering and comparing two
> > > > fields was more complex.
> > > >
> > > > The feature indicator is AUDIT_FEATURE_BITMAP_CONTAINERID.
> > > >
> > > > See: https://github.com/linux-audit/audit-kernel/issues/91
> > > > See: https://github.com/linux-audit/audit-userspace/issues/40
> > > > See: https://github.com/linux-audit/audit-testsuite/issues/64
> > > > See: 
> > > > https://github.com/linux-audit/audit-kernel/wiki/RFE-Audit-Container-ID
> > > > Signed-off-by: Richard Guy Briggs 
> > > > Acked-by: Serge Hallyn 
> > > > ---
> > > >  include/linux/audit.h  |  1 +
> > > >  include/uapi/linux/audit.h |  5 -
> > > >  kernel/audit.h |  1 +
> > > >  kernel/auditfilter.c   | 47 
> > > > ++
> > > >  kernel/auditsc.c   |  3 +++
> > > >  5 files changed, 56 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/include/linux/audit.h b/include/linux/audit.h
> > > > index 6db5aba7cc01..fa19fa408931 100644
> > > > --- a/include/linux/audit.h
> > > > +++ b/include/linux/audit.h
> > > > @@ -77,6 +77,7 @@ struct audit_field {
> > > > u32 type;
> > > > union {
> > > > u32 val;
> > > > +   u64 val64;
> > > > kuid_t  uid;
> > > > kgid_t  gid;
> > > > struct {
> > > > diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h
> > > > index a6383e28b2c8..741ab6f38294 100644
> > > > --- a/include/uapi/linux/audit.h
> > > > +++ b/include/uapi/linux/audit.h
> > > > @@ -265,6 +265,7 @@
> > > >  #define AUDIT_LOGINUID_SET 24
> > > >  #define AUDIT_SESSIONID25  /* Session ID */
> > > >  #define AUDIT_FSTYPE   26  /* FileSystem Type */
> > > > +#define AUDIT_CONTID   27  /* Container ID */
> > > >
> > > > /* These are ONLY useful when checking
> > > >  * at syscall exit time 
> > > > (AUDIT_AT_EXIT). */
> > > > @@ -345,6 +346,7 @@ enum {
> > > >  #define AUDIT_FEATURE_BITMAP_SESSIONID_FILTER  0x0010
> > > >  #define AUDIT_FEATURE_BITMAP_LOST_RESET0x0020
> > > >  #define AUDIT_FEATURE_BITMAP_FILTER_FS 0x0040
> > > > +#define AUDIT_FEATURE_BITMAP_CONTAINERID   0x0080
> > > >
> > > >  #define AUDIT_FEATURE_BITMAP_ALL (AUDIT_FEATURE_BITMAP_BACKLOG_LIMIT | 
> > > > \
> > > >   
> > > > AUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME | \
> > > > @@ -352,7 +354,8 @@ enum {
> > > >   AUDIT_FEATURE_BITMAP_EXCLUDE_EXTEND | 
> > > > \
> > > >   AUDIT_FEATURE_BITMAP_SESSIONID_FILTER 
> > > > | \
> > > >   AUDIT_FEATURE_BITMAP_LOST_RESET | \
> > > > - AUDIT_FEATURE_BITMAP_FILTER_FS)
> > > > + AUDIT_FEATURE_BITMAP_FILTER_FS | \
> > > > + AUDIT_FEATURE_BITMAP_CONTAINERID)
> > > >
> > > >  /* deprecated: AUDIT_VERSION_* */
> > > >  #define AUDIT_VERSION_LATEST   AUDIT_FEATURE_BITMAP_ALL
> > > > diff --git a/kernel/audit.h b/kernel/audit.h
> > > > index 2a1a8b8a8019..3a40b608bf8d 100644
> > > > --- a/kernel/audit.h
> > > > +++ b/kernel/audit.h
> > > > @@ -230,6 +230,7 @@ static inline int audit_hash_ino(u32 ino)
> > > >
> > > >  extern int audit_match_class(int class, unsigned syscall);
> > > >  extern int audit_comparator(const u32 left, const u32 op, const u32 
> > > > right);
> > > > +extern int audit_comparator64(const u64 left, const u32 op, const u64 
> > > > right);
> > > >  extern int audit_uid_comparator(kuid_t left, u32 op, kuid_t right);
> > > >  extern int audit_gid_comparator(kgid_t left, u32 op, kgid_t right);
> > > >  extern int parent_len(const char *path);
> > > > diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
> > > > index add360b46b38..516b8e58959e 100644
> > > > --- a/kernel/auditfilter.c
> > > > +++ b/kernel/auditfilter.c
> > > > @@ -410,6 +410,7 @@ static int audit_field_valid(struct audit_entry 
> > > > *entry, struct audit_field *f)
> > > > /* FALL THROUGH */
> > > > case AUDIT_ARCH:
> > > > case AUDIT_FSTYPE:
> > > > +   case AUDIT_CONTID:
> > > > if (f->op != Audit_not_equal && f->op != Audit_equal)
> > > > return -EINVAL;
> > > > 

Re: [PATCH ghak90 V5 08/10] audit: add containerid filtering

2019-03-27 Thread Ondrej Mosnacek
On Tue, Mar 19, 2019 at 12:47 AM Richard Guy Briggs  wrote:
> On 2019-03-18 21:02, Ondrej Mosnacek wrote:
> > On Fri, Mar 15, 2019 at 7:35 PM Richard Guy Briggs  wrote:
> > >
> > > Implement audit container identifier filtering using the AUDIT_CONTID
> > > field name to send an 8-character string representing a u64 since the
> > > value field is only u32.
> > >
> > > Sending it as two u32 was considered, but gathering and comparing two
> > > fields was more complex.
> > >
> > > The feature indicator is AUDIT_FEATURE_BITMAP_CONTAINERID.
> > >
> > > See: https://github.com/linux-audit/audit-kernel/issues/91
> > > See: https://github.com/linux-audit/audit-userspace/issues/40
> > > See: https://github.com/linux-audit/audit-testsuite/issues/64
> > > See: 
> > > https://github.com/linux-audit/audit-kernel/wiki/RFE-Audit-Container-ID
> > > Signed-off-by: Richard Guy Briggs 
> > > Acked-by: Serge Hallyn 
> > > ---
> > >  include/linux/audit.h  |  1 +
> > >  include/uapi/linux/audit.h |  5 -
> > >  kernel/audit.h |  1 +
> > >  kernel/auditfilter.c   | 47 
> > > ++
> > >  kernel/auditsc.c   |  3 +++
> > >  5 files changed, 56 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/include/linux/audit.h b/include/linux/audit.h
> > > index 6db5aba7cc01..fa19fa408931 100644
> > > --- a/include/linux/audit.h
> > > +++ b/include/linux/audit.h
> > > @@ -77,6 +77,7 @@ struct audit_field {
> > > u32 type;
> > > union {
> > > u32 val;
> > > +   u64 val64;
> > > kuid_t  uid;
> > > kgid_t  gid;
> > > struct {
> > > diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h
> > > index a6383e28b2c8..741ab6f38294 100644
> > > --- a/include/uapi/linux/audit.h
> > > +++ b/include/uapi/linux/audit.h
> > > @@ -265,6 +265,7 @@
> > >  #define AUDIT_LOGINUID_SET 24
> > >  #define AUDIT_SESSIONID25  /* Session ID */
> > >  #define AUDIT_FSTYPE   26  /* FileSystem Type */
> > > +#define AUDIT_CONTID   27  /* Container ID */
> > >
> > > /* These are ONLY useful when checking
> > >  * at syscall exit time (AUDIT_AT_EXIT). 
> > > */
> > > @@ -345,6 +346,7 @@ enum {
> > >  #define AUDIT_FEATURE_BITMAP_SESSIONID_FILTER  0x0010
> > >  #define AUDIT_FEATURE_BITMAP_LOST_RESET0x0020
> > >  #define AUDIT_FEATURE_BITMAP_FILTER_FS 0x0040
> > > +#define AUDIT_FEATURE_BITMAP_CONTAINERID   0x0080
> > >
> > >  #define AUDIT_FEATURE_BITMAP_ALL (AUDIT_FEATURE_BITMAP_BACKLOG_LIMIT | \
> > >   AUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME 
> > > | \
> > > @@ -352,7 +354,8 @@ enum {
> > >   AUDIT_FEATURE_BITMAP_EXCLUDE_EXTEND | \
> > >   AUDIT_FEATURE_BITMAP_SESSIONID_FILTER | 
> > > \
> > >   AUDIT_FEATURE_BITMAP_LOST_RESET | \
> > > - AUDIT_FEATURE_BITMAP_FILTER_FS)
> > > + AUDIT_FEATURE_BITMAP_FILTER_FS | \
> > > + AUDIT_FEATURE_BITMAP_CONTAINERID)
> > >
> > >  /* deprecated: AUDIT_VERSION_* */
> > >  #define AUDIT_VERSION_LATEST   AUDIT_FEATURE_BITMAP_ALL
> > > diff --git a/kernel/audit.h b/kernel/audit.h
> > > index 2a1a8b8a8019..3a40b608bf8d 100644
> > > --- a/kernel/audit.h
> > > +++ b/kernel/audit.h
> > > @@ -230,6 +230,7 @@ static inline int audit_hash_ino(u32 ino)
> > >
> > >  extern int audit_match_class(int class, unsigned syscall);
> > >  extern int audit_comparator(const u32 left, const u32 op, const u32 
> > > right);
> > > +extern int audit_comparator64(const u64 left, const u32 op, const u64 
> > > right);
> > >  extern int audit_uid_comparator(kuid_t left, u32 op, kuid_t right);
> > >  extern int audit_gid_comparator(kgid_t left, u32 op, kgid_t right);
> > >  extern int parent_len(const char *path);
> > > diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
> > > index add360b46b38..516b8e58959e 100644
> > > --- a/kernel/auditfilter.c
> > > +++ b/kernel/auditfilter.c
> > > @@ -410,6 +410,7 @@ static int audit_field_valid(struct audit_entry 
> > > *entry, struct audit_field *f)
> > > /* FALL THROUGH */
> > > case AUDIT_ARCH:
> > > case AUDIT_FSTYPE:
> > > +   case AUDIT_CONTID:
> > > if (f->op != Audit_not_equal && f->op != Audit_equal)
> > > return -EINVAL;
> > > break;
> > > @@ -582,6 +583,14 @@ static struct audit_entry 
> > > *audit_data_to_entry(struct audit_rule_data *data,
> > > }
> > > entry->rule.exe = audit_mark;
> > > break;
> > > +   case 

Re: [PATCH ghak90 V5 08/10] audit: add containerid filtering

2019-03-18 Thread Richard Guy Briggs
On 2019-03-18 21:02, Ondrej Mosnacek wrote:
> On Fri, Mar 15, 2019 at 7:35 PM Richard Guy Briggs  wrote:
> >
> > Implement audit container identifier filtering using the AUDIT_CONTID
> > field name to send an 8-character string representing a u64 since the
> > value field is only u32.
> >
> > Sending it as two u32 was considered, but gathering and comparing two
> > fields was more complex.
> >
> > The feature indicator is AUDIT_FEATURE_BITMAP_CONTAINERID.
> >
> > See: https://github.com/linux-audit/audit-kernel/issues/91
> > See: https://github.com/linux-audit/audit-userspace/issues/40
> > See: https://github.com/linux-audit/audit-testsuite/issues/64
> > See: https://github.com/linux-audit/audit-kernel/wiki/RFE-Audit-Container-ID
> > Signed-off-by: Richard Guy Briggs 
> > Acked-by: Serge Hallyn 
> > ---
> >  include/linux/audit.h  |  1 +
> >  include/uapi/linux/audit.h |  5 -
> >  kernel/audit.h |  1 +
> >  kernel/auditfilter.c   | 47 
> > ++
> >  kernel/auditsc.c   |  3 +++
> >  5 files changed, 56 insertions(+), 1 deletion(-)
> >
> > diff --git a/include/linux/audit.h b/include/linux/audit.h
> > index 6db5aba7cc01..fa19fa408931 100644
> > --- a/include/linux/audit.h
> > +++ b/include/linux/audit.h
> > @@ -77,6 +77,7 @@ struct audit_field {
> > u32 type;
> > union {
> > u32 val;
> > +   u64 val64;
> > kuid_t  uid;
> > kgid_t  gid;
> > struct {
> > diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h
> > index a6383e28b2c8..741ab6f38294 100644
> > --- a/include/uapi/linux/audit.h
> > +++ b/include/uapi/linux/audit.h
> > @@ -265,6 +265,7 @@
> >  #define AUDIT_LOGINUID_SET 24
> >  #define AUDIT_SESSIONID25  /* Session ID */
> >  #define AUDIT_FSTYPE   26  /* FileSystem Type */
> > +#define AUDIT_CONTID   27  /* Container ID */
> >
> > /* These are ONLY useful when checking
> >  * at syscall exit time (AUDIT_AT_EXIT). */
> > @@ -345,6 +346,7 @@ enum {
> >  #define AUDIT_FEATURE_BITMAP_SESSIONID_FILTER  0x0010
> >  #define AUDIT_FEATURE_BITMAP_LOST_RESET0x0020
> >  #define AUDIT_FEATURE_BITMAP_FILTER_FS 0x0040
> > +#define AUDIT_FEATURE_BITMAP_CONTAINERID   0x0080
> >
> >  #define AUDIT_FEATURE_BITMAP_ALL (AUDIT_FEATURE_BITMAP_BACKLOG_LIMIT | \
> >   AUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME | \
> > @@ -352,7 +354,8 @@ enum {
> >   AUDIT_FEATURE_BITMAP_EXCLUDE_EXTEND | \
> >   AUDIT_FEATURE_BITMAP_SESSIONID_FILTER | \
> >   AUDIT_FEATURE_BITMAP_LOST_RESET | \
> > - AUDIT_FEATURE_BITMAP_FILTER_FS)
> > + AUDIT_FEATURE_BITMAP_FILTER_FS | \
> > + AUDIT_FEATURE_BITMAP_CONTAINERID)
> >
> >  /* deprecated: AUDIT_VERSION_* */
> >  #define AUDIT_VERSION_LATEST   AUDIT_FEATURE_BITMAP_ALL
> > diff --git a/kernel/audit.h b/kernel/audit.h
> > index 2a1a8b8a8019..3a40b608bf8d 100644
> > --- a/kernel/audit.h
> > +++ b/kernel/audit.h
> > @@ -230,6 +230,7 @@ static inline int audit_hash_ino(u32 ino)
> >
> >  extern int audit_match_class(int class, unsigned syscall);
> >  extern int audit_comparator(const u32 left, const u32 op, const u32 right);
> > +extern int audit_comparator64(const u64 left, const u32 op, const u64 
> > right);
> >  extern int audit_uid_comparator(kuid_t left, u32 op, kuid_t right);
> >  extern int audit_gid_comparator(kgid_t left, u32 op, kgid_t right);
> >  extern int parent_len(const char *path);
> > diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
> > index add360b46b38..516b8e58959e 100644
> > --- a/kernel/auditfilter.c
> > +++ b/kernel/auditfilter.c
> > @@ -410,6 +410,7 @@ static int audit_field_valid(struct audit_entry *entry, 
> > struct audit_field *f)
> > /* FALL THROUGH */
> > case AUDIT_ARCH:
> > case AUDIT_FSTYPE:
> > +   case AUDIT_CONTID:
> > if (f->op != Audit_not_equal && f->op != Audit_equal)
> > return -EINVAL;
> > break;
> > @@ -582,6 +583,14 @@ static struct audit_entry *audit_data_to_entry(struct 
> > audit_rule_data *data,
> > }
> > entry->rule.exe = audit_mark;
> > break;
> > +   case AUDIT_CONTID:
> > +   if (f->val != sizeof(u64))
> > +   goto exit_free;
> > +   str = audit_unpack_string(, , f->val);
> > +   if (IS_ERR(str))
> > +   goto exit_free;
> > +

Re: [PATCH ghak90 V5 08/10] audit: add containerid filtering

2019-03-18 Thread Neil Horman
On Fri, Mar 15, 2019 at 02:29:56PM -0400, Richard Guy Briggs wrote:
> Implement audit container identifier filtering using the AUDIT_CONTID
> field name to send an 8-character string representing a u64 since the
> value field is only u32.
> 
> Sending it as two u32 was considered, but gathering and comparing two
> fields was more complex.
> 
> The feature indicator is AUDIT_FEATURE_BITMAP_CONTAINERID.
> 
> See: https://github.com/linux-audit/audit-kernel/issues/91
> See: https://github.com/linux-audit/audit-userspace/issues/40
> See: https://github.com/linux-audit/audit-testsuite/issues/64
> See: https://github.com/linux-audit/audit-kernel/wiki/RFE-Audit-Container-ID
> Signed-off-by: Richard Guy Briggs 
> Acked-by: Serge Hallyn 
> ---
>  include/linux/audit.h  |  1 +
>  include/uapi/linux/audit.h |  5 -
>  kernel/audit.h |  1 +
>  kernel/auditfilter.c   | 47 
> ++
>  kernel/auditsc.c   |  3 +++
>  5 files changed, 56 insertions(+), 1 deletion(-)
> 
> diff --git a/include/linux/audit.h b/include/linux/audit.h
> index 6db5aba7cc01..fa19fa408931 100644
> --- a/include/linux/audit.h
> +++ b/include/linux/audit.h
> @@ -77,6 +77,7 @@ struct audit_field {
>   u32 type;
>   union {
>   u32 val;
> + u64 val64;
>   kuid_t  uid;
>   kgid_t  gid;
>   struct {
> diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h
> index a6383e28b2c8..741ab6f38294 100644
> --- a/include/uapi/linux/audit.h
> +++ b/include/uapi/linux/audit.h
> @@ -265,6 +265,7 @@
>  #define AUDIT_LOGINUID_SET   24
>  #define AUDIT_SESSIONID  25  /* Session ID */
>  #define AUDIT_FSTYPE 26  /* FileSystem Type */
> +#define AUDIT_CONTID 27  /* Container ID */
>  
>   /* These are ONLY useful when checking
>* at syscall exit time (AUDIT_AT_EXIT). */
> @@ -345,6 +346,7 @@ enum {
>  #define AUDIT_FEATURE_BITMAP_SESSIONID_FILTER0x0010
>  #define AUDIT_FEATURE_BITMAP_LOST_RESET  0x0020
>  #define AUDIT_FEATURE_BITMAP_FILTER_FS   0x0040
> +#define AUDIT_FEATURE_BITMAP_CONTAINERID 0x0080
>  
>  #define AUDIT_FEATURE_BITMAP_ALL (AUDIT_FEATURE_BITMAP_BACKLOG_LIMIT | \
> AUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME | \
> @@ -352,7 +354,8 @@ enum {
> AUDIT_FEATURE_BITMAP_EXCLUDE_EXTEND | \
> AUDIT_FEATURE_BITMAP_SESSIONID_FILTER | \
> AUDIT_FEATURE_BITMAP_LOST_RESET | \
> -   AUDIT_FEATURE_BITMAP_FILTER_FS)
> +   AUDIT_FEATURE_BITMAP_FILTER_FS | \
> +   AUDIT_FEATURE_BITMAP_CONTAINERID)
>  
>  /* deprecated: AUDIT_VERSION_* */
>  #define AUDIT_VERSION_LATEST AUDIT_FEATURE_BITMAP_ALL
> diff --git a/kernel/audit.h b/kernel/audit.h
> index 2a1a8b8a8019..3a40b608bf8d 100644
> --- a/kernel/audit.h
> +++ b/kernel/audit.h
> @@ -230,6 +230,7 @@ static inline int audit_hash_ino(u32 ino)
>  
>  extern int audit_match_class(int class, unsigned syscall);
>  extern int audit_comparator(const u32 left, const u32 op, const u32 right);
> +extern int audit_comparator64(const u64 left, const u32 op, const u64 right);
>  extern int audit_uid_comparator(kuid_t left, u32 op, kuid_t right);
>  extern int audit_gid_comparator(kgid_t left, u32 op, kgid_t right);
>  extern int parent_len(const char *path);
> diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
> index add360b46b38..516b8e58959e 100644
> --- a/kernel/auditfilter.c
> +++ b/kernel/auditfilter.c
> @@ -410,6 +410,7 @@ static int audit_field_valid(struct audit_entry *entry, 
> struct audit_field *f)
>   /* FALL THROUGH */
>   case AUDIT_ARCH:
>   case AUDIT_FSTYPE:
> + case AUDIT_CONTID:
>   if (f->op != Audit_not_equal && f->op != Audit_equal)
>   return -EINVAL;
>   break;
> @@ -582,6 +583,14 @@ static struct audit_entry *audit_data_to_entry(struct 
> audit_rule_data *data,
>   }
>   entry->rule.exe = audit_mark;
>   break;
> + case AUDIT_CONTID:
> + if (f->val != sizeof(u64))
> + goto exit_free;
> + str = audit_unpack_string(, , f->val);
> + if (IS_ERR(str))
> + goto exit_free;
> + f->val64 = ((u64 *)str)[0];
> + break;
>   }
>   }
>  
> @@ -664,6 +673,11 @@ static struct audit_rule_data 
> *audit_krule_to_data(struct audit_krule *krule)
>   data->buflen += data->values[i] =
>   

Re: [PATCH ghak90 V5 08/10] audit: add containerid filtering

2019-03-18 Thread Ondrej Mosnacek
On Fri, Mar 15, 2019 at 7:35 PM Richard Guy Briggs  wrote:
>
> Implement audit container identifier filtering using the AUDIT_CONTID
> field name to send an 8-character string representing a u64 since the
> value field is only u32.
>
> Sending it as two u32 was considered, but gathering and comparing two
> fields was more complex.
>
> The feature indicator is AUDIT_FEATURE_BITMAP_CONTAINERID.
>
> See: https://github.com/linux-audit/audit-kernel/issues/91
> See: https://github.com/linux-audit/audit-userspace/issues/40
> See: https://github.com/linux-audit/audit-testsuite/issues/64
> See: https://github.com/linux-audit/audit-kernel/wiki/RFE-Audit-Container-ID
> Signed-off-by: Richard Guy Briggs 
> Acked-by: Serge Hallyn 
> ---
>  include/linux/audit.h  |  1 +
>  include/uapi/linux/audit.h |  5 -
>  kernel/audit.h |  1 +
>  kernel/auditfilter.c   | 47 
> ++
>  kernel/auditsc.c   |  3 +++
>  5 files changed, 56 insertions(+), 1 deletion(-)
>
> diff --git a/include/linux/audit.h b/include/linux/audit.h
> index 6db5aba7cc01..fa19fa408931 100644
> --- a/include/linux/audit.h
> +++ b/include/linux/audit.h
> @@ -77,6 +77,7 @@ struct audit_field {
> u32 type;
> union {
> u32 val;
> +   u64 val64;
> kuid_t  uid;
> kgid_t  gid;
> struct {
> diff --git a/include/uapi/linux/audit.h b/include/uapi/linux/audit.h
> index a6383e28b2c8..741ab6f38294 100644
> --- a/include/uapi/linux/audit.h
> +++ b/include/uapi/linux/audit.h
> @@ -265,6 +265,7 @@
>  #define AUDIT_LOGINUID_SET 24
>  #define AUDIT_SESSIONID25  /* Session ID */
>  #define AUDIT_FSTYPE   26  /* FileSystem Type */
> +#define AUDIT_CONTID   27  /* Container ID */
>
> /* These are ONLY useful when checking
>  * at syscall exit time (AUDIT_AT_EXIT). */
> @@ -345,6 +346,7 @@ enum {
>  #define AUDIT_FEATURE_BITMAP_SESSIONID_FILTER  0x0010
>  #define AUDIT_FEATURE_BITMAP_LOST_RESET0x0020
>  #define AUDIT_FEATURE_BITMAP_FILTER_FS 0x0040
> +#define AUDIT_FEATURE_BITMAP_CONTAINERID   0x0080
>
>  #define AUDIT_FEATURE_BITMAP_ALL (AUDIT_FEATURE_BITMAP_BACKLOG_LIMIT | \
>   AUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME | \
> @@ -352,7 +354,8 @@ enum {
>   AUDIT_FEATURE_BITMAP_EXCLUDE_EXTEND | \
>   AUDIT_FEATURE_BITMAP_SESSIONID_FILTER | \
>   AUDIT_FEATURE_BITMAP_LOST_RESET | \
> - AUDIT_FEATURE_BITMAP_FILTER_FS)
> + AUDIT_FEATURE_BITMAP_FILTER_FS | \
> + AUDIT_FEATURE_BITMAP_CONTAINERID)
>
>  /* deprecated: AUDIT_VERSION_* */
>  #define AUDIT_VERSION_LATEST   AUDIT_FEATURE_BITMAP_ALL
> diff --git a/kernel/audit.h b/kernel/audit.h
> index 2a1a8b8a8019..3a40b608bf8d 100644
> --- a/kernel/audit.h
> +++ b/kernel/audit.h
> @@ -230,6 +230,7 @@ static inline int audit_hash_ino(u32 ino)
>
>  extern int audit_match_class(int class, unsigned syscall);
>  extern int audit_comparator(const u32 left, const u32 op, const u32 right);
> +extern int audit_comparator64(const u64 left, const u32 op, const u64 right);
>  extern int audit_uid_comparator(kuid_t left, u32 op, kuid_t right);
>  extern int audit_gid_comparator(kgid_t left, u32 op, kgid_t right);
>  extern int parent_len(const char *path);
> diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
> index add360b46b38..516b8e58959e 100644
> --- a/kernel/auditfilter.c
> +++ b/kernel/auditfilter.c
> @@ -410,6 +410,7 @@ static int audit_field_valid(struct audit_entry *entry, 
> struct audit_field *f)
> /* FALL THROUGH */
> case AUDIT_ARCH:
> case AUDIT_FSTYPE:
> +   case AUDIT_CONTID:
> if (f->op != Audit_not_equal && f->op != Audit_equal)
> return -EINVAL;
> break;
> @@ -582,6 +583,14 @@ static struct audit_entry *audit_data_to_entry(struct 
> audit_rule_data *data,
> }
> entry->rule.exe = audit_mark;
> break;
> +   case AUDIT_CONTID:
> +   if (f->val != sizeof(u64))
> +   goto exit_free;
> +   str = audit_unpack_string(, , f->val);
> +   if (IS_ERR(str))
> +   goto exit_free;
> +   f->val64 = ((u64 *)str)[0];
> +   break;
> }
> }
>
> @@ -664,6 +673,11 @@ static struct audit_rule_data 
> *audit_krule_to_data(struct audit_krule *krule)
> data->buflen +=