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.

Thanks,

        tglx

Reply via email to