Re: [PATCH v5 3/3] fanotify,audit: Allow audit to use the full permission event response

Richard Guy Briggs <[email protected]>
Newsgroups com.redhat.linux-audit,org.kernel.vger.linux-api,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
On 2022-12-20 18:31, Paul Moore wrote:
> On Mon, Dec 12, 2022 at 9:06 AM Richard Guy Briggs <[email protected]> wrote:
> >
> > This patch passes the full response so that the audit function can use all
> > of it. The audit function was updated to log the additional information in
> > the AUDIT_FANOTIFY record.
> >
> > Currently the only type of fanotify info that is defined is an audit
> > rule number, but convert it to hex encoding to future-proof the field.
> > Hex encoding suggested by Paul Moore <[email protected]>.
> >
> > Sample records:
> >   type=FANOTIFY msg=audit(1600385147.372:590): resp=2 fan_type=1 fan_info=3137 subj_trust=3 obj_trust=5
> >   type=FANOTIFY msg=audit(1659730979.839:284): resp=1 fan_type=0 fan_info=3F subj_trust=2 obj_trust=2
> >
> > Suggested-by: Steve Grubb <[email protected]>
> > Link: https://lore.kernel.org/r/3075502.aeNJFYEL58@x2
> > Signed-off-by: Richard Guy Briggs <[email protected]>
> > ---
> >  fs/notify/fanotify/fanotify.c |  3 ++-
> >  include/linux/audit.h         |  9 +++++----
> >  kernel/auditsc.c              | 25 ++++++++++++++++++++++---
> >  3 files changed, 29 insertions(+), 8 deletions(-)
> 
> ...
> 
> > diff --git a/kernel/auditsc.c b/kernel/auditsc.c
> > index d1fb821de104..8d523066d81f 100644
> > --- a/kernel/auditsc.c
> > +++ b/kernel/auditsc.c
> > @@ -64,6 +64,7 @@
> >  #include <uapi/linux/limits.h>
> >  #include <uapi/linux/netfilter/nf_tables.h>
> >  #include <uapi/linux/openat2.h> // struct open_how
> > +#include <uapi/linux/fanotify.h>
> >
> >  #include "audit.h"
> >
> > @@ -2877,10 +2878,28 @@ void __audit_log_kern_module(char *name)
> >         context->type = AUDIT_KERN_MODULE;
> >  }
> >
> > -void __audit_fanotify(u32 response)
> > +void __audit_fanotify(u32 response, struct fanotify_response_info_audit_rule *friar)
> >  {
> > -       audit_log(audit_context(), GFP_KERNEL,
> > -               AUDIT_FANOTIFY, "resp=%u", response);
> > +       struct audit_context *ctx = audit_context();
> > +       struct audit_buffer *ab;
> > +       char numbuf[12];
> > +
> > +       if (friar->hdr.type == FAN_RESPONSE_INFO_NONE) {
> > +               audit_log(audit_context(), GFP_KERNEL, AUDIT_FANOTIFY,
> > +                         "resp=%u fan_type=%u fan_info=3F subj_trust=2 obj_trust=2",
> > +                         response, FAN_RESPONSE_INFO_NONE);
> 
> The fan_info, subj_trust, and obj_trust constant values used here are
> awfully magic-numbery and not the usual sentinel values one might
> expect for a "none" operation, e.g. zeros/INT_MAX/etc. I believe a
> comment here explaining the values would be a good idea.

Ack.  I'll add a comment.  I would have preferred zero for default of
unset, but Steve requested 0/1/2 no/yes/unknown.

> > +               return;
> > +       }
> > +       ab = audit_log_start(ctx, GFP_KERNEL, AUDIT_FANOTIFY);
> > +       if (ab) {
> > +               audit_log_format(ab, "resp=%u fan_type=%u fan_info=",
> > +                                response, friar->hdr.type);
> > +               snprintf(numbuf, sizeof(numbuf), "%u", friar->rule_number);
> > +               audit_log_n_hex(ab, numbuf, sizeof(numbuf));
> 
> It looks like the kernel's printf format string parsing supports %X so
> why not just use that for now, we can always complicate it later if
> needed.  It would probably also remove the need for the @ab, @numbuf,
> and @ctx variables.  For example:
> 
> audit_log(audit_context(), GFP_KERNEL, AUDIT_FANOTIFY,
>   "resp=%u fan_type=%u fan_info=%X subj_trust=%u obj_trust=%u",
>   response, friar->hdr.type, friar->rule_number,
>   friar->subj_trust, friar->obj_trust);
> 
> Am I missing something?

No, I am.  Thank you, that's much cleaner.

> > +               audit_log_format(ab, " subj_trust=%u obj_trust=%u",
> > +                                friar->subj_trust, friar->obj_trust);
> > +               audit_log_end(ab);
> > +       }
> >  }
> >
> >  void __audit_tk_injoffset(struct timespec64 offset)
> > --
> > 2.27.0
> 
> -- 
> paul-moore.com
> 
> --
> Linux-audit mailing list
> [email protected]
> https://listman.redhat.com/mailman/listinfo/linux-audit
> 

- RGB

--
Richard Guy Briggs <[email protected]>
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
--
Linux-audit mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/linux-audit
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.