# SPDX-License-Identifier: GPL-2.0-only
menuconfig MODULES
	bool "Enable loadable module support"
	modules
	select EXECMEM
	help
	  Kernel modules are small pieces of compiled code which can
	  be inserted in the running kernel, rather than being
	  permanently built into the kernel.  You use the "modprobe"
	  tool to add (and sometimes remove) them.  If you say Y here,
	  many parts of the kernel can be built as modules (by
	  answering M instead of Y where indicated): this is most
	  useful for infrequently used options which are not required
	  for booting.  For more information, see the man pages for
	  modprobe, lsmod, modinfo, insmod and rmmod.

	  If you say Y here, you will need to run "make
	  modules_install" to put the modules under /lib/modules/
	  where modprobe can find them (you may need to be root to do
	  this).

	  If unsure, say Y.

if MODULES

config MODULE_DEBUGFS
	bool

config MODULE_DEBUG
	bool "Module debugging"
	depends on DEBUG_FS
	help
	  Allows you to enable / disable features which can help you debug
	  modules. You don't need these options on production systems.

if MODULE_DEBUG

config MODULE_STATS
	bool "Module statistics"
	depends on DEBUG_FS
	select MODULE_DEBUGFS
	help
	  This option allows you to maintain a record of module statistics.
	  For example, size of all modules, average size, text size, a list
	  of failed modules and the size for each of those. For failed
	  modules we keep track of modules which failed due to either the
	  existing module taking too long to load or that module was already
	  loaded.

	  You should enable this if you are debugging production loads
	  and want to see if userspace or the kernel is doing stupid things
	  with loading modules when it shouldn't or if you want to help
	  optimize userspace / kernel space module autoloading schemes.
	  You might want to do this because failed modules tend to use
	  up significant amount of memory, and so you'd be doing everyone a
	  favor in avoiding these failures proactively.

	  This functionality is also useful for those experimenting with
	  module .text ELF section optimization.

	  If unsure, say N.

config MODULE_DEBUG_AUTOLOAD_DUPS
	bool "Debug duplicate modules with auto-loading"
	help
	  Module autoloading allows in-kernel code to request modules through
	  the *request_module*() API calls. This in turn just calls userspace
	  modprobe. Although modprobe checks to see if a module is already
	  loaded before trying to load a module there is a small time window in
	  which multiple duplicate requests can end up in userspace and multiple
	  modprobe calls race calling finit_module() around the same time for
	  duplicate modules. The finit_module() system call can consume in the
	  worst case more than twice the respective module size in virtual
	  memory for each duplicate module requests. Although duplicate module
	  requests are non-fatal virtual memory is a limited resource and each
	  duplicate module request ends up just unnecessarily straining virtual
	  memory.

	  This debugging facility will create pr_warn() splats for duplicate
	  module requests to help identify if module auto-loading may be the
	  culprit to your early boot virtual memory pressure. Since virtual
	  memory abuse caused by duplicate module requests could render a
	  system unusable this functionality will also converge races in
	  requests for the same module to a single request. You can boot with
	  the module.enable_dups_trace=1 kernel parameter to use WARN_ON()
	  instead of the pr_warn().

	  If the first module request used request_module_nowait() we cannot
	  use that as the anchor to wait for duplicate module requests, since
	  users of request_module() do want a proper return value. If a call
	  for the same module happened earlier with request_module() though,
	  then a duplicate request_module_nowait() would be detected. The
	  non-wait request_module() call is synchronous and waits until modprobe
	  completes. Subsequent auto-loading requests for the same module do
	  not trigger a new finit_module() calls and do not strain virtual
	  memory, and so as soon as modprobe successfully completes we remove
	  tracking for duplicates for that module.

	  Enable this functionality to try to debug virtual memory abuse during
	  boot on systems which are failing to boot or if you suspect you may be
	  straining virtual memory during boot, and you want to identify if the
	  abuse was due to module auto-loading. These issues are currently only
	  known to occur on systems with many CPUs (over 400) and is likely the
	  result of udev issuing duplicate module requests for each CPU, and so
	  module auto-loading is not the culprit. There may very well still be
	  many duplicate module auto-loading requests which could be optimized
	  for and this debugging facility can be used to help identify them.

	  Only enable this for debugging system functionality, never have it
	  enabled on real systems.

