Re: [RFC PATCH] selinux: checkreqprot is deprecated, add some ssleep() discomfort

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

 



On Tue, Mar 8, 2022 at 5:11 PM Paul Moore <paul@xxxxxxxxxxxxxx> wrote:
>
> The checkreqprot functionality was disabled by default back in
> Linux v4.4 (2015) with commit 2a35d196c160e3 ("selinux: change
> CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE default") and it was
> officially marked as deprecated in Linux v5.7.  It was always a
> bit of a hack to workaround very old userspace and to the best of
> our knowledge, the checkreqprot functionality has been disabled by
> Linux distributions for quite some time.
>
> This patch moves the deprecation messages from KERN_WARNING to
> KERN_ERR and adds a five second sleep to anyone using it to help
> draw their attention to the deprecation and provide a URL which
> helps explain things in more detail.
>
> Signed-off-by: Paul Moore <paul@xxxxxxxxxxxxxx>
> ---
>  security/selinux/hooks.c            |    4 +++-
>  security/selinux/include/security.h |    6 ++++++
>  security/selinux/selinuxfs.c        |    4 ++--
>  3 files changed, 11 insertions(+), 3 deletions(-)

As with the runtime disable RFC, comments on the wiki text are welcome as well.

> diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
> index b12e14b2797b..cff129f96e97 100644
> --- a/security/selinux/hooks.c
> +++ b/security/selinux/hooks.c
> @@ -146,7 +146,7 @@ static int __init checkreqprot_setup(char *str)
>         if (!kstrtoul(str, 0, &checkreqprot)) {
>                 selinux_checkreqprot_boot = checkreqprot ? 1 : 0;
>                 if (checkreqprot)
> -                       pr_warn("SELinux: checkreqprot set to 1 via kernel parameter.  This is deprecated and will be rejected in a future kernel release.\n");
> +                       pr_err("SELinux: checkreqprot set to 1 via kernel parameter.  This is deprecated and will be rejected in a future kernel release.\n");
>         }
>         return 1;
>  }
> @@ -7295,6 +7295,8 @@ static __init int selinux_init(void)
>
>         memset(&selinux_state, 0, sizeof(selinux_state));
>         enforcing_set(&selinux_state, selinux_enforcing_boot);
> +       if (CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE)
> +               pr_err("SELinux: CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE is non-zero.  This is deprecated and will be rejected in a future kernel release.\n");
>         checkreqprot_set(&selinux_state, selinux_checkreqprot_boot);
>         selinux_avc_init(&selinux_state.avc);
>         mutex_init(&selinux_state.status_lock);
> diff --git a/security/selinux/include/security.h b/security/selinux/include/security.h
> index ace4bd13e808..f7e6be63adfb 100644
> --- a/security/selinux/include/security.h
> +++ b/security/selinux/include/security.h
> @@ -16,6 +16,8 @@
>  #include <linux/rcupdate.h>
>  #include <linux/refcount.h>
>  #include <linux/workqueue.h>
> +#include <linux/delay.h>
> +#include <linux/printk.h>
>  #include "flask.h"
>  #include "policycap.h"
>
> @@ -150,6 +152,10 @@ static inline bool checkreqprot_get(const struct selinux_state *state)
>
>  static inline void checkreqprot_set(struct selinux_state *state, bool value)
>  {
> +       if (value) {
> +               pr_err("SELinux: https://github.com/SELinuxProject/selinux-kernel/wiki/DEPRECATE-checkreqprot\n";);
> +               ssleep(5);
> +       }
>         WRITE_ONCE(state->checkreqprot, value);
>  }
>
> diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
> index 6568bc48cd3e..6c8b6a0ddecf 100644
> --- a/security/selinux/selinuxfs.c
> +++ b/security/selinux/selinuxfs.c
> @@ -757,8 +757,8 @@ static ssize_t sel_write_checkreqprot(struct file *file, const char __user *buf,
>                 char comm[sizeof(current->comm)];
>
>                 memcpy(comm, current->comm, sizeof(comm));
> -               pr_warn_once("SELinux: %s (%d) set checkreqprot to 1. This is deprecated and will be rejected in a future kernel release.\n",
> -                            comm, current->pid);
> +               pr_err("SELinux: %s (%d) set checkreqprot to 1. This is deprecated and will be rejected in a future kernel release.\n",
> +                      comm, current->pid);
>         }
>
>         checkreqprot_set(fsi->state, (new_value ? 1 : 0));
>


-- 
paul-moore.com



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

  Powered by Linux