On Fri, Jan 27, 2023 at 5:55 PM Richard Guy Briggs <rgb(a)redhat.com> wrote:
 On 2023-01-27 17:35, Paul Moore wrote:
 > On Fri, Jan 27, 2023 at 12:24 PM Richard Guy Briggs <rgb(a)redhat.com> wrote:
 > >
 > > Since FADVISE can truncate files and MADVISE operates on memory, reverse
 > > the audit_skip tags.
 > >
 > > Fixes: 5bd2182d58e9 ("audit,io_uring,io-wq: add some basic audit support
to io_uring")
 > > Signed-off-by: Richard Guy Briggs <rgb(a)redhat.com>
 > > ---
 > >  io_uring/opdef.c | 2 +-
 > >  1 file changed, 1 insertion(+), 1 deletion(-)
 > >
 > > diff --git a/io_uring/opdef.c b/io_uring/opdef.c
 > > index 3aa0d65c50e3..a2bf53b4a38a 100644
 > > --- a/io_uring/opdef.c
 > > +++ b/io_uring/opdef.c
 > > @@ -306,12 +306,12 @@ const struct io_op_def io_op_defs[] = {
 > >         },
 > >         [IORING_OP_FADVISE] = {
 > >                 .needs_file             = 1,
 > > -               .audit_skip             = 1,
 > >                 .name                   = "FADVISE",
 > >                 .prep                   = io_fadvise_prep,
 > >                 .issue                  = io_fadvise,
 > >         },
 >
 > I've never used posix_fadvise() or the associated fadvise64*()
 > syscalls, but from quickly reading the manpages and the
 > generic_fadvise() function in the kernel I'm missing where the fadvise
 > family of functions could be used to truncate a file, can you show me
 > where this happens?  The closest I can see is the manipulation of the
 > page cache, but that shouldn't actually modify the file ... right?
 I don't know.  I was going on the advice of Steve Grubb.  I'm looking
 for feedback, validation, correction, here. 
Keep in mind it's your name on the patch, not Steve's, and I would
hope that you should be able to stand up and vouch for your own patch.
Something to keep in mind for the future.
As it stands, I think the audit_skip line should stay for
IORING_OP_FADVISE, if you feel otherwise please provide more
explanation as to why auditing is necessary for this operation.
 > >         [IORING_OP_MADVISE] = {
 > > +               .audit_skip             = 1,
 > >                 .name                   = "MADVISE",
 > >                 .prep                   = io_madvise_prep,
 > >                 .issue                  = io_madvise,
 >
 > I *think* this should be okay, what testing/verification have you done
 > on this?  One of the things I like to check is to see if any LSMs
 > might perform an access check and/or generate an audit record on an
 > operation, if there is a case where that could happen we should setup
 > audit properly.  I did a very quick check of do_madvise() and nothing
 > jumped out at me, but I would be interested in knowing what testing or
 > verification you did here.
 No testing other than build/boot/audit-testsuite.  You had a test you
 had developed that went through several iterations? 
There is an io_uring test in the audit-testsuite that verifies basic
audit record generation, it is not exhaustive.
Patch 2/2 is a no-go from a security perspective (we want to see those
records), and I think skipping on IORING_OP_FADVISE is the correct
thing to do.  It may be that skipping on IORING_OP_MADVISE is the
correct thing, but given that it doesn't appear a lot of in-depth
investigation has gone into these patches I would really like to see
some more reasoning on this before we change the current behavior.
-- 
paul-moore.com