Re: [PATCH] libsepol/cil: Check common perms when verifiying "all"

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

 



On Mon, Apr 1, 2024 at 11:09 AM James Carter <jwcart2@xxxxxxxxx> wrote:
>
> Commit e81c466 "Fix class permission verification in CIL", added a
> check for the use of "all" in a permission expression for a class
> that had no permissions. Unfortunately, that change did not take
> into account a class that had common permissions, so a class that
> has no permmissions of its own, but inherits permissions from a
> common, will fail the verification check.
>
> If the class inherits from a common, then add those permissions to
> the permmission list when verifying the permission expression.
>
> Example/
> (common co1 (cop1))
> (class cl1 ())
> (classcommon cl1 co1)
> (classorder (CLASS cl1))
>
> (classpermission cp1)
> (classpermissionset cp1 (cl1 (all)))
>
> (classmap cm1 (cmp1))
> (classmapping cm1 cmp1 (cl1 (all)))
>
> Previously, both the classpermissionset and the classmapping rules
> would fail verification, but now they pass as expected.
>
> Patch originally from Ben Cressey <bcressey@xxxxxxxxxx>, I have
> expanded the explanation.
>
> Reported-by: Ben Cressey <bcressey@xxxxxxxxxx>
> Signed-off-by: James Carter <jwcart2@xxxxxxxxx>

This has been merged.
Jim

> ---
>  libsepol/cil/src/cil_verify.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/libsepol/cil/src/cil_verify.c b/libsepol/cil/src/cil_verify.c
> index 0c6d50a1..4ef2cbab 100644
> --- a/libsepol/cil/src/cil_verify.c
> +++ b/libsepol/cil/src/cil_verify.c
> @@ -1842,6 +1842,9 @@ static int __cil_verify_perms(struct cil_class *class, struct cil_list *perms, s
>                                 int count2 = 0;
>                                 cil_list_init(&perm_list, CIL_MAP_PERM);
>                                 cil_symtab_map(&class->perms, __add_perm_to_list, perm_list);
> +                               if (class->common != NULL) {
> +                                       cil_symtab_map(&class->common->perms, __add_perm_to_list, perm_list);
> +                               }
>                                 cil_list_for_each(j, perm_list) {
>                                         count2++;
>                                         struct cil_perm *perm = j->data;
> --
> 2.44.0
>





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

  Powered by Linux