Re: [RFC PATCH] selinux: deprecate setting checkreqprot to 1

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

 



On 1/8/20 11:26 AM, Ondrej Mosnacek wrote:
On Wed, Jan 8, 2020 at 5:08 PM Stephen Smalley <sds@xxxxxxxxxxxxx> wrote:
On 1/8/20 12:57 AM, Paul Moore wrote:
On Tue, Jan 7, 2020 at 3:22 PM Stephen Smalley <sds@xxxxxxxxxxxxx> wrote:

Deprecate setting the SELinux checkreqprot tunable to 1 via kernel
parameter or /sys/fs/selinux/checkreqprot.  Setting it to 0 is left
intact for compatibility since Android and some Linux distributions
do so for security and treat an inability to set it as a fatal error.
Eventually setting it to 0 will become a no-op and the kernel will
stop using checkreqprot's value internally altogether.

checkreqprot was originally introduced as a compatibility mechanism
for legacy userspace and the READ_IMPLIES_EXEC personality flag.
However, if set to 1, it weakens security by allowing mappings to be
made executable without authorization by policy.  The default value
for the SECURITY_SELINUX_CHECKREQPROT_VALUE config option was changed
from 1 to 0 in commit 2a35d196c160e3 ("selinux: change
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE default") and both Android
and Linux distributions began explicitly setting
/sys/fs/selinux/checkreqprot to 0 some time ago.

Signed-off-by: Stephen Smalley <sds@xxxxxxxxxxxxx>
---
RFC-only, not yet tested.

   Documentation/admin-guide/kernel-parameters.txt | 1 +
   security/selinux/Kconfig                        | 3 +++
   security/selinux/hooks.c                        | 4 ++++
   security/selinux/selinuxfs.c                    | 6 ++++++
   4 files changed, 14 insertions(+)

No objection so long as the testing goes okay, although I don't think
we will see any surprises.

Booting with this patch did produce one surprise; it logged a warning
claiming that checkreqprot was set to 1 via kernel parameter on Fedora.
This was incorrect; it is actually defaulted to 1 via kernel config on
Fedora (Fedora kernel config still has
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 at least in F31), so I
moved the check to checkreqprot_setup() so that it will only log if
explicitly set via kernel parameter.  Fedora is switching checkreqprot
to 0 from systemd-tmpfiles via an entry in
/usr/lib/tmpfiles.d/selinux-policy.conf, so at least it isn't left as 1
after startup.

Interesting... should I send a PR to change the kernel config on
Fedora? Does anyone know why the
/usr/lib/tmpfiles.d/selinux-policy.conf approach was used instead of
just setting the kernel config option to 0? I assume the config option
just didn't exist yet back then?

Yes, I would recommend doing so since the config option is being deprecated too. The config option predates git so I don't think that was the issue; it was probably just a case of the SELinux userspace maintainers being able to package a tmpfiles.d config file easily and no kernel developer pushing the corresponding change.

I could see this potentially creating problems for architectures that still default to VM_EXEC being included in their VM_DATA_DEFAULT_FLAGS. For those, we might need to disable the FILE__EXECUTE check on mmap/mprotect just as we do for PROCESS__EXECMEM.




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

  Powered by Linux