# SPDX-License-Identifier: GPL-2.0-only
config SECURITY_SELINUX
	bool "NSA SELinux Support"
	depends on SECURITY_NETWORK && AUDIT && NET && INET
	select NETWORK_SECMARK
	default n
	help
	  This selects NSA Security-Enhanced Linux (SELinux).
	  You will also need a policy configuration and a labeled filesystem.
	  If you are unsure how to answer this question, answer N.

config SECURITY_SELINUX_BOOTPARAM
	bool "NSA SELinux boot parameter"
	depends on SECURITY_SELINUX
	default n
	help
	  This option adds a kernel parameter 'selinux', which allows SELinux
	  to be disabled at boot.  If this option is selected, SELinux
	  functionality can be disabled with selinux=0 on the kernel
	  command line.  The purpose of this option is to allow a single
	  kernel image to be distributed with SELinux built in, but not
	  necessarily enabled.

	  If you are unsure how to answer this question, answer N.

config SECURITY_SELINUX_DISABLE
	bool "NSA SELinux runtime disable"
	depends on SECURITY_SELINUX
	select SECURITY_WRITABLE_HOOKS
	default n
	help
	  This option enables writing to a selinuxfs node 'disable', which
	  allows SELinux to be disabled at runtime prior to the policy load.
	  SELinux will then remain disabled until the next boot.
	  This option is similar to the selinux=0 boot parameter, but is to
	  support runtime disabling of SELinux, e.g. from /sbin/init, for
	  portability across platforms where boot parameters are difficult
	  to employ.

	  NOTE: selecting this option will disable the '__ro_after_init'
	  kernel hardening feature for security hooks.   Please consider
	  using the selinux=0 boot parameter instead of enabling this
	  option.

	  If you are unsure how to answer this question, answer N.

config SECURITY_SELINUX_DEVELOP
	bool "NSA SELinux Development Support"
	depends on SECURITY_SELINUX
	default y
	help
	  This enables the development support option of NSA SELinux,
	  which is useful for experimenting with SELinux and developing
	  policies.  If unsure, say Y.  With this option enabled, the
	  kernel will start in permissive mode (log everything, deny nothing)
	  unless you specify enforcing=1 on the kernel command line.  You
	  can interactively toggle the kernel between enforcing mode and
	  permissive mode (if permitted by the policy) via /selinux/enforce.

config SECURITY_SELINUX_PERMISSIVE_DONTAUDIT
	bool "NSA SELinux don't audit permissive"
	depends on SECURITY_SELINUX
	default n
	help
	  This prevents logging when permissive=1.  If unsure, say N.  With
	  this option enabled, any avc logs that would occur on a permissive
	  domain won't be logged.  This can prevent a significant amount of
	  logspam.

config SECURITY_SELINUX_AVC_STATS
	bool "NSA SELinux AVC Statistics"
	depends on SECURITY_SELINUX
	default y
	help
	  This option collects access vector cache statistics to
	  /selinux/avc/cache_stats, which may be monitored via
	  tools such as avcstat.

config SECURITY_SELINUX_CHECKREQPROT_VALUE
	int "NSA SELinux checkreqprot default value"
	depends on SECURITY_SELINUX
	range 0 1
	default 0
	help
	  This option sets the default value for the 'checkreqprot' flag
	  that determines whether SELinux checks the protection requested
	  by the application or the protection that will be applied by the
	  kernel (including any implied execute for read-implies-exec) for
	  mmap and mprotect calls.  If this option is set to 0 (zero),
	  SELinux will default to checking the protection that will be applied
	  by the kernel.  If this option is set to 1 (one), SELinux will
	  default to checking the protection requested by the application.
	  The checkreqprot flag may be changed from the default via the
	  'checkreqprot=' boot parameter.  It may also be changed at runtime
	  via /selinux/checkreqprot if authorized by policy.

	  If you are unsure how to answer this question, answer 0.
