|
@@ -429,6 +429,19 @@ static inline void set_compound_order(struct page *page, unsigned long order)
|
|
page[1].lru.prev = (void *)order;
|
|
page[1].lru.prev = (void *)order;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * Do pte_mkwrite, but only if the vma says VM_WRITE. We do this when
|
|
|
|
+ * servicing faults for write access. In the normal case, do always want
|
|
|
|
+ * pte_mkwrite. But get_user_pages can cause write faults for mappings
|
|
|
|
+ * that do not have writing enabled, when used by access_process_vm.
|
|
|
|
+ */
|
|
|
|
+static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma)
|
|
|
|
+{
|
|
|
|
+ if (likely(vma->vm_flags & VM_WRITE))
|
|
|
|
+ pte = pte_mkwrite(pte);
|
|
|
|
+ return pte;
|
|
|
|
+}
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Multiple processes may "see" the same page. E.g. for untouched
|
|
* Multiple processes may "see" the same page. E.g. for untouched
|
|
* mappings of /dev/null, all processes see the same page full of
|
|
* mappings of /dev/null, all processes see the same page full of
|