Re: [PATCH] libselinux: selinux_check_access: fail cleanly if avc_open() failed

James Carter <[email protected]>
Newsgroups org.kernel.vger.selinux
Message-ID <CAP+JOzTUaOSwBfiEmCf-9aB9qZsSXknbGKqr31M6=vWj+NvVoQ@mail.gmail.com>
On Thu, Aug 13, 2026 at 2:40 PM Stephen Smalley
<[email protected]> wrote:
>
> avc_init_once() calls avc_open() but discards a failure result, and a
> subsequent selinux_check_access() proceeds to avc_context_to_sid()
> which now hits assert(avc_running) and aborts the caller.
>
> Latch the initializer outcome and have selinux_check_access() return
> -1/EINVAL when the AVC never came up, so callers see an error rather
> than a SIGABRT.
>
> Signed-off-by: Stephen Smalley <[email protected]>

Acked-by: James Carter <[email protected]>

> ---
>  libselinux/src/checkAccess.c | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/libselinux/src/checkAccess.c b/libselinux/src/checkAccess.c
> index d8f485e9..3cdd2413 100644
> --- a/libselinux/src/checkAccess.c
> +++ b/libselinux/src/checkAccess.c
> @@ -9,14 +9,13 @@
>
>  static pthread_once_t once = PTHREAD_ONCE_INIT;
>  static int selinux_enabled;
> +static int avc_ok;
>
>  static void avc_init_once(void)
>  {
>         selinux_enabled = is_selinux_enabled();
> -       if (selinux_enabled == 1) {
> -               if (avc_open(NULL, 0))
> -                       return;
> -       }
> +       if (selinux_enabled == 1 && avc_open(NULL, 0) == 0)
> +               avc_ok = 1;
>  }
>
>  int selinux_check_access(const char *scon, const char *tcon, const char *class,
> @@ -33,6 +32,11 @@ int selinux_check_access(const char *scon, const char *tcon, const char *class,
>         if (selinux_enabled != 1)
>                 return 0;
>
> +       if (!avc_ok) {
> +               errno = EINVAL;
> +               return -1;
> +       }
> +
>         rc = avc_context_to_sid(scon, &scon_id);
>         if (rc < 0)
>                 return rc;
> --
> 2.55.0
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.