|
@@ -846,7 +846,12 @@ static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
|
|
|
|
|
|
static inline int p4d_bad(p4d_t p4d)
|
|
static inline int p4d_bad(p4d_t p4d)
|
|
{
|
|
{
|
|
- return (p4d_flags(p4d) & ~(_KERNPG_TABLE | _PAGE_USER)) != 0;
|
|
|
|
|
|
+ unsigned long ignore_flags = _KERNPG_TABLE | _PAGE_USER;
|
|
|
|
+
|
|
|
|
+ if (IS_ENABLED(CONFIG_PAGE_TABLE_ISOLATION))
|
|
|
|
+ ignore_flags |= _PAGE_NX;
|
|
|
|
+
|
|
|
|
+ return (p4d_flags(p4d) & ~ignore_flags) != 0;
|
|
}
|
|
}
|
|
#endif /* CONFIG_PGTABLE_LEVELS > 3 */
|
|
#endif /* CONFIG_PGTABLE_LEVELS > 3 */
|
|
|
|
|
|
@@ -880,7 +885,12 @@ static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address)
|
|
|
|
|
|
static inline int pgd_bad(pgd_t pgd)
|
|
static inline int pgd_bad(pgd_t pgd)
|
|
{
|
|
{
|
|
- return (pgd_flags(pgd) & ~_PAGE_USER) != _KERNPG_TABLE;
|
|
|
|
|
|
+ unsigned long ignore_flags = _PAGE_USER;
|
|
|
|
+
|
|
|
|
+ if (IS_ENABLED(CONFIG_PAGE_TABLE_ISOLATION))
|
|
|
|
+ ignore_flags |= _PAGE_NX;
|
|
|
|
+
|
|
|
|
+ return (pgd_flags(pgd) & ~ignore_flags) != _KERNPG_TABLE;
|
|
}
|
|
}
|
|
|
|
|
|
static inline int pgd_none(pgd_t pgd)
|
|
static inline int pgd_none(pgd_t pgd)
|