On Mon, 10 Apr 2017, Thomas Gleixner wrote: > On Wed, 5 Apr 2017, Mathias Krause wrote: > > @@ -62,13 +64,18 @@ int __init sysenter_setup(void) > > /* Register vsyscall32 into the ABI table */ > > #include <linux/sysctl.h> > > > > +static const int zero; > > +static const int one = 1; > > + > > static struct ctl_table abi_table2[] = { > > { > > .procname = "vsyscall32", > > .data = &vdso32_enabled, > > .maxlen = sizeof(int), > > .mode = 0644, > > - .proc_handler = proc_dointvec > > + .proc_handler = proc_dointvec_minmax, > > + .extra1 = (int *)&zero, > > + .extra2 = (int *)&one, > > This is still bustable. Let's start with: vdso32_enabled = false > > arch_setup_additional_pages() > --> No mapping > > sysctl.vsysscall32() > --> vdso32_enabled = true > > create_elf_tables() > if (vdso32_enabled) { > --> Add VDSO entry with NULL pointer > > The vdso map code needs to store a flag in current which can be checked in > ARCH_DLINFO_IA32.
It's ways simpler. Patch below. Thanks, tglx --- a/arch/x86/include/asm/elf.h +++ b/arch/x86/include/asm/elf.h @@ -287,7 +287,7 @@ struct task_struct; #define ARCH_DLINFO_IA32 \ do { \ - if (vdso32_enabled) { \ + if (VDSO_CURRENT_BASE) { \ NEW_AUX_ENT(AT_SYSINFO, VDSO_ENTRY); \ NEW_AUX_ENT(AT_SYSINFO_EHDR, VDSO_CURRENT_BASE); \ } \