Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1233461
| From | Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 4.1 037/159] powerpc/mm: Fix pte_pagesize_index() crash on 4K w/64K hash |
| Date | 2015-09-26 23:50 +0200 |
| Message-ID | <qd5vY-3Ss-29@gated-at.bofh.it> (permalink) |
| References | <qd4Tf-384-5@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
4.1-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Ellerman <mpe@ellerman.id.au>
commit 74b5037baa2011a2799e2c43adde7d171b072f9e upstream.
The powerpc kernel can be built to have either a 4K PAGE_SIZE or a 64K
PAGE_SIZE.
However when built with a 4K PAGE_SIZE there is an additional config
option which can be enabled, PPC_HAS_HASH_64K, which means the kernel
also knows how to hash a 64K page even though the base PAGE_SIZE is 4K.
This is used in one obscure configuration, to support 64K pages for SPU
local store on the Cell processor when the rest of the kernel is using
4K pages.
In this configuration, pte_pagesize_index() is defined to just pass
through its arguments to get_slice_psize(). However pte_pagesize_index()
is called for both user and kernel addresses, whereas get_slice_psize()
only knows how to handle user addresses.
This has been broken forever, however until recently it happened to
work. That was because in get_slice_psize() the large kernel address
would cause the right shift of the slice mask to return zero.
However in commit 7aa0727f3302 ("powerpc/mm: Increase the slice range to
64TB"), the get_slice_psize() code was changed so that instead of a
right shift we do an array lookup based on the address. When passed a
kernel address this means we index way off the end of the slice array
and return random junk.
That is only fatal if we happen to hit something non-zero, but when we
do return a non-zero value we confuse the MMU code and eventually cause
a check stop.
This fix is ugly, but simple. When we're called for a kernel address we
return 4K, which is always correct in this configuration, otherwise we
use the slice mask.
Fixes: 7aa0727f3302 ("powerpc/mm: Increase the slice range to 64TB")
Reported-by: Cyril Bur <cyrilbur@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Reviewed-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/powerpc/include/asm/pgtable-ppc64.h | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
--- a/arch/powerpc/include/asm/pgtable-ppc64.h
+++ b/arch/powerpc/include/asm/pgtable-ppc64.h
@@ -135,7 +135,19 @@
#define pte_iterate_hashed_end() } while(0)
#ifdef CONFIG_PPC_HAS_HASH_64K
-#define pte_pagesize_index(mm, addr, pte) get_slice_psize(mm, addr)
+/*
+ * We expect this to be called only for user addresses or kernel virtual
+ * addresses other than the linear mapping.
+ */
+#define pte_pagesize_index(mm, addr, pte) \
+ ({ \
+ unsigned int psize; \
+ if (is_kernel_addr(addr)) \
+ psize = MMU_PAGE_4K; \
+ else \
+ psize = get_slice_psize(mm, addr); \
+ psize; \
+ })
#else
#define pte_pagesize_index(mm, addr, pte) MMU_PAGE_4K
#endif
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 4.1 000/159] 4.1.9-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 087/159] md/raid10: always set reshape_safe when initializing reshape_position. Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 090/159] iommu/io-pgtable-arm: Unmap and free table when overwriting with block Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 042/159] powerpc/mm: Recompute hash value after a failed update Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 040/159] crypto: vmx - Adding enable_kernel_vsx() to access VSX instructions Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 044/159] Add radeon suspend/resume quirk for HP Compaq dc5750. Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 078/159] parisc: Filter out spurious interrupts in PA-RISC irq handler Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 037/159] powerpc/mm: Fix pte_pagesize_index() crash on 4K w/64K hash Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 062/159] NFS41/flexfiles: update inode after write finishes Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 038/159] powerpc/rtas: Introduce rtas_get_sensor_fast() for IRQ handlers Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 021/159] arm64: head.S: initialise mdcr_el2 in el2_setup Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 015/159] Revert "ext4: remove block_device_ejected" Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 066/159] NFSv4.1: Fix a protocol issue with CLOSE stateids Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 031/159] ALSA: hda - Add some FIXUP quirks for white noise on Dell laptop. Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 029/159] ALSA: hda - Enable headphone jack detect on old Fujitsu laptops Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 065/159] NFSv4.1/flexfiles: Fix a protocol error in layoutreturn Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 020/159] arm64: compat: fix vfp save/restore across signal handlers in big-endian Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 064/159] NFS41/flexfiles: zero out DS write wcc Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 039/159] powerpc: Uncomment and make enable_kernel_vsx() routine available Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 067/159] Revert "NFSv4: Remove incorrect check in can_open_delegated()" Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 035/159] powerpc/eeh: Probe after unbalanced kref check Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 030/159] ALSA: hda - Use ALC880_FIXUP_FUJITSU for FSC Amilo M1437 Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 089/159] iommu/fsl: Really fix init section(s) content Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 041/159] powerpc/boot: Specify ABI v2 when building an LE boot wrapper Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 012/159] cxl: Remove racy attempt to force EEH invocation in reset Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 063/159] NFSv4: Force a post-op attribute update when holding a delegation Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 036/159] powerpc/eeh: Fix fenced PHB caused by eeh_slot_error_detail() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-26 23:50 +0200
[PATCH 4.1 011/159] mac80211: enable assoc check for mesh interfaces Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 00:00 +0200
[PATCH 4.1 005/159] rtlwifi: rtl8192cu: Add new device ID Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 00:00 +0200
[PATCH 4.1 013/159] cxl: Fix unbalanced pci_dev_get in cxl_probe Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 00:00 +0200
[PATCH 4.1 008/159] tg3: Fix temperature reporting Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 00:00 +0200
[PATCH 4.1 010/159] MIPS: math-emu: Emulate missing BC1{EQ,NE}Z instructions Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 00:00 +0200
[PATCH 4.1 007/159] igb: Fix oops caused by missing queue pairing Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 00:00 +0200
[PATCH 4.1 001/159] NFC: st21nfca: fix use of uninitialized variables in error path Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 00:00 +0200
[PATCH 4.1 018/159] of/fdt: make memblock maximum physical address arch configurable Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 00:00 +0200
[PATCH 4.1 014/159] ext4: dont manipulate recovery flag when freezing no-journal fs Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 00:00 +0200
[PATCH 4.1 006/159] rtlwifi: rtl8821ae: Fix an expression that is always false Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 00:00 +0200
[PATCH 4.1 004/159] unshare: Unsharing a thread does not require unsharing a vm Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 00:00 +0200
[PATCH 4.1 017/159] arm64: flush FP/SIMD state correctly after execve() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 00:00 +0200
[PATCH 4.1 003/159] blk-mq: fix buffer overflow when reading sysfs file of pending Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 00:00 +0200
[PATCH 4.1 002/159] nfc: nci: hci: Add check on skb nci_hci_send_cmd parameter Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 00:00 +0200
Re: [PATCH 4.1 000/159] 4.1.9-stable review (build error) Guenter Roeck <linux@roeck-us.net> - 2015-09-27 02:40 +0200
[PATCH] cxl: Don't remove AFUs/vPHBs in cxl_reset Sudip Mukherjee <sudipm.mukherjee@gmail.com> - 2015-09-27 08:50 +0200
Re: [PATCH] cxl: Don't remove AFUs/vPHBs in cxl_reset Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 17:40 +0200
Re: [PATCH] cxl: Don't remove AFUs/vPHBs in cxl_reset Daniel Axtens <dja@axtens.net> - 2015-09-29 07:30 +0200
Re: [PATCH 4.1 000/159] 4.1.9-stable review Guenter Roeck <linux@roeck-us.net> - 2015-09-27 21:20 +0200
Re: [PATCH 4.1 000/159] 4.1.9-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-27 21:40 +0200
Re: [PATCH 4.1 000/159] 4.1.9-stable review Sudip Mukherjee <sudipm.mukherjee@gmail.com> - 2015-09-28 07:10 +0200
Re: [PATCH 4.1 000/159] 4.1.9-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-28 16:30 +0200
Re: [PATCH 4.1 000/159] 4.1.9-stable review Shuah Khan <shuahkh@osg.samsung.com> - 2015-09-28 19:40 +0200
Re: [PATCH 4.1 000/159] 4.1.9-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2015-09-28 23:40 +0200
Re: [PATCH 4.1 000/159] 4.1.9-stable review "Andre Tomt (LKML)" <lkml@tomt.net> - 2015-09-29 03:00 +0200
csiph-web