Re: [PATCH] x86/vdso: ensure vdso32_enabled gets set to valid values only

From: Thomas Gleixner
Date: Mon Apr 10 2017 - 09:14:09 EST


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