linux/arch/x86/mm
Dave Hansen f3119b8302 x86/mpx: Fix 32-bit address space calculation
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: Dave 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.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2015-11-12 09:20:37 +01:00
..
kmemcheck x86: Replace __get_cpu_var uses 2014-08-26 13:45:49 -04:00
amdtopology.c
dump_pagetables.c x86/mm: Skip the hypervisor range when walking PGD 2015-11-07 10:39:39 +01:00
extable.c
fault.c x86/vm86: Clean up vm86.h includes 2015-07-31 13:31:10 +02:00
gup.c x86/mm: Fix gup_huge_p?d() to handle large PAT bit 2015-09-22 21:27:33 +02:00
highmem_32.c sched/preempt, mm/kmap: Explicitly disable/enable preemption in kmap_atomic_* 2015-05-19 08:39:14 +02:00
hugetlbpage.c mm/hugetlb: pmd_huge() returns true for non-present hugepage 2015-02-11 17:06:01 -08:00
init_32.c x86/mm: Warn on W^X mappings 2015-10-06 11:11:48 +02:00
init_64.c Merge branch 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-11-03 21:23:56 -08:00
init.c x86/microcode: Merge the early microcode loader 2015-10-21 11:22:12 +02:00
iomap_32.c Merge branch 'x86-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-06-22 17:59:09 -07:00
ioremap.c x86/mm: Fix newly introduced printk format warnings 2015-07-24 16:35:33 +02:00
kasan_init_64.c x86/kasan, mm: Introduce generic kasan_populate_zero_shadow() 2015-08-22 14:54:55 +02:00
kmmio.c
Makefile x86/mm: Warn on W^X mappings 2015-10-06 11:11:48 +02:00
mm_internal.h x86: Enable PAT to use cache mode translation tables 2014-11-16 11:04:26 +01:00
mmap.c x86/mpx: Do not set ->vm_ops on MPX VMAs 2015-07-21 07:57:16 +02:00
mmio-mod.c
mpx.c x86/mpx: Fix 32-bit address space calculation 2015-11-12 09:20:37 +01:00
numa_32.c
numa_64.c
numa_emulation.c
numa_internal.h
numa.c mem-hotplug: handle node hole when initializing numa_meminfo. 2015-09-08 15:35:28 -07:00
pageattr-test.c x86/mm/pat: Make mm/pageattr[-test].c explicitly non-modular 2015-08-25 09:48:38 +02:00
pageattr.c Merge branch 'x86-mm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2015-11-03 21:23:56 -08:00
pat_internal.h x86/mm/pat: Convert to pr_*() usage 2015-05-27 14:40:59 +02:00
pat_rbtree.c x86/mm/pat: Convert to pr_*() usage 2015-05-27 14:40:59 +02:00
pat.c x86/mm/pat: Extend set_page_memtype() to support Write-Through type 2015-06-07 15:28:59 +02:00
pf_in.c
pf_in.h
pgtable_32.c x86: Remove set_pmd_pfn 2014-09-01 10:15:31 +02:00
pgtable.c x86/mm/mtrr: Enhance MTRR checks in kernel mapping helpers 2015-05-27 14:40:58 +02:00
physaddr.c
physaddr.h
setup_nx.c
srat.c x86/mm/srat: Print non-volatile flag in SRAT 2015-09-02 09:33:25 +02:00
testmmiotrace.c
tlb.c x86, mm: trace when an IPI is about to be sent 2015-09-04 16:54:41 -07:00