config MODULE_DEBUG_AUTOLOAD_DUPS_TRACE
	bool "Force full stack trace when duplicates are found"
	depends on MODULE_DEBUG_AUTOLOAD_DUPS
	help
	  Enabling this will force a full stack trace for duplicate module
	  auto-loading requests using WARN_ON() instead of pr_warn(). You
	  should keep this disabled at all times unless you are a developer
	  and are doing a manual inspection and want to debug exactly why
	  these duplicates occur.

endif # MODULE_DEBUG

config MODULE_FORCE_LOAD
	bool "Forced module loading"
	default n
	help
	  Allow loading of modules without version information (ie. modprobe
	  --force).  Forced module loading sets the 'F' (forced) taint flag and
	  is usually a really bad idea.

config MODULE_UNLOAD
	bool "Module unloading"
	help
	  Without this option you will not be able to unload any
	  modules (note that some modules may not be unloadable
	  anyway), which makes your kernel smaller, faster
	  and simpler.  If unsure, say Y.

config MODULE_FORCE_UNLOAD
	bool "Forced module unloading"
	depends on MODULE_UNLOAD
	help
	  This option allows you to force a module to unload, even if the
	  kernel believes it is unsafe: the kernel will remove the module
	  without waiting for anyone to stop using it (using the -f option to
	  rmmod).  This is mainly for kernel developers and desperate users.
	  If unsure, say N.

config MODULE_UNLOAD_TAINT_TRACKING
	bool "Tainted module unload tracking"
	depends on MODULE_UNLOAD
	select MODULE_DEBUGFS
	help
	  This option allows you to maintain a record of each unloaded
	  module that tainted the kernel. In addition to displaying a
	  list of linked (or loaded) modules e.g. on detection of a bad
	  page (see bad_page()), the aforementioned details are also
	  shown. If unsure, say N.

config MODVERSIONS
	bool "Module versioning support"
	depends on !COMPILE_TEST
	help
	  Usually, you have to use modules compiled with your kernel.
	  Saying Y here makes it sometimes possible to use modules
	  compiled for different kernels, by adding enough information
	  to the modules to (hopefully) spot any changes which would
	  make them incompatible with the kernel you are running.  If
	  unsure, say N.

if MODVERSIONS

choice
	prompt "Module versioning implementation"
	help
	  Select the tool used to calculate symbol versions for modules.

	  If unsure, select GENKSYMS.

config GENKSYMS
	bool "genksyms (from source code)"
	help
	  Calculate symbol versions from pre-processed source code using
	  genksyms.

	  If unsure, say Y.

config GENDWARFKSYMS
	bool "gendwarfksyms (from debugging information)"
	depends on DEBUG_INFO
	# Requires full debugging information, split DWARF not supported.
	depends on !DEBUG_INFO_REDUCED && !DEBUG_INFO_SPLIT
	# Requires ELF object files.
	depends on !LTO
	# To avoid conflicts with the discarded __gendwarfksyms_ptr symbols on
	# X86, requires pahole before commit 47dcb534e253 ("btf_encoder: Stop
	# indexing symbols for VARs") or after commit 9810758003ce ("btf_encoder:
	# Verify 0 address DWARF variables are in ELF section").
	depends on !X86 || !DEBUG_INFO_BTF || PAHOLE_VERSION < 128 || PAHOLE_VERSION > 129
	help
	  Calculate symbol versions from DWARF debugging information using
	  gendwarfksyms. Requires DEBUG_INFO to be enabled.

	  If unsure, say N.
endchoice

config ASM_MODVERSIONS
	bool
	default HAVE_ASM_MODVERSIONS
	help
	  This enables module versioning for exported symbols also from
	  assembly. This can be enabled only when the target architecture
	  supports it.

config EXTENDED_MODVERSIONS
	bool "Extended Module Versioning Support"
	help
	  This enables extended MODVERSIONs support, allowing long symbol
	  names to be versioned.

	  The most likely reason you would enable this is to enable Rust
	  support. If unsure, say N.

