Re: Cil block inheritance

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

 



On Thu, Aug 26, 2021 at 9:21 AM Dominick Grift
<dominick.grift@xxxxxxxxxxx> wrote:
>
> Vit Mojzis <vmojzis@xxxxxxxxxx> writes:
>
> > On 26. 08. 21 14:10, Dominick Grift wrote:
> >> Vit Mojzis <vmojzis@xxxxxxxxxx> writes:
> >>
> >>> Hi,
> >>> recent changes in block inheritance broke our use case where we use
> >>> block inheritance for generating container policies
> >>> (https://github.com/containers/udica/tree/main/udica/templates). Basically
> >>> the policy is composed by inheriting selected "template" blocks, all
> >>> of which inherit "container" block, so that they can use types defined
> >>> there.
> >>>
> >>> Reproducer:
> >>> (block template1 (type t) )
> >>> (block template2 (blockinherit template1))
> >>> (block b (blockinherit template1) (blockinherit template2))
> >> In this example there is no point in inheriting template1, because
> >> template2 already inherits it.
> >>
> >> (block template1
> >>         (type t))
> >> (block template2
> >>         (blockinherit template1))
> >> (block b (blockinherit template2)
> >>         (allow t t (file (read))))
> >>
> >> semodule -i test.cil
> >> seinfo -t b.t
> > Sure, but with more templates (as we have in udica) we get the same issue.
> >
> > (block template1 (type t) )
> > (block template2 (blockinherit template1))
> > (block template3 (blockinherit template1))
> > (block b (blockinherit template2) (blockinherit template3))
>
> This boils down to the same as above, yes.
>
> >
> > # semodule -i test.cil
> > Re-declaration of type t
> > Previous declaration of type at /var/lib/selinux/targeted/tmp/modules/400/test/cil:1
> > Failed to copy block contents into blockinherit
> > Failed to resolve AST
> > semodule:  Failed!
> >
> >
> > Template2 and template3 mostly inherit template1 for the type defined
> > there (so that they can define rules containing the type).
> >
> >>
> >>> #semodule -i test.cil
> >>> Re-declaration of type t
> >>> Previous declaration of type at
> >>> /var/lib/selinux/targeted/tmp/modules/400/test/cil:1
> >>> Failed to copy block contents into blockinherit
> >>> Failed to resolve AST
> >>> semodule: Failed!
> >>>
> >>> This used to work just fine.
> >>>
> >>> The following workaround seems to be working as intended, but I'm not
> >>> sure if it's the best approach. Types are only defined in template1
> >>> and the rest contains "optional" block, so that I can use types
> >>> defined in template1).
> >>>
> >>> (block template1 (type t))
> >>> (block template2
> >>>       (optional o
> >>>           (allow t t ( file ( read )))
> >>>       )
> >>> )
> >>> (block b (blockinherit template1) (blockinherit template2))
> >> You can just do something like this:
> >>
> >> (block template1 (type t))
> >> (block template2 (blockinherit template1) (optional o (allow t t (file
> >> (read))))
> >> (block b (blockinherit template2))
> >> semodule -i test.cil
> >> sesearch -A -t b.t
> > With more templates, this break as well.
> >
> > But the following works:
> >
> > (block template1 (type t))
> > (block template2 (optional o (allow t t (file (read)))))
> > (block template3 (optional o (allow t t (file (write)))))
> > (block b (blockinherit template1) (blockinherit template2) (blockinherit template3))
> >
> > #semodule -i test.cil
> > #sesearch -A -s b.t
> > allow b.t b.t:file { read write };
> >
> > Again, I'm not sure if this is the best solution, just the only one I managed to get working.
>
> Looks good enough to me (if it works then it works). I am just surprised that
> the duplicate 'o' optional block is allowed.
>

Duplicate optional blocks are allowed unless an in-statement refers to
one of them, because that is the only time the name matters.

> Duplicate type declarations are no longer allowed as you noticed, but
> fortunately you do not need them.
>

Duplicate types are allowed when using secilc with the "-m" option.
Unfortunately, that doesn't help when using semodule. It would
probably be possible to add the option if necessary.

Jim

> Whether this eventually is the best solution probably depends on other
> aspects of the policy and on the requirements.
>
> >
> > Vit
> >
> >>> #semodule -i test.cil
> >>> #sesearch -A -s b.t
> >>> allow b.t b.t:file read;
> >>>
> >>> Any pointers would be appreciated.
> >>>
> >>> Thank you.
> >>>
> >>> Vit
> >>>
> >
>
> --
> gpg --locate-keys dominick.grift@xxxxxxxxxxx
> Key fingerprint = FCD2 3660 5D6B 9D27 7FC6  E0FF DA7E 521F 10F6 4098
> https://sks-keyservers.net/pks/lookup?op=get&search=0xDA7E521F10F64098
> Dominick Grift



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

  Powered by Linux