Re: [PATCH] libsepol: Support nlmsg xperms in assertions

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

 



On Wed, Oct 23, 2024 at 2:13 PM James Carter <jwcart2@xxxxxxxxx> wrote:
>
> On Mon, Oct 21, 2024 at 7:12 PM Thiébaud Weksteen <tweek@xxxxxxxxxx> wrote:
> >
> > commit ba7945a250c added support for nlmsg extended permissions in the
> > policy. The assertion validation was not updated which lead to false
> > positives when evaluated. The optimization update was also missing. Add
> > support for the new extended permission for optimization and assertions.
> >
> > Fixes: ba7945a250c0794837f94ee1fb124426166bbc6e
> > Signed-off-by: Thiébaud Weksteen <tweek@xxxxxxxxxx>
>
> Acked-by: James Carter <jwcart2@xxxxxxxxx>
>

Merged.
Thanks,
Jim

> > ---
> >  libsepol/src/assertion.c | 16 ++++++++++++++--
> >  libsepol/src/optimize.c  |  5 +++++
> >  2 files changed, 19 insertions(+), 2 deletions(-)
> >
> > diff --git a/libsepol/src/assertion.c b/libsepol/src/assertion.c
> > index 3076babe..5e129883 100644
> > --- a/libsepol/src/assertion.c
> > +++ b/libsepol/src/assertion.c
> > @@ -110,6 +110,10 @@ static int check_extended_permissions(av_extended_perms_t *neverallow, avtab_ext
> >         } else if ((neverallow->specified == AVRULE_XPERMS_IOCTLDRIVER)
> >                         && (allow->specified == AVTAB_XPERMS_IOCTLDRIVER)) {
> >                 rc = extended_permissions_and(neverallow->perms, allow->perms);
> > +       } else if ((neverallow->specified == AVRULE_XPERMS_NLMSG)
> > +                       && (allow->specified == AVTAB_XPERMS_NLMSG)) {
> > +               if (neverallow->driver == allow->driver)
> > +                       rc = extended_permissions_and(neverallow->perms, allow->perms);
> >         }
> >
> >         return rc;
> > @@ -142,6 +146,12 @@ static void extended_permissions_violated(avtab_extended_perms_t *result,
> >                 result->specified = AVTAB_XPERMS_IOCTLDRIVER;
> >                 for (i = 0; i < EXTENDED_PERMS_LEN; i++)
> >                         result->perms[i] = neverallow->perms[i] & allow->perms[i];
> > +       } else if ((neverallow->specified == AVRULE_XPERMS_NLMSG)
> > +                       && (allow->specified == AVTAB_XPERMS_NLMSG)) {
> > +               result->specified = AVTAB_XPERMS_NLMSG;
> > +               result->driver = allow->driver;
> > +               for (i = 0; i < EXTENDED_PERMS_LEN; i++)
> > +                       result->perms[i] = neverallow->perms[i] & allow->perms[i];
> >         }
> >  }
> >
> > @@ -176,7 +186,8 @@ static int report_assertion_extended_permissions(sepol_handle_t *handle,
> >                              node = avtab_search_node_next(node, tmp_key.specified)) {
> >                                 xperms = node->datum.xperms;
> >                                 if ((xperms->specified != AVTAB_XPERMS_IOCTLFUNCTION)
> > -                                               && (xperms->specified != AVTAB_XPERMS_IOCTLDRIVER))
> > +                                               && (xperms->specified != AVTAB_XPERMS_IOCTLDRIVER)
> > +                                               && (xperms->specified != AVTAB_XPERMS_NLMSG))
> >                                         continue;
> >                                 found_xperm = 1;
> >                                 rc = check_extended_permissions(avrule->xperms, xperms);
> > @@ -376,7 +387,8 @@ static int check_assertion_extended_permissions_avtab(avrule_t *avrule, avtab_t
> >                                 xperms = node->datum.xperms;
> >
> >                                 if ((xperms->specified != AVTAB_XPERMS_IOCTLFUNCTION)
> > -                                               && (xperms->specified != AVTAB_XPERMS_IOCTLDRIVER))
> > +                                               && (xperms->specified != AVTAB_XPERMS_IOCTLDRIVER)
> > +                                               && (xperms->specified != AVTAB_XPERMS_NLMSG))
> >                                         continue;
> >                                 rc = check_extended_permissions(neverallow_xperms, xperms);
> >                                 if (rc)
> > diff --git a/libsepol/src/optimize.c b/libsepol/src/optimize.c
> > index a38025ec..8a0b70fe 100644
> > --- a/libsepol/src/optimize.c
> > +++ b/libsepol/src/optimize.c
> > @@ -189,6 +189,11 @@ static int process_avtab_datum(uint16_t specified,
> >
> >                         if (x2->specified == AVTAB_XPERMS_IOCTLDRIVER)
> >                                 return process_xperms(x1->perms, x2->perms);
> > +               } else if (x1->specified == AVTAB_XPERMS_NLMSG
> > +                               && x2->specified == AVTAB_XPERMS_NLMSG) {
> > +                       if (x1->driver != x2->driver)
> > +                               return 0;
> > +                       return process_xperms(x1->perms, x2->perms);
> >                 }
> >                 return 0;
> >         }
> > --
> > 2.47.0.105.g07ac214952-goog
> >
> >





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

  Powered by Linux