config BASIC_MODVERSIONS
	bool "Basic Module Versioning Support"
	default y
	help
	  This enables basic MODVERSIONS support, allowing older tools or
	  kernels to potentially load modules.

	  Disabling this may cause older `modprobe` or `kmod` to be unable
	  to read MODVERSIONS information from built modules. With this
	  disabled, older kernels may treat this module as unversioned.

	  This is enabled by default when MODVERSIONS are enabled.
	  If unsure, say Y.

endif # MODVERSIONS

config MODULE_SRCVERSION_ALL
	bool "Source checksum for all modules"
	help
	  Modules which contain a MODULE_VERSION get an extra "srcversion"
	  field inserted into their modinfo section, which contains a
	  sum of the source files which made it.  This helps maintainers
	  see exactly which source was used to build a module (since
	  others sometimes change the module source without updating
	  the version).  With this option, such a "srcversion" field
	  will be created for all modules.  If unsure, say N.

config MODULE_SIG
	bool "Module signature verification"
	select MODULE_SIG_FORMAT
	help
	  Check modules for valid signatures upon load: the signature
	  is simply appended to the module. For more information see
	  <file:Documentation/admin-guide/module-signing.rst>.

	  Note that this option adds the OpenSSL development packages as a
	  kernel build dependency so that the signing tool can use its crypto
	  library.

	  You should enable this option if you wish to use either
	  CONFIG_SECURITY_LOCKDOWN_LSM or lockdown functionality imposed via
	  another LSM - otherwise unsigned modules will be loadable regardless
	  of the lockdown policy.

	  !!!WARNING!!!  If you enable this option, you MUST make sure that the
	  module DOES NOT get stripped after being signed.  This includes the
	  debuginfo strip done by some packagers (such as rpmbuild) and
	  inclusion into an initramfs that wants the module size reduced.

config MODULE_SIG_FORCE
	bool "Require modules to be validly signed"
	depends on MODULE_SIG
	help
	  Reject unsigned modules or signed modules for which we don't have a
	  key.  Without this, such modules will simply taint the kernel.

if MODULE_SIG || IMA_APPRAISE_MODSIG

config MODULE_SIG_ALL
	bool "Automatically sign all modules"
	default y
	help
	  Sign all modules during make modules_install. Without this option,
	  modules must be signed manually, using the scripts/sign-file tool.

comment "Do not forget to sign required modules with scripts/sign-file"
	depends on MODULE_SIG_FORCE && !MODULE_SIG_ALL

choice
	prompt "Hash algorithm to sign modules"
	default MODULE_SIG_SHA512
	help
	  This determines which sort of hashing algorithm will be used during
	  signature generation.  This algorithm _must_ be built into the kernel
	  directly so that signature verification can take place.  It is not
	  possible to load a signed module containing the algorithm to check
	  the signature on that module.

config MODULE_SIG_SHA256
	bool "SHA-256"
	select CRYPTO_SHA256

config MODULE_SIG_SHA384
	bool "SHA-384"
	select CRYPTO_SHA512

config MODULE_SIG_SHA512
	bool "SHA-512"
	select CRYPTO_SHA512

config MODULE_SIG_SHA3_256
	bool "SHA3-256"
	select CRYPTO_SHA3

config MODULE_SIG_SHA3_384
	bool "SHA3-384"
	select CRYPTO_SHA3

config MODULE_SIG_SHA3_512
	bool "SHA3-512"
	select CRYPTO_SHA3

endchoice

config MODULE_SIG_HASH
	string
	default "sha256" if MODULE_SIG_SHA256
	default "sha384" if MODULE_SIG_SHA384
	default "sha512" if MODULE_SIG_SHA512
	default "sha3-256" if MODULE_SIG_SHA3_256
	default "sha3-384" if MODULE_SIG_SHA3_384
	default "sha3-512" if MODULE_SIG_SHA3_512

endif # MODULE_SIG || IMA_APPRAISE_MODSIG

