# SPDX-License-Identifier: GPL-2.0-only
config SECURITY_APPARMOR
	bool "AppArmor support"
	depends on SECURITY && NET
	select AUDIT
	select SECURITY_PATH
	select SECURITYFS
	select SECURITY_NETWORK
	default n
	help
	  This enables the AppArmor security module.
	  Required userspace tools (if they are not included in your
	  distribution) and further information may be found at
	  http://apparmor.wiki.kernel.org

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

config SECURITY_APPARMOR_DEBUG
	bool "Build AppArmor with debug code"
	depends on SECURITY_APPARMOR
	default n
	help
	  Build apparmor with debugging logic in apparmor. Not all
	  debugging logic will necessarily be enabled. A submenu will
	  provide fine grained control of the debug options that are
	  available.

config SECURITY_APPARMOR_DEBUG_ASSERTS
	bool "Build AppArmor with debugging asserts"
	depends on SECURITY_APPARMOR_DEBUG
	default y
	help
	  Enable code assertions made with AA_BUG. These are primarily
	  function entry preconditions but also exist at other key
	  points. If the assert is triggered it will trigger a WARN
	  message.

config SECURITY_APPARMOR_DEBUG_MESSAGES
	bool "Debug messages enabled by default"
	depends on SECURITY_APPARMOR_DEBUG
	default n
	help
	  Set the default value of the apparmor.debug kernel parameter.
	  When enabled, various debug messages will be logged to
	  the kernel message buffer.

config SECURITY_APPARMOR_INTROSPECT_POLICY
	bool "Allow loaded policy to be introspected"
	depends on SECURITY_APPARMOR
	default y
	help
	  This option selects whether introspection of loaded policy
	  is available to userspace via the apparmor filesystem. This
	  adds to kernel memory usage. It is required for introspection
	  of loaded policy, and check point and restore support. It
	  can be disabled for embedded systems where reducing memory and
	  cpu is paramount.

config SECURITY_APPARMOR_HASH
	bool "Enable introspection of sha256 hashes for loaded profiles"
	depends on SECURITY_APPARMOR_INTROSPECT_POLICY
	select CRYPTO_LIB_SHA256
	default y
	help
	  This option selects whether introspection of loaded policy
	  hashes is available to userspace via the apparmor
	  filesystem. This option provides a light weight means of
	  checking loaded policy.  This option adds to policy load
	  time and can be disabled for small embedded systems.

config SECURITY_APPARMOR_HASH_DEFAULT
       bool "Enable policy hash introspection by default"
       depends on SECURITY_APPARMOR_HASH
       default y
       help
	 This option selects whether sha256 hashing of loaded policy
	 is enabled by default. The generation of sha256 hashes for
	 loaded policy provide system administrators a quick way to
	 verify that policy in the kernel matches what is expected,
	 however it can slow down policy load on some devices. In
	 these cases policy hashing can be disabled by default and
	 enabled only if needed.

config SECURITY_APPARMOR_EXPORT_BINARY
	bool "Allow exporting the raw binary policy"
	depends on SECURITY_APPARMOR_INTROSPECT_POLICY
	select ZSTD_COMPRESS
	select ZSTD_DECOMPRESS
	default y
	help
	  This option allows reading back binary policy as it was loaded.
	  It increases the amount of kernel memory needed by policy and
	  also increases policy load time. This option is required for
	  checkpoint and restore support, and debugging of loaded policy.

config SECURITY_APPARMOR_PARANOID_LOAD
	bool "Perform full verification of loaded policy"
	depends on SECURITY_APPARMOR
	default y
	help
	  This options allows controlling whether apparmor does a full
	  verification of loaded policy. This should not be disabled
	  except for embedded systems where the image is read only,
	  includes policy, and has some form of integrity check.
	  Disabling the check will speed up policy loads.

config SECURITY_APPARMOR_KUNIT_TEST
	tristate "Build KUnit tests for policy_unpack.c" if !KUNIT_ALL_TESTS
	depends on KUNIT && SECURITY_APPARMOR
	default KUNIT_ALL_TESTS
	help
	  This builds the AppArmor KUnit tests.

	  KUnit tests run during boot and output the results to the debug log
	  in TAP format (https://testanything.org/). Only useful for kernel devs
	  running KUnit test harness and are not for inclusion into a
	  production build.

	  For more information on KUnit and unit tests in general please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.
