diff options
author | Dmitry Safonov <dsafonov@virtuozzo.com> | 2017-03-06 15:17:20 +0100 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2017-03-13 14:59:23 +0100 |
commit | 3e6ef9c80946f781fc25e8490c9875b1d2b61158 (patch) | |
tree | 23aa87fbae790f5d79bd8c4cacfe0eeb0d91e8b1 /arch/x86/include/asm/vvar.h | |
parent | x86/mm: Introduce mmap_compat_base() for 32-bit mmap() (diff) | |
download | linux-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