• Dmitry Safonov's avatar
    x86/mm: Make mmap(MAP_32BIT) work correctly · 3e6ef9c8
    Dmitry Safonov authored
    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: default avatarDmitry 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.comSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    3e6ef9c8
sys_x86_64.c 5.62 KB