Messages in this thread | | | Date | Fri, 23 Apr 2021 13:25:22 +0300 | From | "Kirill A. Shutemov" <> | Subject | Re: [PATCH v25 19/30] mm: Update can_follow_write_pte() for shadow stack |
| |
On Thu, Apr 15, 2021 at 03:14:08PM -0700, Yu-cheng Yu wrote: > Can_follow_write_pte() ensures a read-only page is COWed by checking the > FOLL_COW flag, and uses pte_dirty() to validate the flag is still valid. > > Like a writable data page, a shadow stack page is writable, and becomes > read-only during copy-on-write, but it is always dirty. Thus, in the > can_follow_write_pte() check, it belongs to the writable page case and > should be excluded from the read-only page pte_dirty() check. Apply > the same changes to can_follow_write_pmd(). > > While at it, also split the long line into smaller ones. > > Signed-off-by: Yu-cheng Yu <yu-cheng.yu@intel.com> > Cc: Kees Cook <keescook@chromium.org> > Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> > --- > v25: > - Split long line into smaller ones. > v24: > - Change arch_shadow_stack_mapping() to is_shadow_stack_mapping(). > > mm/gup.c | 16 ++++++++++++---- > mm/huge_memory.c | 16 ++++++++++++---- > 2 files changed, 24 insertions(+), 8 deletions(-) > > diff --git a/mm/gup.c b/mm/gup.c > index ef7d2da9f03f..f2813cf4d07b 100644 > --- a/mm/gup.c > +++ b/mm/gup.c > @@ -356,10 +356,18 @@ static int follow_pfn_pte(struct vm_area_struct *vma, unsigned long address, > * FOLL_FORCE can write to even unwritable pte's, but only > * after we've gone through a COW cycle and they are dirty. > */ > -static inline bool can_follow_write_pte(pte_t pte, unsigned int flags) > +static inline bool can_follow_write_pte(pte_t pte, unsigned int flags, > + vm_flags_t vm_flags) > {
It might be cleaner to pass down vma pointer and dereference it within the function: can_follow_write_pte(vma, pte, gup_flags).
Otherwise looks good to me:
Reviewed-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
-- Kirill A. Shutemov
| |