summaryrefslogtreecommitdiffstats
path: root/arch/x86/include/asm/vvar.h
diff options
context:
space:
mode:
authorDmitry Safonov <dsafonov@virtuozzo.com>2017-03-06 15:17:20 +0100
committerThomas Gleixner <tglx@linutronix.de>2017-03-13 14:59:23 +0100
commit3e6ef9c80946f781fc25e8490c9875b1d2b61158 (patch)
tree23aa87fbae790f5d79bd8c4cacfe0eeb0d91e8b1 /arch/x86/include/asm/vvar.h
parentx86/mm: Introduce mmap_compat_base() for 32-bit mmap() (diff)
downloadlinux-3e6ef9c80946f781fc25e8490c9875b1d2b61158.tar.xz
linux-3e6ef9c80946f781fc25e8490c9875b1d2b61158.zip
x86/mm: Make mmap(MAP_32BIT) work correctly
mmap(MAP_32BIT) is broken due to the dependency on the TIF_ADDR32 thread flag. For 64bit applications MAP_32BIT will force legacy bottom-up allocations and the 1GB address space restriction even if the application issued a compat syscall, which should not be subject of these restrictions. For 32bit applications, which issue 64bit syscalls the newly introduced mmap base separation into 64-bit and compat bases changed the behaviour because now a 64-bit mapping is returned, but due to the TIF_ADDR32 dependency MAP_32BIT is ignored. Before the separation a 32-bit mapping was returned, so the MAP_32BIT handling was irrelevant. Replace the check for TIF_ADDR32 with a check for the compat syscall. That solves both the 64-bit issuing a compat syscall and the 32-bit issuing a 64-bit syscall problems. [ tglx: Massaged changelog ] Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com> Cc: 0x7f454c46@gmail.com Cc: linux-mm@kvack.org Cc: Andy Lutomirski <luto@kernel.org> Cc: Cyrill Gorcunov <gorcunov@openvz.org> Cc: Borislav Petkov <bp@suse.de> Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com> Link: http://lkml.kernel.org/r/20170306141721.9188-5-dsafonov@virtuozzo.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/include/asm/vvar.h')
0 files changed, 0 insertions, 0 deletions