• Dave Hansen's avatar
    x86/mpx: Fix 32-bit address space calculation · f3119b83
    Dave Hansen authored
    I received a bug report that running 32-bit MPX binaries on
    64-bit kernels was broken.  I traced it down to this little code
    snippet.  We were switching our "number of bounds directory
    entries" calculation correctly.  But, we didn't switch the other
    side of the calculation: the virtual space size.
    
    This meant that we were calculating an absurd size for
    bd_entry_virt_space() on 32-bit because we used the 64-bit
    virt_space.
    
    This was _also_ broken for 32-bit kernels running on 64-bit
    hardware since boot_cpu_data.x86_virt_bits=48 even when running
    in 32-bit mode.
    
    Correct that and properly handle all 3 possible cases:
    
     1. 32-bit binary on 64-bit kernel
     2. 64-bit binary on 64-bit kernel
     3. 32-bit binary on 32-bit kernel
    
    This manifested in having bounds tables not properly unmapped.
    It "leaked" memory but had no functional impact otherwise.
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Cc: <stable@vger.kernel.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Dave Hansen <dave@sr71.net>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/20151111181934.FA7FAC34@viggo.jf.intel.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    f3119b83
mpx.c 28 KB