--- v6
+++ v8
@@ -19,13 +19,14 @@
protected by the pte_modify() call. Apply the same changes to
pmd_modify().
-Reviewed-by: Kees Cook <keescook@chromium.org>
-Tested-by: Pengfei Xu <pengfei.xu@intel.com>
-Tested-by: John Allen <john.allen@amd.com>
Co-developed-by: Yu-cheng Yu <yu-cheng.yu@intel.com>
Signed-off-by: Yu-cheng Yu <yu-cheng.yu@intel.com>
Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
-
+Reviewed-by: Kees Cook <keescook@chromium.org>
+Acked-by: Mike Rapoport (IBM) <rppt@kernel.org>
+Tested-by: Pengfei Xu <pengfei.xu@intel.com>
+Tested-by: John Allen <john.allen@amd.com>
+Tested-by: Kees Cook <keescook@chromium.org>
---
v6:
- Rename _PAGE_COW to _PAGE_SAVED_DIRTY (David Hildenbrand)
@@ -40,7 +41,7 @@
1 file changed, 145 insertions(+), 23 deletions(-)
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
-index e5f00c077039..292a3b75d7fa 100644
+index 349fcab0405a..05dfdbdf96b4 100644
--- a/arch/x86/include/asm/pgtable.h
+++ b/arch/x86/include/asm/pgtable.h
@@ -124,9 +124,17 @@ extern pmdval_t early_pmd_flags;
@@ -120,16 +121,7 @@
}
#define pud_write pud_write
-@@ -375,7 +400,7 @@ static inline pte_t pte_clear_uffd_wp(pte_t pte)
-
- static inline pte_t pte_mkclean(pte_t pte)
- {
-- return pte_clear_flags(pte, _PAGE_DIRTY);
-+ return pte_clear_flags(pte, _PAGE_DIRTY_BITS);
- }
-
- static inline pte_t pte_mkold(pte_t pte)
-@@ -385,7 +410,16 @@ static inline pte_t pte_mkold(pte_t pte)
+@@ -342,7 +367,16 @@ static inline pte_t pte_clear_saveddirty(pte_t pte)
static inline pte_t pte_wrprotect(pte_t pte)
{
@@ -146,7 +138,16 @@
+ return pte;
}
- static inline pte_t pte_mkexec(pte_t pte)
+ #ifdef CONFIG_HAVE_ARCH_USERFAULTFD_WP
+@@ -380,7 +414,7 @@ static inline pte_t pte_clear_uffd_wp(pte_t pte)
+
+ static inline pte_t pte_mkclean(pte_t pte)
+ {
+- return pte_clear_flags(pte, _PAGE_DIRTY);
++ return pte_clear_flags(pte, _PAGE_DIRTY_BITS);
+ }
+
+ static inline pte_t pte_mkold(pte_t pte)
@@ -395,7 +429,19 @@ static inline pte_t pte_mkexec(pte_t pte)
static inline pte_t pte_mkdirty(pte_t pte)
@@ -182,13 +183,7 @@
}
static inline pte_t pte_mkhuge(pte_t pte)
-@@ -503,17 +554,36 @@ static inline pmd_t pmd_mkold(pmd_t pmd)
-
- static inline pmd_t pmd_mkclean(pmd_t pmd)
- {
-- return pmd_clear_flags(pmd, _PAGE_DIRTY);
-+ return pmd_clear_flags(pmd, _PAGE_DIRTY_BITS);
- }
+@@ -481,7 +532,15 @@ static inline pmd_t pmd_clear_saveddirty(pmd_t pmd)
static inline pmd_t pmd_wrprotect(pmd_t pmd)
{
@@ -202,6 +197,15 @@
+ if (pmd_dirty(pmd))
+ pmd = pmd_mksaveddirty(pmd);
+ return pmd;
+ }
+
+ #ifdef CONFIG_HAVE_ARCH_USERFAULTFD_WP
+@@ -508,12 +567,23 @@ static inline pmd_t pmd_mkold(pmd_t pmd)
+
+ static inline pmd_t pmd_mkclean(pmd_t pmd)
+ {
+- return pmd_clear_flags(pmd, _PAGE_DIRTY);
++ return pmd_clear_flags(pmd, _PAGE_DIRTY_BITS);
}
static inline pmd_t pmd_mkdirty(pmd_t pmd)