|
@@ -205,7 +205,7 @@ static pmd_t *pti_user_pagetable_walk_pmd(unsigned long address)
|
|
|
BUILD_BUG_ON(p4d_large(*p4d) != 0);
|
|
|
if (p4d_none(*p4d)) {
|
|
|
unsigned long new_pud_page = __get_free_page(gfp);
|
|
|
- if (!new_pud_page)
|
|
|
+ if (WARN_ON_ONCE(!new_pud_page))
|
|
|
return NULL;
|
|
|
|
|
|
set_p4d(p4d, __p4d(_KERNPG_TABLE | __pa(new_pud_page)));
|
|
@@ -219,7 +219,7 @@ static pmd_t *pti_user_pagetable_walk_pmd(unsigned long address)
|
|
|
}
|
|
|
if (pud_none(*pud)) {
|
|
|
unsigned long new_pmd_page = __get_free_page(gfp);
|
|
|
- if (!new_pmd_page)
|
|
|
+ if (WARN_ON_ONCE(!new_pmd_page))
|
|
|
return NULL;
|
|
|
|
|
|
set_pud(pud, __pud(_KERNPG_TABLE | __pa(new_pmd_page)));
|
|
@@ -241,9 +241,13 @@ static pmd_t *pti_user_pagetable_walk_pmd(unsigned long address)
|
|
|
static __init pte_t *pti_user_pagetable_walk_pte(unsigned long address)
|
|
|
{
|
|
|
gfp_t gfp = (GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO);
|
|
|
- pmd_t *pmd = pti_user_pagetable_walk_pmd(address);
|
|
|
+ pmd_t *pmd;
|
|
|
pte_t *pte;
|
|
|
|
|
|
+ pmd = pti_user_pagetable_walk_pmd(address);
|
|
|
+ if (!pmd)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
/* We can't do anything sensible if we hit a large mapping. */
|
|
|
if (pmd_large(*pmd)) {
|
|
|
WARN_ON(1);
|