Re: Cil block inheritance

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

 



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))
>
> # 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.

Regardless, when push comes to shove compatiblity is probably just
broken. People might have modules loaded that rely on this old
behavior and upgrading SELinux user space could probably cause issues.

>
> 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