Re: [RFC PATCH v4 6/6] libsepol: update CIL generation for trivial not-self rules

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

 



On Fri, Nov 25, 2022 at 10:51 AM Christian Göttsche
<cgzones@xxxxxxxxxxxxxx> wrote:
>
> Convert trivial not-self neverallow rules to CIL, e.g.
>
>     neverallow TYPE1 ~self:CLASS1 PERM1;
>
> into
>
>     (neverallow TYPE1 notself (CLASS1 (PERM1)))
>
> More complex targets are not yet supported in CIL and will fail to
> convert, e.g.:
>
>     neverallow TYPE1 ~{ self ATTR1 } : CLASS1 PERM1;
>     neverallow TYPE2 { ATTR2 -self } : CLASS2 PERM2;
>
> Signed-off-by: Christian Göttsche <cgzones@xxxxxxxxxxxxxx>

I know what is needed to translate these rules to CIL, but it is going
to require some reworking of how attributes are handled, so I think
that it is better to take this patch for now.

Acked-by: James Carter <jwcart2@xxxxxxxxx>

> ---
>  libsepol/src/module_to_cil.c | 30 ++++++++++++++++++++++++++----
>  1 file changed, 26 insertions(+), 4 deletions(-)
>
> diff --git a/libsepol/src/module_to_cil.c b/libsepol/src/module_to_cil.c
> index b900290a..2d5d1d6d 100644
> --- a/libsepol/src/module_to_cil.c
> +++ b/libsepol/src/module_to_cil.c
> @@ -1201,10 +1201,23 @@ static int avrule_list_to_cil(int indent, struct policydb *pdb, struct avrule *a
>                         goto exit;
>                 }
>
> -               ts = &avrule->ttypes;
> -               rc = process_typeset(pdb, ts, attr_list, &tnames, &num_tnames);
> -               if (rc != 0) {
> -                       goto exit;
> +               if (avrule->flags & RULE_NOTSELF) {
> +                       if (!ebitmap_is_empty(&avrule->ttypes.types) || !ebitmap_is_empty(&avrule->ttypes.negset)) {
> +                               if (avrule->source_filename) {
> +                                       log_err("%s:%lu: Non-trivial neverallow rules with targets containing not or minus self not yet supported",
> +                                               avrule->source_filename, avrule->source_line);
> +                               } else {
> +                                       log_err("Non-trivial neverallow rules with targets containing not or minus self not yet supported");
> +                               }
> +                               rc = -1;
> +                               goto exit;
> +                       }
> +               } else {
> +                       ts = &avrule->ttypes;
> +                       rc = process_typeset(pdb, ts, attr_list, &tnames, &num_tnames);
> +                       if (rc != 0) {
> +                               goto exit;
> +                       }
>                 }
>
>                 for (s = 0; s < num_snames; s++) {
> @@ -1228,6 +1241,15 @@ static int avrule_list_to_cil(int indent, struct policydb *pdb, struct avrule *a
>                                 if (rc != 0) {
>                                         goto exit;
>                                 }
> +                       } else if (avrule->flags & RULE_NOTSELF) {
> +                               if (avrule->specified & AVRULE_XPERMS) {
> +                                       rc = avrulex_to_cil(indent, pdb, avrule->specified, snames[s], "notself", avrule->perms, avrule->xperms);
> +                               } else {
> +                                       rc = avrule_to_cil(indent, pdb, avrule->specified, snames[s], "notself", avrule->perms);
> +                               }
> +                               if (rc != 0) {
> +                                       goto exit;
> +                               }
>                         }
>                 }
>
> --
> 2.38.1
>




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

  Powered by Linux