sh: vdso: move the sysctl to arch/sh/kernel/vsyscall/vsyscall.c

When CONFIG_SUPERH and CONFIG_VSYSCALL are defined,
vdso_enabled belongs to arch/sh/kernel/vsyscall/vsyscall.c.
So, move it into its own file. To avoid failure when registering
the vdso_table, move the call to register_sysctl_init() into
its own fs_initcall().

Signed-off-by: Kaixiong Yu <yukaixiong@huawei.com>
Reviewed-by: Kees Cook <kees@kernel.org>
Signed-off-by: Joel Granados <joel.granados@kernel.org>
This commit is contained in:
Kaixiong Yu 2025-01-11 15:07:49 +08:00 committed by Joel Granados
parent a33e288147
commit f569ca4b14
2 changed files with 21 additions and 12 deletions

View File

@ -14,6 +14,7 @@
#include <linux/module.h>
#include <linux/elf.h>
#include <linux/sched.h>
#include <linux/sysctl.h>
#include <linux/err.h>
/*
@ -30,6 +31,17 @@ static int __init vdso_setup(char *s)
}
__setup("vdso=", vdso_setup);
static const struct ctl_table vdso_table[] = {
{
.procname = "vdso_enabled",
.data = &vdso_enabled,
.maxlen = sizeof(vdso_enabled),
.mode = 0644,
.proc_handler = proc_dointvec,
.extra1 = SYSCTL_ZERO,
},
};
/*
* These symbols are defined by vsyscall.o to mark the bounds
* of the ELF DSO images included therein.
@ -58,6 +70,14 @@ int __init vsyscall_init(void)
return 0;
}
static int __init vm_sysctl_init(void)
{
register_sysctl_init("vm", vdso_table);
return 0;
}
fs_initcall(vm_sysctl_init);
/* Setup a VMA at program startup for the vsyscall page */
int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
{

View File

@ -2012,18 +2012,7 @@ static const struct ctl_table kern_table[] = {
#endif
};
static const struct ctl_table vm_table[] = {
#if defined(CONFIG_SUPERH) && defined(CONFIG_VSYSCALL)
{
.procname = "vdso_enabled",
.data = &vdso_enabled,
.maxlen = sizeof(vdso_enabled),
.mode = 0644,
.proc_handler = proc_dointvec,
.extra1 = SYSCTL_ZERO,
},
#endif
};
static const struct ctl_table vm_table[] = {};
int __init sysctl_init_bases(void)
{