Commit a33e2881 authored by Kaixiong Yu's avatar Kaixiong Yu Committed by Joel Granados
Browse files

x86: vdso: move the sysctl to arch/x86/entry/vdso/vdso32-setup.c



When CONFIG_X86_32 is defined and CONFIG_UML is not defined,
vdso_enabled belongs to arch/x86/entry/vdso/vdso32-setup.c.
So, move it into its own file.

Before this patch, vdso_enabled was allowed to be set to
a value exceeding 1 on x86_32 architecture. After this patch is
applied, vdso_enabled is not permitted to set the value more than 1.
It does not matter, because according to the function load_vdso32(),
only vdso_enabled is set to 1, VDSO would be enabled. Other values
all mean "disabled". The same limitation could be seen in the
function vdso32_setup().

Signed-off-by: default avatarKaixiong Yu <yukaixiong@huawei.com>
Reviewed-by: default avatarKees Cook <kees@kernel.org>
Signed-off-by: default avatarJoel Granados <joel.granados@kernel.org>
parent 52e66823
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -51,15 +51,17 @@ __setup("vdso32=", vdso32_setup);
__setup_param("vdso=", vdso_setup, vdso32_setup, 0);
#endif

#ifdef CONFIG_X86_64

#ifdef CONFIG_SYSCTL
/* Register vsyscall32 into the ABI table */
#include <linux/sysctl.h>

static const struct ctl_table abi_table2[] = {
static const struct ctl_table vdso_table[] = {
	{
#ifdef CONFIG_X86_64
		.procname	= "vsyscall32",
#else
		.procname	= "vdso_enabled",
#endif
		.data		= &vdso32_enabled,
		.maxlen		= sizeof(int),
		.mode		= 0644,
@@ -71,10 +73,14 @@ static const struct ctl_table abi_table2[] = {

static __init int ia32_binfmt_init(void)
{
	register_sysctl("abi", abi_table2);
#ifdef CONFIG_X86_64
	/* Register vsyscall32 into the ABI table */
	register_sysctl("abi", vdso_table);
#else
	register_sysctl_init("vm", vdso_table);
#endif
	return 0;
}
__initcall(ia32_binfmt_init);
#endif /* CONFIG_SYSCTL */
#endif	/* CONFIG_X86_64 */
+1 −7
Original line number Diff line number Diff line
@@ -2013,17 +2013,11 @@ static const struct ctl_table kern_table[] = {
};

static const struct ctl_table vm_table[] = {
#if (defined(CONFIG_X86_32) && !defined(CONFIG_UML))|| \
   (defined(CONFIG_SUPERH) && defined(CONFIG_VSYSCALL))
#if defined(CONFIG_SUPERH) && defined(CONFIG_VSYSCALL)
	{
		.procname	= "vdso_enabled",
#ifdef CONFIG_X86_32
		.data		= &vdso32_enabled,
		.maxlen		= sizeof(vdso32_enabled),
#else
		.data		= &vdso_enabled,
		.maxlen		= sizeof(vdso_enabled),
#endif
		.mode		= 0644,
		.proc_handler	= proc_dointvec,
		.extra1		= SYSCTL_ZERO,