Hi Kaixiong, On Sat, Dec 28, 2024 at 4:07 PM Kaixiong Yu <yukaixiong@xxxxxxxxxx> wrote: > 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. After this patch is applied, > all sysctls of vm_table would be moved. So, delete vm_table. > > Signed-off-by: Kaixiong Yu <yukaixiong@xxxxxxxxxx> > Reviewed-by: Kees Cook <kees@xxxxxxxxxx> > --- > v4: > - const qualify struct ctl_table vdso_table Thanks for your patch! I gave this a try on landisk, and /proc/sys/vm/vdso_enabled disappeared. > --- a/arch/sh/kernel/vsyscall/vsyscall.c > +++ b/arch/sh/kernel/vsyscall/vsyscall.c > @@ -55,6 +67,8 @@ int __init vsyscall_init(void) > &vsyscall_trapa_start, > &vsyscall_trapa_end - &vsyscall_trapa_start); > > + register_sysctl_init("vm", vdso_table); "failed when register_sysctl_sz vdso_table to vm" Adding some debug prints shows that kzalloc() in __register_sysctl_table() fails, presumably because it is called too early in the boot process. > + > return 0; > } Moving the call to register_sysctl_init() into its own fs_initcall(), like the gmail-whitespace-damaged patch below, fixes that. --- a/arch/sh/kernel/vsyscall/vsyscall.c +++ b/arch/sh/kernel/vsyscall/vsyscall.c @@ -67,11 +67,17 @@ int __init vsyscall_init(void) &vsyscall_trapa_start, &vsyscall_trapa_end - &vsyscall_trapa_start); - register_sysctl_init("vm", vdso_table); + 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) { Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds