summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2017-04-10 17:14:28 +0200
committerBen Hutchings <ben@decadent.org.uk>2017-07-18 18:38:42 +0100
commitdf1c5dfda0b4ed3aa39b4450a2f67c4239d8fde4 (patch)
tree56cede247b2c8bde8ae329e6fedcdc3e6d2bf88b /arch
parent34b5dcc50abe6445aae34c7d055d70832a5951a7 (diff)
downloadlinux-stable-df1c5dfda0b4ed3aa39b4450a2f67c4239d8fde4.tar.gz
linux-stable-df1c5dfda0b4ed3aa39b4450a2f67c4239d8fde4.tar.bz2
linux-stable-df1c5dfda0b4ed3aa39b4450a2f67c4239d8fde4.zip
x86/vdso: Plug race between mapping and ELF header setup
commit 6fdc6dd90272ce7e75d744f71535cfbd8d77da81 upstream. The vsyscall32 sysctl can racy against a concurrent fork when it switches from disabled to enabled: arch_setup_additional_pages() if (vdso32_enabled) --> No mapping sysctl.vsysscall32() --> vdso32_enabled = true create_elf_tables() ARCH_DLINFO_IA32 if (vdso32_enabled) { --> Add VDSO entry with NULL pointer Make ARCH_DLINFO_IA32 check whether the VDSO mapping has been set up for the newly forked process or not. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Andy Lutomirski <luto@amacapital.net> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Mathias Krause <minipli@googlemail.com> Link: http://lkml.kernel.org/r/20170410151723.602367196@linutronix.de Signed-off-by: Thomas Gleixner <tglx@linutronix.de> [bwh: Backported to 3.2: change the flag passed to ARCH_DLINFO_IA32()] Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/include/asm/elf.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h
index 5f962df30d0f..81a156923b61 100644
--- a/arch/x86/include/asm/elf.h
+++ b/arch/x86/include/asm/elf.h
@@ -298,7 +298,7 @@ do { \
#define AT_SYSINFO 32
-#define COMPAT_ARCH_DLINFO ARCH_DLINFO_IA32(sysctl_vsyscall32)
+#define COMPAT_ARCH_DLINFO ARCH_DLINFO_IA32(VDSO_CURRENT_BASE)
#define COMPAT_ELF_ET_DYN_BASE (TASK_UNMAPPED_BASE + 0x1000000)