Re: [PATCH v2] Resolve conflicts in expandattribute.

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

 



On Fri, Mar 16, 2018 at 9:52 AM, William Roberts
<bill.c.roberts@xxxxxxxxx> wrote:
> On Fri, Mar 16, 2018 at 9:06 AM, jwcart2 <jwcart2@xxxxxxxxxxxxx> wrote:
>> On 03/16/2018 11:23 AM, William Roberts wrote:
>>>
>>> On Thu, Mar 15, 2018 at 8:16 PM, Tri Vo <trong@xxxxxxxxxxx> wrote:
>>>>
>>>> This commit resolves conflicts in values of expandattribute statements
>>>> in policy language and expandtypeattribute in CIL.
>>>>
>>>> For example, these statements resolve to false in policy language:
>>>>   expandattribute hal_audio true;
>>>>   expandattribute hal_audio false;
>>>>
>>>> Similarly, in CIL these also resolve to false.
>>>>   (expandtypeattribute (hal_audio) true)
>>>>   (expandtypeattribute (hal_audio) false)
>>>>
>>>> Motivation
>>>> When Android combines multiple .cil files from system.img and vendor.img
>>>> it's possible to have conflicting expandattribute statements.
>>>>
>>>> This change deals with this scenario by resolving the value of the
>>>> corresponding expandtypeattribute to false. The rationale behind this
>>>> override is that true is used for reduce run-time lookups, while
>>>> false is used for tests which must pass.
>>>>
>>>> Signed-off-by: Tri Vo <trong@xxxxxxxxxxx>
>>>> ---
>>>>   checkpolicy/policy_define.c        |  8 ++++----
>>>>   libsepol/cil/src/cil_resolve_ast.c | 21 ++++++---------------
>>>>   2 files changed, 10 insertions(+), 19 deletions(-)
>>>>
>>>> diff --git a/checkpolicy/policy_define.c b/checkpolicy/policy_define.c
>>>> index 2c5db55d..1e632ef7 100644
>>>> --- a/checkpolicy/policy_define.c
>>>> +++ b/checkpolicy/policy_define.c
>>>> @@ -1182,10 +1182,6 @@ int expand_attrib(void)
>>>>                          goto exit;
>>>>                  }
>>>>
>>>> -               if (attr->flags & TYPE_FLAGS_EXPAND_ATTR) {
>>>> -                       yyerror2("%s already has the expandattribute
>>>> option specified", id);
>>>> -                       goto exit;
>>>> -               }
>>>>                  if (ebitmap_set_bit(&attrs, attr->s.value - 1, TRUE)) {
>>>>                          yyerror("Out of memory!");
>>>>                          goto exit;
>>>> @@ -1213,6 +1209,10 @@ int expand_attrib(void)
>>>>                  attr = hashtab_search(policydbp->p_types.table,
>>>>
>>>> policydbp->sym_val_to_name[SYM_TYPES][i]);
>>>>                  attr->flags |= flags;
>>>
>>>
>>> I'd like to see a comment here. The CIL case is much easier to understand
>>> because the error messages contain information about what's going on.
>>>
>>> Maybe something like:
>>> /*
>>>   * if an expandattr rule conflicts, set the expandattr to false. False
>>> always
>>>   * works, at the expense of performance for run-time attribute
>>> resolution.
>>>   */
>>>
>>
>> I would actually prefer a warning.
>
> Good point. That would make it consistent with the CIL code. I like this
> suggestion much better than just a comment.

Sounds good. I'll add a warning.

>
>>
>>
>>>> +               if ((attr->flags & TYPE_FLAGS_EXPAND_ATTR_TRUE) &&
>>>> +                               (attr->flags &
>>>> TYPE_FLAGS_EXPAND_ATTR_FALSE)) {
>>>> +                       attr->flags &= ~TYPE_FLAGS_EXPAND_ATTR_TRUE;
>>>> +               }
>>>>          }
>>>>
>>>>          rc = 0;
>>>> diff --git a/libsepol/cil/src/cil_resolve_ast.c
>>>> b/libsepol/cil/src/cil_resolve_ast.c
>>>> index d1a5ed87..02259241 100644
>>>> --- a/libsepol/cil/src/cil_resolve_ast.c
>>>> +++ b/libsepol/cil/src/cil_resolve_ast.c
>>>> @@ -269,9 +269,8 @@ exit:
>>>>          return rc;
>>>>   }
>>>>
>>>> -int cil_type_used(struct cil_symtab_datum *datum, int used)
>>>> +void cil_type_used(struct cil_symtab_datum *datum, int used)
>>>>   {
>>>> -       int rc = SEPOL_ERR;
>>>>          struct cil_typeattribute *attr = NULL;
>>>>
>>>>          if (FLAVOR(datum) == CIL_TYPEATTRIBUTE) {
>>>> @@ -279,16 +278,12 @@ int cil_type_used(struct cil_symtab_datum *datum,
>>>> int used)
>>>>                  attr->used |= used;
>>>>                  if ((attr->used & CIL_ATTR_EXPAND_TRUE) &&
>>>>                                  (attr->used & CIL_ATTR_EXPAND_FALSE)) {
>>>> -                       cil_log(CIL_ERR, "Conflicting use of
>>>> expandtypeattribute. "
>>>> -                                       "Expandtypeattribute may be set
>>>> to true or false "
>>>> -                                       "but not both. \n");
>>>> -                       goto exit;
>>>> +                       cil_log(CIL_WARN, "Conflicting use of
>>>> expandtypeattribute. "
>>>> +                                       "Expandtypeattribute was set to
>>>> both true or false for %s. "
>>>> +                                       "Resolving to false. \n",
>>>> attr->datum.name);
>>>> +                       attr->used &= ~CIL_ATTR_EXPAND_TRUE;
>>>>                  }
>>>>          }
>>>> -
>>>> -       return SEPOL_OK;
>>>> -exit:
>>>> -       return rc;
>>>>   }
>>>>
>>>>   int cil_resolve_permissionx(struct cil_tree_node *current, struct
>>>> cil_permissionx *permx, void *extra_args)
>>>> @@ -488,11 +483,7 @@ int cil_resolve_expandtypeattribute(struct
>>>> cil_tree_node *current, void *extra_a
>>>>                          goto exit;
>>>>                  }
>>>>                  used = expandattr->expand ? CIL_ATTR_EXPAND_TRUE :
>>>> CIL_ATTR_EXPAND_FALSE;
>>>> -               rc = cil_type_used(attr_datum, used);
>>>> -               if (rc != SEPOL_OK) {
>>>> -                       goto exit;
>>>> -               }
>>>> -
>>>> +               cil_type_used(attr_datum, used);
>>>>                  cil_list_append(expandattr->attr_datums, CIL_TYPE,
>>>> attr_datum);
>>>>          }
>>>>
>>>> --
>>>> 2.16.2.804.g6dcf76e118-goog
>>>>
>>>
>>> Overall this looks good, just add that comment.
>>> Well see if anyone else has more feedback.
>>>
>>>
>>
>> The CIL part looks good.
>>
>> Jim
>>
>>
>> --
>> James Carter <jwcart2@xxxxxxxxxxxxx>
>> National Security Agency




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

  Powered by Linux