linux/arch
Hong H. Pham 21261e510c powerpc: Fix PTE page address mismatch in pgtable ctor/dtor
commit cf77ee5436 upstream.

In pte_alloc_one(), pgtable_page_ctor() is passed an address that has
not been converted by page_address() to the newly allocated PTE page.

When the PTE is freed, __pte_free_tlb() calls pgtable_page_dtor()
with an address to the PTE page that has been converted by page_address().
The mismatch in the PTE's page address causes pgtable_page_dtor() to access
invalid memory, so resources for that PTE (such as the page lock) is not
properly cleaned up.

On PPC32, only SMP kernels are affected.

On PPC64, only SMP kernels with 4K page size are affected.

This bug was introduced by commit d614bb0412
"powerpc: Move the pte free routines from common header".

On a preempt-rt kernel, a spinlock is dynamically allocated for each
PTE in pgtable_page_ctor().  When the PTE is freed, calling
pgtable_page_dtor() with a mismatched page address causes a memory leak,
as the pointer to the PTE's spinlock is bogus.

On mainline, there isn't any immediately obvious symptoms, but the
problem still exists here.

Fixes: d614bb0412 "powerpc: Move the pte free routes from common header"
Cc: Paul Mackerras <paulus@samba.org>
Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Hong H. Pham <hong.pham@windriver.com>
Reviewed-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2013-12-20 07:45:09 -08:00
..
alpha Removal of GENERIC_GPIO for v3.10 2013-05-09 09:59:16 -07:00
arc ARC: Incorrect mm reference used in vmalloc fault handler 2013-11-13 12:05:32 +09:00
arm ARM: 7913/1: fix framepointer check in unwind_frame 2013-12-20 07:45:07 -08:00
arm64 arm64: perf: fix ARMv8 EVTYPE_MASK to include NSH bit 2013-09-26 17:18:03 -07:00
avr32 avr32: fix out-of-range jump in large kernels 2013-12-04 10:57:05 -08:00
blackfin blackfin updates for Linux 3.10 2013-05-10 07:21:16 -07:00
c6x arch: c6x: mm: include "asm/uaccess.h" to pass compiling 2013-07-21 18:21:29 -07:00
cris cris: media platform drivers: fix build 2013-11-29 11:11:53 -08:00
frv Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2013-05-01 14:08:52 -07:00
h8300 We get rid of the general module prefix confusion with a binary config option, 2013-05-05 10:58:06 -07:00
hexagon Removal of GENERIC_GPIO for v3.10 2013-05-09 09:59:16 -07:00
ia64 exec/ptrace: fix get_dumpable() incorrect tests 2013-11-29 11:11:44 -08:00
m32r Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2013-05-01 14:08:52 -07:00
m68k m68k/atari: ARAnyM - Fix NatFeat module support 2013-08-20 08:43:05 -07:00
metag metag: fix mm/hugetlb.c build breakage 2013-06-19 06:23:34 -10:00
microblaze microblaze: fix clone syscall 2013-08-20 08:43:02 -07:00
mips MIPS: DMA: For BMIPS5000 cores flush region just like non-coherent R10000 2013-12-20 07:45:06 -08:00
mn10300 mn10300: Use early_param() to parse "mem=" parameter 2013-06-28 16:53:03 +01:00
openrisc Removal of GENERIC_GPIO for v3.10 2013-05-09 09:59:16 -07:00
parisc parisc: fix mmap(MAP_FIXED|MAP_SHARED) to already mmapped address 2013-12-11 22:36:27 -08:00
powerpc powerpc: Fix PTE page address mismatch in pgtable ctor/dtor 2013-12-20 07:45:09 -08:00
s390 crypto: s390 - Fix aes-xts parameter corruption 2013-12-11 22:36:26 -08:00
score score: remove redundant kcore_list entries 2013-05-25 10:27:27 -07:00
sh Fix TLB gather virtual address range invalidation corner cases 2013-08-20 08:43:05 -07:00
sparc compiler/gcc4: Add quirk for 'asm goto' miscompilation bug 2013-10-18 07:45:45 -07:00
tile tile: use a more conservative __my_cpu_offset in CONFIG_PREEMPT 2013-10-13 16:08:34 -07:00
um uml: check length in exitcode_proc_write() 2013-11-13 12:05:33 +09:00
unicore32 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal 2013-05-10 09:21:05 -07:00
x86 KVM: x86: fix guest-initiated crash with x2apic (CVE-2013-6376) 2013-12-20 07:45:07 -08:00
xtensa xtensa: don't use alternate signal stack on threads 2013-11-13 12:05:33 +09:00
.gitignore
Kconfig microblaze: fix clone syscall 2013-08-20 08:43:02 -07:00