| From 14235052eb9c2787fe975a568b2cc02fb45e87db Mon Sep 17 00:00:00 2001 |
| From: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com> |
| Date: Tue, 28 May 2019 11:06:25 +0530 |
| Subject: [PATCH] powerpc/mm/hugetlb: Fix kernel crash if we fail to allocate |
| page table caches |
| |
| commit 5d49275a27310233964fc3edc8dd097a094ce338 upstream. |
| |
| We only check for hugetlb allocations, because with hugetlb we do conditional |
| registration. For PGD/PUD/PMD levels we register them always in |
| pgtable_cache_init. |
| |
| Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c |
| index 1f24b768daa0..d34540479b1a 100644 |
| --- a/arch/powerpc/mm/hugetlbpage.c |
| +++ b/arch/powerpc/mm/hugetlbpage.c |
| @@ -61,12 +61,17 @@ static int __hugepte_alloc(struct mm_struct *mm, hugepd_t *hpdp, |
| num_hugepd = 1; |
| } |
| |
| + if (!cachep) { |
| + WARN_ONCE(1, "No page table cache created for hugetlb tables"); |
| + return -ENOMEM; |
| + } |
| + |
| new = kmem_cache_alloc(cachep, pgtable_gfp_flags(mm, GFP_KERNEL)); |
| |
| BUG_ON(pshift > HUGEPD_SHIFT_MASK); |
| BUG_ON((unsigned long)new & HUGEPD_SHIFT_MASK); |
| |
| - if (! new) |
| + if (!new) |
| return -ENOMEM; |
| |
| /* |
| -- |
| 2.7.4 |
| |