On Thu, 2019-06-20 at 18:19 -0700, Matthew Garrett wrote: > --- a/Documentation/admin-guide/kernel-parameters.txt > +++ b/Documentation/admin-guide/kernel-parameters.txt > @@ -2239,6 +2239,15 @@ > lockd.nlm_udpport=M [NFS] Assign UDP port. > Format: <integer> > > + lockdown= [SECURITY] > + { integrity | confidentiality } > + Enable the kernel lockdown feature. If set to > + integrity, kernel features that allow userland to > + modify the running kernel are disabled. If set to > + confidentiality, kernel features that allow userland > + to extract confidential information from the kernel > + are also disabled. > + Does "also" imply "integrity" is a prereq for "confidentiality"? > diff --git a/security/lockdown/Kconfig b/security/lockdown/Kconfig > new file mode 100644 > index 000000000000..431cd2b9a14e > --- /dev/null > +++ b/security/lockdown/Kconfig > @@ -0,0 +1,46 @@ > +config SECURITY_LOCKDOWN_LSM > + bool "Basic module for enforcing kernel lockdown" > + depends on SECURITY > + help > + Build support for an LSM that enforces a coarse kernel lockdown > + behaviour. > + > +config SECURITY_LOCKDOWN_LSM_EARLY > + bool "Enable lockdown LSM early in init" > + depends on SECURITY_LOCKDOWN_LSM > + help > + Enable the lockdown LSM early in boot. This is necessary in order > + to ensure that lockdown enforcement can be carried out on kernel > + boot parameters that are otherwise parsed before the security > + subsystem is fully initialised. > + > +choice > + prompt "Kernel default lockdown mode" > + default LOCK_DOWN_KERNEL_FORCE_NONE > + depends on SECURITY_LOCKDOWN_LSM > + help > + The kernel can be configured to default to differing levels of > + lockdown. > + > +config LOCK_DOWN_KERNEL_FORCE_NONE > + bool "None" > + help > + No lockdown functionality is enabled by default. Lockdown may be > + enabled via the kernel commandline or /sys/kernel/security/lockdown. > + > +config LOCK_DOWN_KERNEL_FORCE_INTEGRITY > + bool "Integrity" > + help > + The kernel runs in integrity mode by default. Features that allow > + the kernel to be modified at runtime are disabled. > + > +config LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY > + bool "Confidentiality" > + help > + The kernel runs in confidentiality mode by default. Features that > + allow the kernel to be modified at runtime or that permit userland > + code to read confidential material held inside the kernel are > + disabled. > + Is there a missing dependency on LOCK_DOWN_KERNEL_FORCE_INTEGRITY here? > +endchoice > + > diff --git a/security/lockdown/lockdown.c b/security/lockdown/lockdown.c > new file mode 100644 > index 000000000000..1ecb2eecb245 > --- /dev/null > +++ b/security/lockdown/lockdown.c > + > +static int __init lockdown_lsm_init(void) > +{ > +#if defined(CONFIG_LOCK_DOWN_KERNEL_FORCE_INTEGRITY) > + lock_kernel_down("Kernel configuration", LOCKDOWN_INTEGRITY_MAX); > +#elif defined(CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY) > + lock_kernel_down("Kernel configuration", LOCKDOWN_CONFIDENTIALITY_MAX); > +#endif > + security_add_hooks(lockdown_hooks, ARRAY_SIZE(lockdown_hooks), > + "lockdown"); > + return 0; > +} If there is a dependency on "defined(CONFIG_LOCK_DOWN_KERNEL_FORCE_INTEGRITY" for "CONFIG_LOCK_DOWN_KERNEL_FORCE_CONFIDENTIALITY", then the ordering should be reversed. If there isn't a dependency of one on the other, then replace the "elif" with "endif". Mimi