From 77d0f838cbdff4a5c3fa627fc9b0d6b1f492958b Mon Sep 17 00:00:00 2001 From: Igor Pecovnik Date: Wed, 26 Oct 2016 10:48:04 +0200 Subject: [PATCH] Dirty cow fixed upstream. Removing --- .../dirtyCOW-fix-for-3.14.79.patch | 51 ------------------- 1 file changed, 51 deletions(-) delete mode 100644 patch/kernel/odroidc2-default/dirtyCOW-fix-for-3.14.79.patch diff --git a/patch/kernel/odroidc2-default/dirtyCOW-fix-for-3.14.79.patch b/patch/kernel/odroidc2-default/dirtyCOW-fix-for-3.14.79.patch deleted file mode 100644 index 3f8984b364..0000000000 --- a/patch/kernel/odroidc2-default/dirtyCOW-fix-for-3.14.79.patch +++ /dev/null @@ -1,51 +0,0 @@ -diff --git a/include/linux/mm.h b/include/linux/mm.h -index 79aa518c16a3..5676a670429e 100644 ---- a/include/linux/mm.h -+++ b/include/linux/mm.h -@@ -1749,6 +1749,7 @@ static inline struct page *follow_page(struct vm_area_struct *vma, - #define FOLL_HWPOISON 0x100 /* check page is hwpoisoned */ - #define FOLL_NUMA 0x200 /* force NUMA hinting page fault */ - #define FOLL_MIGRATION 0x400 /* wait for page to replace migration entry */ -+#define FOLL_COW 0x4000 /* internal GUP flag */ - - typedef int (*pte_fn_t)(pte_t *pte, pgtable_t token, unsigned long addr, - void *data); -diff --git a/mm/memory.c b/mm/memory.c -index 61926356c09a..a0c9c6cb59d1 100644 ---- a/mm/memory.c -+++ b/mm/memory.c -@@ -1441,6 +1441,16 @@ int zap_vma_ptes(struct vm_area_struct *vma, unsigned long address, - } - EXPORT_SYMBOL_GPL(zap_vma_ptes); - -+/* -+ * 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) -+{ -+ return pte_write(pte) || -+ ((flags & FOLL_FORCE) && (flags & FOLL_COW) && pte_dirty(pte)); -+} -+ - /** - * follow_page_mask - look up a page descriptor from a user-virtual address - * @vma: vm_area_struct mapping @address -@@ -1550,7 +1560,7 @@ split_fallthrough: - } - if ((flags & FOLL_NUMA) && pte_numa(pte)) - goto no_page; -- if ((flags & FOLL_WRITE) && !pte_write(pte)) -+ if ((flags & FOLL_WRITE) && !can_follow_write_pte(pte, flags)) - goto unlock; - - page = vm_normal_page(vma, address, pte); -@@ -1858,7 +1868,7 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, - */ - if ((ret & VM_FAULT_WRITE) && - !(vma->vm_flags & VM_WRITE)) -- foll_flags &= ~FOLL_WRITE; -+ foll_flags |= FOLL_COW; - - cond_resched(); - }