Re: [PATCH] checkpolicy: Fix bug in handling type declaration in optional block.

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

 



On 01/20/2017 06:14 PM, Steve Lawrence wrote:
> On 01/20/2017 10:29 AM, Dominick Grift wrote:
>> On 01/20/2017 04:16 PM, James Carter wrote:
>>> On 01/19/2017 04:22 PM, Dominick Grift wrote:
>>>> On 01/19/2017 06:21 PM, Stephen Smalley wrote:
>>>>> On Wed, 2017-01-18 at 21:58 +0100, Dominick Grift wrote:
>>>>>> On 01/18/2017 09:53 PM, James Carter wrote:
>>>>>>>
>>>>>>> Nicolas Iooss discovered that requiring a type in an optional block
>>>>>>> after the type has already been declared in another optional block
>>>>>>> results in a duplicate declaration error.
>>>>>>>
>>>>>>
>>>>>> from what i have been told and from experience, types cannot,
>>>>>> reliably,
>>>>>> be declared in optional blocks.
>>>>>
>>>>> If true, that is likely a linker issue rather than a checkpolicy issue.
>>>>> But that would make optionals rather useless if true.
>>>>
>>>> Let me present it in a different way then:
>>>>
>>>> Should one be able to, reliably, "blockinherit" in optionals?
>>>>
>>>> This is the commit in dssp1 where i hit the dead-end with declaring
>>>> types in optionals:
>>>>
>>>> https://github.com/DefenSec/dssp-contrib/commit/45236da4030f0a541c26753e13a91f69411d022e
>>>>
>>>>
>>>> I asked slawrence to have a look at the policy, and he indicated to me
>>>> that blocks cannot be inherited in optionals.
>>>>
>>>> The compiler accepts it but the policy becomes inconsistent
>>>>
>>>
>>> By inconsistent, do you mean that an the binary policy produced is not
>>> valid, or something else?
>>
>> I used the word inconsistent because i actually forgot the details (it
>> has been more than a year since I made this change and I tried hard to
>> put this behind me, thinking that this was a fundamental limitation
>> rather than a "bug").
>>
>> I suspect the following:
>>
>> Rules end up in the policy but they aren't actually recognized/enforced.
>>
>> Either the above or:
>>
>> Rules do *not* end up in the policy even though they are specified.
>>
>> Maybe slawrence remembers what the issue exactly was (added to recipients)
>>
> 
> After digging through some past emails and discussions, I think part of
> the issue is that things just start to get tricky and difficult to deal
> with if you allow blockinherits (and for similar reasons blocks/macros)
> in optionals.
> 
> For example, say you had something like this:
> 
> (optional foo
>   (block b
>     (blockinherit c)
>    )
>    ...
> )
> 
> (block d
>   (blockinherit b))
> 
> 
> If something in optional foo fails, then the entire block b goes away.
> So does that mean the blockinherit b in block d goes away too? Or does
> that stay? Removing it could be potentially tricky since we need to
> remove tree nodes that have been copied (we don't currently where things
> are copied to), and that removal might have side effects. This is a
> similar reason why we don't allow macros in optionals. Once they've been
> called, it becomes difficult to remove them if the macros go away. Not
> impossible, but difficult.
> 
> And since blockinherits can pull in blocks, you're essentially allowing
> blocks inside optionals if you allow blockinherits inside optionals. So
> this is likely the reason for not allowing blockinherits in optionals.
> They can pull in blocks and macros, which aren't allowed to be optional.
> 
> I agree that supporting optional blocks/macros/blockinherits/etc would
> probably be really nice, but things get difficult pretty fast.
> Re-resolve when optionals fail is a messy bit of code. Figuring out the
> right thing to do and when isn't obvious or easy.
> 
> Now, we could add in some restrictions that make the changes less
> difficult (maybe), like blocks cannot be inside optionals, or
> blockinherits inside optionals cannot inherit blocks that contain other
> blocks. But again, that's still kindof a pain to implement and those are
> probably restrictions that you'd end up running into eventually anyways.
> So it would be best to just really figure out how to make it all work.
> I'm sure it can work, it's just not an easy problem to solve and takes
> time to figure out.
> 
> - Steve
> 

Thank you.

I guess i somehow thought that the two issues were one and the same (ie.
"corruption" when declaring types in optionals vs. "corruption" when
inheriting blocks in optionals)

Seems I was wrong there. The "type issue" is probably not CIL related
and has been there for a very long time.

The two issues have things in common though. Both declaring types in
optionals, as well as inheriting blocks in optionals are unreliable and
should be avoided.


-- 
Key fingerprint = 5F4D 3CDB D3F8 3652 FBD8  02D5 3B6C 5F1D 2C7B 6B02
https://sks-keyservers.net/pks/lookup?op=get&search=0x3B6C5F1D2C7B6B02
Dominick Grift

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Selinux mailing list
Selinux@xxxxxxxxxxxxx
To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx.
To get help, send an email containing "help" to Selinux-request@xxxxxxxxxxxxx.

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

  Powered by Linux