From: Al Viro <viro@zeniv.linux.org.uk>
To: Paul Moore <paul@paul-moore.com>
Cc: Ricardo Robaina <rrobaina@redhat.com>,
audit@vger.kernel.org, linux-kernel@vger.kernel.org,
eparis@redhat.com, rgb@redhat.com
Subject: Re: [PATCH v1] audit: fix suffixed '/' filename matching in __audit_inode_child()
Date: Thu, 14 Nov 2024 04:09:48 +0000 [thread overview]
Message-ID: <20241114040948.GK3387508@ZenIV> (raw)
In-Reply-To: <19328b27f98.28a7.85c95baa4474aabc7814e68940a78392@paul-moore.com>
On Wed, Nov 13, 2024 at 10:23:55PM -0500, Paul Moore wrote:
> > And while we are at it,
> > parentlen = parentlen == AUDIT_NAME_FULL ? parent_len(path) : parentlen;
> > is a bloody awful way to spell
> > if (parentlen == AUDIT_NAME_FULL)
> > parentlen = parent_len(path);
> > What's more, parent_len(path) starts with *yet* *another* strlen(path),
> > followed by really awful crap - we trim the trailing slashes (if any),
> > then search for the last slash before that... is that really worth
> > the chance to skip that strncmp()?
>
> Pretty much all of the audit code is awkward at best Al, you should know
> that.
Do I ever...
> We're not going to fix it all in one patch, and considering the nature
> of this patch effort, I think there is going to be a lot of value in keeping
> the initial fix patch to a minimum to ease backporting. We can improve on
> some of those other issues in a second patch or at a later time.
>
> As a reminder to everyone, patches are always welcome. Fixing things is a
> great way to channel disgust into something much more useful.
> >
> > > + if (p[pathlen - 1] == '/')
> > > + pathlen--;
> > > +
> > > + if (pathlen != dlen)
> > > + return 1;
> > >
> > > return strncmp(p, dname->name, dlen);
> >
> > ... which really should've been memcmp(), at that.
>
> Agreed. See above.
OK, my primary interest here is to separate struct filename from that stuff
as much as possible. So we will end up stomping on the same ground for
a while here. FWIW, my current filename-related pile is in #next.filename;
there will be a lot more on the VFS side, but one of the obvious targets is
->aname, so __audit_inode() and its vicinity will get affected. We'll need
to coordinate that stuff.
Anyway, regarding audit_compare_dname_path(), handling just the last '/' is
not enough - there might be any number of trailing slashes, not just one.
Another fun issue with looking for matches is this:
mkdir /tmp/foo
mkdir /tmp/foo/bar
mkdir /tmp/blah
ln -s ../foo/bar/baz /tmp/blah/barf
echo crap > /tmp/blah/barf
The last one will create a regular file "baz" in /tmp/foo/bar and write
"crap\n" into it. With the only pathname passed to open(2) being
"/tmp/blah/barf". And there may be a longer chain of symlinks like that.
What do you want to see reported in such case?
next prev parent reply other threads:[~2024-11-14 4:09 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-05 12:37 [PATCH v1] audit: fix suffixed '/' filename matching in __audit_inode_child() Ricardo Robaina
2024-11-11 22:06 ` Paul Moore
2024-11-12 22:06 ` Richard Guy Briggs
2024-11-13 23:04 ` Al Viro
2024-11-14 3:23 ` Paul Moore
2024-11-14 4:09 ` Al Viro [this message]
2024-11-27 5:42 ` Paul Moore
2024-12-04 13:36 ` Ricardo Robaina
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=20241114040948.GK3387508@ZenIV \
--to=viro@zeniv.linux.org.uk \
--cc=audit@vger.kernel.org \
--cc=eparis@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=paul@paul-moore.com \
--cc=rgb@redhat.com \
--cc=rrobaina@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.