config MODULE_COMPRESS
	bool "Module compression"
	help
	  Enable module compression to reduce on-disk size of module binaries.
	  This is fully compatible with signed modules.

	  The tool used to work with modules needs to support the selected
	  compression type. kmod MAY support gzip, xz and zstd. Other tools
	  might have a limited selection of the supported types.

	  Note that for modules inside an initrd or initramfs, it's more
	  efficient to compress the whole ramdisk instead.

	  If unsure, say N.

if MODULE_COMPRESS

choice
	prompt "Module compression type"
	help
	  Choose the supported algorithm for module compression.

config MODULE_COMPRESS_GZIP
	bool "GZIP"
	help
	  Support modules compressed with GZIP. The installed modules are
	  suffixed with .ko.gz.

config MODULE_COMPRESS_XZ
	bool "XZ"
	help
	  Support modules compressed with XZ. The installed modules are
	  suffixed with .ko.xz.

config MODULE_COMPRESS_ZSTD
	bool "ZSTD"
	help
	  Support modules compressed with ZSTD. The installed modules are
	  suffixed with .ko.zst.

endchoice

config MODULE_COMPRESS_ALL
	bool "Automatically compress all modules"
	default y
	help
	  Compress all modules during 'make modules_install'.

	  Your build system needs to provide the appropriate compression tool
	  for the selected compression type. External modules will also be
	  compressed in the same way during the installation.

config MODULE_DECOMPRESS
	bool "Support in-kernel module decompression"
	select ZLIB_INFLATE if MODULE_COMPRESS_GZIP
	select XZ_DEC if MODULE_COMPRESS_XZ
	select ZSTD_DECOMPRESS if MODULE_COMPRESS_ZSTD
	help
	  Support for decompressing kernel modules by the kernel itself
	  instead of relying on userspace to perform this task. Useful when
	  load pinning security policy is enabled.

	  If unsure, say N.

endif # MODULE_COMPRESS

config MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS
	bool "Allow loading of modules with missing namespace imports"
	help
	  Symbols exported with EXPORT_SYMBOL_NS*() are considered exported in
	  a namespace. A module that makes use of a symbol exported with such a
	  namespace is required to import the namespace via MODULE_IMPORT_NS("").
	  There is no technical reason to enforce correct namespace imports,
	  but it creates consistency between symbols defining namespaces and
	  users importing namespaces they make use of. This option relaxes this
	  requirement and lifts the enforcement when loading a module.

	  If unsure, say N.

config MODPROBE_PATH
	string "Path to modprobe binary"
	default "/sbin/modprobe"
	help
	  When kernel code requests a module, it does so by calling
	  the "modprobe" userspace utility. This option allows you to
	  set the path where that binary is found. This can be changed
	  at runtime via the sysctl file
	  /proc/sys/kernel/modprobe. Setting this to the empty string
	  removes the kernel's ability to request modules (but
	  userspace can still load modules explicitly).

config TRIM_UNUSED_KSYMS
	bool "Trim unused exported kernel symbols"
	help
	  The kernel and some modules make many symbols available for
	  other modules to use via EXPORT_SYMBOL() and variants. Depending
	  on the set of modules being selected in your kernel configuration,
	  many of those exported symbols might never be used.

	  This option allows for unused exported symbols to be dropped from
	  the build. In turn, this provides the compiler more opportunities
	  (especially when using LTO) for optimizing the code and reducing
	  binary size.  This might have some security advantages as well.

	  If unsure, or if you need to build out-of-tree modules, say N.

config UNUSED_KSYMS_WHITELIST
	string "Whitelist of symbols to keep in ksymtab"
	depends on TRIM_UNUSED_KSYMS
	help
	  By default, all unused exported symbols will be un-exported from the
	  build when TRIM_UNUSED_KSYMS is selected.

	  UNUSED_KSYMS_WHITELIST allows to whitelist symbols that must be kept
	  exported at all times, even in absence of in-tree users. The value to
	  set here is the path to a text file containing the list of symbols,
	  one per line. The path can be absolute, or relative to the kernel
	  source or obj tree.

config MODULES_TREE_LOOKUP
	def_bool y
	depends on PERF_EVENTS || TRACING || CFI

endif # MODULES
