Re: [PATCH 0/5] selinux: add prefix/suffix matching to filename type transitions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jun 20, 2023 at 3:51 AM Juraj Marcin <juraj@xxxxxxxxxxxxxxx> wrote:
>
> On 2023-06-19 17:53, Paul Moore wrote:
> > On Sun, Jun 18, 2023 at 5:41 AM Juraj Marcin <juraj@xxxxxxxxxxxxxxx> wrote:
> > >
> > > On 2023-06-15 22:04, Paul Moore wrote:
> > > > On Thu, Jun 1, 2023 at 1:03 PM Juraj Marcin <juraj@xxxxxxxxxxxxxxx> wrote:
> > > > > On 2023-05-31 18:24, Paul Moore wrote:
> > > > > > On Wed, May 31, 2023 at 7:32 AM Juraj Marcin <juraj@xxxxxxxxxxxxxxx> wrote:
> > > > > > >
> > > > > > > Currently, filename transitions are stored separately from other type
> > > > > > > enforcement rules and only support exact name matching. However, in
> > > > > > > practice, the names contain variable parts. This leads to many
> > > > > > > duplicated rules in the policy that differ only in the part of the name,
> > > > > > > or it is even impossible to cover all possible combinations.
> > > > > > >
> > > > > > > First, this series of patches moves the filename transitions to be part
> > > > > > > of the avtab structures. This not only makes the implementation of
> > > > > > > prefix/suffix matching and future enhancements easier, but also reduces
> > > > > > > the technical debt regarding the filename transitions. Next, the last
> > > > > > > patch implements the support for prefix/suffix name matching itself by
> > > > > > > extending the structures added in previous patches in this series.
> > > > > > >
> > > > > > > Even though, moving everything to avtab increases the memory usage and
> > > > > > > the size of the binary policy itself and thus the loading time, the
> > > > > > > ability to match the prefix or suffix of the name will reduce the
> > > > > > > overall number of rules in the policy which should mitigate this issue.
> > > > > > >
> > > > > > > This implementation has been successfully tested using the existing and
> > > > > > > also new tests in the SELinux Testsuite.
> > > > > > >
> > > > > > > Juraj Marcin (5):
> > > > > > >   selinux: move transition to separate structure in avtab_datum
> > > > > > >   selinux: move filename transitions to avtab
> > > > > > >   selinux: implement new binary format for filename transitions in avtab
> > > > > > >   selinux: filename transitions move tests
> > > > > > >   selinux: add prefix/suffix matching support to filename type
> > > > > > >     transitions
> > > > > >
> > > > > > Just a quick comment as I haven't had a chance to properly review this
> > > > > > series yet; you show some memory usage and performance measurements in
> > > > > > some of the intermediate patches, that's good, but I don't see the
> > > > > > same measurements taken when the full patchset is applied.  Please
> > > > > > provide the same memory usage and performance comparisons with the
> > > > > > full patchset applied.
> > > > >
> > > > > Of course, here are the measurements with the whole patchset applied.
> > > > >
> > > > > I also included measurements with new policy (based on the Fedora
> > > > > policy) that uses prefix filename transitions where possible. This new
> > > > > policy has been generated by merging existing filename transitions into
> > > > > prefix ones if it would reduce the number of transitions overall while
> > > > > keeping the resulting type same.
> > > > >
> > > > > [1] Reference kernel (c52df19e3759), Fedora policy (format v33)
> > > > > [2] This patchset, Fedora policy (format v33)
> > > > > [3] This patchset, Fedora policy without prefix/suffix rules (format v35)
> > > > > [4] This patchset, Fedora policy with prefix rules (format v35)
> > > > >
> > > > >
> > > > >  Test | Mem   | Binary | Policy | Create tty      | osbench
> > > > >       | Usage | policy | load   |                 | create
> > > > >       |       | size   | time   | (ms/file)       | files
> > > > >       | (MiB) | (MiB)  | (ms)   | real   | kernel | (us/file)
> > > > > ------+-------+--------+--------+--------+--------+-----------
> > > > >  [1]  |   157 |    3.4 |     78 | 1.1021 | 0.7586 | 7.8277
> > > > >  [2]  |   200 |    3.4 |    206 | 1.1193 | 0.7724 | 8.2711
> > > > >  [3]  |   169 |    5.8 |    106 | 1.1021 | 0.7724 | 8.0304
> > > > >  [4]  |   164 |    3.8 |     86 | 1.1029 | 0.7586 | 7.9609
> > > >
> > > > Thanks for performing those measurements.
> > > >
> > > > I apologize that I haven't had an opportunity to review your patcheset
> > > > in detail just yet (I've been struggling with some self-inflicted
> > > > networking issues this week), but looking strictly at the numbers
> > > > above it appears that by every metric in the table this patchset
> > > > results in a policy that is larger (both on-disk and in-memory) as
> > > > well as performance that is at best the same (although in most cases,
> > > > it is worse).  Are there any improvements expected beyond test
> > > > configuration [4] (above)?
> > >
> > > The main goal of this patchset is to bring the possibility to use prefix
> > > or suffix matching in filename transitions, as now it is not possible to
> > > cover files that have fixed prefix and variable part after it. For
> > > example devices in /dev (the policy now enumerates all possible number
> > > suffixes) or files with random suffix/prefix (not possible at all).
> > >
> > > The next goal is to make future improvements easier, for example
> > > supporting filename transitions in conditional policies or inherent
> > > support for type attributes.
> > >
> > > As for performance, the goal is to implement previous goals while not
> > > killing the performance by them. Christian suggested some possible
> > > optimizations [1], but after trying them out [2] they either not provide
> > > much measurable difference or the difference is small and the
> > > implementation hacky.
> >
> > I understand performance improvements were not the main motivation
> > behind this patchset, but I'm somewhat concerned that policy load time
> > *almost* triples in the case of an unmodified policy with this patch
> > applied.  Since that will be most everyone as soon as this patch is
> > applied, that regression does concern me ... I'm not sure just yet how
> > much it concerns me, but it isn't trivial.
>
> I also understand your concern. That higher load time (and also memory
> usage) is the cost of doing the conversion from the older binary policy
> format in the kernel during load.
>
> However, to reduce both load time and memory usage to the values in the
> third test, the only action needed is recompiling the policy with newer
> checkpolicy/libsepol, patches to which I also proposed.

I'm also struggling a bit with the justification here. If the runtime
and memory usage is worse or no better in every dimension even with a
policy rewritten to use the new prefix/suffix matching feature, it
seems hard to justify the change.

I'd be curious to see what results you would get if you simply added
the new feature (prefix/suffix matching) without moving the name-based
transitions into the avtab.

Also wondering whether you considered the simpler approach of just
augmenting the kernel to recognize and support use of wildcards at the
beginning and/or end of the existing name field to signify a prefix or
suffix match. That seems more amenable to extensions beyond just
prefix or suffix match.




[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux