Re: [PATCH] Yama: remove needless CONFIG_SECURITY_YAMA_STACKED

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

 



On 7/21/2015 12:09 PM, Kees Cook wrote:
> Now that minor LSMs can cleanly stack with major LSMs, remove the unneeded
> config for Yama to be made to explicitly stack. Just selecting the main
> Yama CONFIG will allow it to work, regardless of the major LSM. Since
> distros using Yama are already forcing it to stack, this is effectively
> a no-op change.

Today I can compile in all LSMs including Yama and pick the one I want.
If we made your change it would be impossible to build in Yama and not
use it. I suggest we hold off until after the security summit discussion
on the next steps for module stacking. It's my hope we'll agree to a
convention for using kconfig and the security= boot parameter to specify
the variety of possible desired behaviors. I'm hoping for:

	CONFIG_DEFAULT_SECURITY=yama,smack
	security=yama,selinux

with checks in kconfig to prevent illegal combinations and a rational
behavior in the kernel for security=apparmor,selinux (which won't work
today).

>
> Signed-off-by: Kees Cook <keescook@xxxxxxxxxxxx>
> ---
>  Documentation/security/Yama.txt       | 10 ++++------
>  arch/mips/configs/pistachio_defconfig |  1 -
>  include/linux/lsm_hooks.h             |  3 ---
>  security/security.c                   | 11 ++---------
>  security/yama/Kconfig                 |  9 +--------
>  security/yama/yama_lsm.c              | 26 +++++++++-----------------
>  6 files changed, 16 insertions(+), 44 deletions(-)
>
> diff --git a/Documentation/security/Yama.txt b/Documentation/security/Yama.txt
> index 227a63f018a2..d9ee7d7a6c7f 100644
> --- a/Documentation/security/Yama.txt
> +++ b/Documentation/security/Yama.txt
> @@ -1,9 +1,7 @@
> -Yama is a Linux Security Module that collects a number of system-wide DAC
> -security protections that are not handled by the core kernel itself. To
> -select it at boot time, specify "security=yama" (though this will disable
> -any other LSM).
> -
> -Yama is controlled through sysctl in /proc/sys/kernel/yama:
> +Yama is a Linux Security Module that collects system-wide DAC security
> +protections that are not handled by the core kernel itself. This is
> +selectable at build-time with CONFIG_SECURITY_YAMA, and can be controlled
> +at run-time through sysctls in /proc/sys/kernel/yama:
>  
>  - ptrace_scope
>  
> diff --git a/arch/mips/configs/pistachio_defconfig b/arch/mips/configs/pistachio_defconfig
> index 1646cce032c3..642b50946943 100644
> --- a/arch/mips/configs/pistachio_defconfig
> +++ b/arch/mips/configs/pistachio_defconfig
> @@ -320,7 +320,6 @@ CONFIG_KEYS=y
>  CONFIG_SECURITY=y
>  CONFIG_SECURITY_NETWORK=y
>  CONFIG_SECURITY_YAMA=y
> -CONFIG_SECURITY_YAMA_STACKED=y
>  CONFIG_DEFAULT_SECURITY_DAC=y
>  CONFIG_CRYPTO_AUTHENC=y
>  CONFIG_CRYPTO_HMAC=y
> diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h
> index 9429f054c323..4ea92e8968c8 100644
> --- a/include/linux/lsm_hooks.h
> +++ b/include/linux/lsm_hooks.h
> @@ -1881,8 +1881,5 @@ static inline void security_delete_hooks(struct security_hook_list *hooks,
>  
>  extern int __init security_module_enable(const char *module);
>  extern void __init capability_add_hooks(void);
> -#ifdef CONFIG_SECURITY_YAMA_STACKED
> -void __init yama_add_hooks(void);
> -#endif
>  
>  #endif /* ! __LINUX_LSM_HOOKS_H */
> diff --git a/security/security.c b/security/security.c
> index 595fffab48b0..aada79d281e5 100644
> --- a/security/security.c
> +++ b/security/security.c
> @@ -56,18 +56,11 @@ int __init security_init(void)
>  	pr_info("Security Framework initialized\n");
>  
>  	/*
> -	 * Always load the capability module.
> +	 * Always load the capability module first.
>  	 */
>  	capability_add_hooks();
> -#ifdef CONFIG_SECURITY_YAMA_STACKED
>  	/*
> -	 * If Yama is configured for stacking load it next.
> -	 */
> -	yama_add_hooks();
> -#endif
> -	/*
> -	 * Load the chosen module if there is one.
> -	 * This will also find yama if it is stacking
> +	 * Load all the remaining security modules.
>  	 */
>  	do_security_initcalls();
>  
> diff --git a/security/yama/Kconfig b/security/yama/Kconfig
> index 3123e1da2fed..90c605eea892 100644
> --- a/security/yama/Kconfig
> +++ b/security/yama/Kconfig
> @@ -6,14 +6,7 @@ config SECURITY_YAMA
>  	  This selects Yama, which extends DAC support with additional
>  	  system-wide security settings beyond regular Linux discretionary
>  	  access controls. Currently available is ptrace scope restriction.
> +	  Like capabilities, this security module stacks with other LSMs.
>  	  Further information can be found in Documentation/security/Yama.txt.
>  
>  	  If you are unsure how to answer this question, answer N.
> -
> -config SECURITY_YAMA_STACKED
> -	bool "Yama stacked with other LSMs"
> -	depends on SECURITY_YAMA
> -	default n
> -	help
> -	  When Yama is built into the kernel, force it to stack with the
> -	  selected primary LSM.
> diff --git a/security/yama/yama_lsm.c b/security/yama/yama_lsm.c
> index 9ed32502470e..15ce2bac75e3 100644
> --- a/security/yama/yama_lsm.c
> +++ b/security/yama/yama_lsm.c
> @@ -353,11 +353,6 @@ static struct security_hook_list yama_hooks[] = {
>  	LSM_HOOK_INIT(task_free, yama_task_free),
>  };
>  
> -void __init yama_add_hooks(void)
> -{
> -	security_add_hooks(yama_hooks, ARRAY_SIZE(yama_hooks));
> -}
> -
>  #ifdef CONFIG_SYSCTL
>  static int yama_dointvec_minmax(struct ctl_table *table, int write,
>  				void __user *buffer, size_t *lenp, loff_t *ppos)
> @@ -396,23 +391,20 @@ static struct ctl_table yama_sysctl_table[] = {
>  	},
>  	{ }
>  };
> +static __init void yama_init_sysctl(void)
> +{
> +	if (!register_sysctl_paths(yama_sysctl_path, yama_sysctl_table))
> +		panic("Yama: sysctl registration failed.\n");
> +}
> +#else
> +static __init void yama_init_sysctl(void) { };
>  #endif /* CONFIG_SYSCTL */
>  
>  static __init int yama_init(void)
>  {
> -#ifndef CONFIG_SECURITY_YAMA_STACKED
> -	/*
> -	 * If yama is being stacked this is already taken care of.
> -	 */
> -	if (!security_module_enable("yama"))
> -		return 0;
> -#endif
>  	pr_info("Yama: becoming mindful.\n");
> -
> -#ifdef CONFIG_SYSCTL
> -	if (!register_sysctl_paths(yama_sysctl_path, yama_sysctl_table))
> -		panic("Yama: sysctl registration failed.\n");
> -#endif
> +	security_add_hooks(yama_hooks, ARRAY_SIZE(yama_hooks));
> +	yama_init_sysctl();
>  
>  	return 0;
>  }

--
To unsubscribe from this list: send the line "unsubscribe linux-doc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux