summaryrefslogtreecommitdiff
path: root/sys-kernel/linux-image-redcore/files/uksm-for-linux-hardened.patch
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2018-08-27 12:00:43 +0100
committerV3n3RiX <venerix@redcorelinux.org>2018-08-27 12:00:43 +0100
commit86dc0f17c1c68e91d62ac309d107694860cbb711 (patch)
treef815a8e8c6cdeec57466f922b2b77a4c44005cb2 /sys-kernel/linux-image-redcore/files/uksm-for-linux-hardened.patch
parent22ce99f256f7154dd8e65eb62a778cb9220f84d0 (diff)
sys-kernel/linux-{image,sources}-redcore : version bump
Diffstat (limited to 'sys-kernel/linux-image-redcore/files/uksm-for-linux-hardened.patch')
-rw-r--r--sys-kernel/linux-image-redcore/files/uksm-for-linux-hardened.patch190
1 files changed, 98 insertions, 92 deletions
diff --git a/sys-kernel/linux-image-redcore/files/uksm-for-linux-hardened.patch b/sys-kernel/linux-image-redcore/files/uksm-for-linux-hardened.patch
index 733618de..d973274a 100644
--- a/sys-kernel/linux-image-redcore/files/uksm-for-linux-hardened.patch
+++ b/sys-kernel/linux-image-redcore/files/uksm-for-linux-hardened.patch
@@ -1,18 +1,20 @@
diff -Nur a/Documentation/vm/00-INDEX b/Documentation/vm/00-INDEX
---- a/Documentation/vm/00-INDEX 2018-04-08 13:29:52.000000000 +0100
-+++ b/Documentation/vm/00-INDEX 2018-04-11 22:47:44.597845750 +0100
-@@ -20,6 +20,8 @@
- - description of the idle page tracking feature.
- ksm.txt
+--- a/Documentation/vm/00-INDEX 2018-08-24 12:04:51.000000000 +0100
++++ b/Documentation/vm/00-INDEX 2018-08-27 10:44:36.340467187 +0100
+@@ -18,7 +18,9 @@
+ - explains what hwpoison is
+ ksm.rst
- how to use the Kernel Samepage Merging feature.
+-mmu_notifier.rst
+uksm.txt
+ - Introduction to Ultra KSM
- numa
++mmu_notifier.txt
+ - a note about clearing pte/pmd and mmu notifications
+ numa.rst
- information about NUMA specific code in the Linux vm.
- numa_memory_policy.txt
diff -Nur a/Documentation/vm/uksm.txt b/Documentation/vm/uksm.txt
--- a/Documentation/vm/uksm.txt 1970-01-01 01:00:00.000000000 +0100
-+++ b/Documentation/vm/uksm.txt 2018-04-11 22:47:44.597845750 +0100
++++ b/Documentation/vm/uksm.txt 2018-08-27 10:44:36.340467187 +0100
@@ -0,0 +1,61 @@
+The Ultra Kernel Samepage Merging feature
+----------------------------------------------
@@ -76,8 +78,8 @@ diff -Nur a/Documentation/vm/uksm.txt b/Documentation/vm/uksm.txt
+2016-09-10 UKSM 0.1.2.5 Fix a bug in dedup ratio calculation.
+2017-02-26 UKSM 0.1.2.6 Fix a bug in hugetlbpage handling and a race bug with page migration.
diff -Nur a/fs/exec.c b/fs/exec.c
---- a/fs/exec.c 2018-04-11 22:44:55.743399844 +0100
-+++ b/fs/exec.c 2018-04-11 22:51:54.986922932 +0100
+--- a/fs/exec.c 2018-08-27 10:42:48.184976507 +0100
++++ b/fs/exec.c 2018-08-27 10:47:39.413380371 +0100
@@ -63,6 +63,7 @@
#include <linux/compat.h>
#include <linux/vmalloc.h>
@@ -86,7 +88,7 @@ diff -Nur a/fs/exec.c b/fs/exec.c
#include <linux/uaccess.h>
#include <asm/mmu_context.h>
-@@ -1377,6 +1378,7 @@
+@@ -1381,6 +1382,7 @@
/* An exec changes our domain. We are no longer part of the thread
group */
current->self_exec_id++;
@@ -95,9 +97,9 @@ diff -Nur a/fs/exec.c b/fs/exec.c
}
EXPORT_SYMBOL(setup_new_exec);
diff -Nur a/fs/proc/meminfo.c b/fs/proc/meminfo.c
---- a/fs/proc/meminfo.c 2018-04-08 13:29:52.000000000 +0100
-+++ b/fs/proc/meminfo.c 2018-04-11 22:47:44.597845750 +0100
-@@ -118,6 +118,10 @@
+--- a/fs/proc/meminfo.c 2018-08-24 12:04:51.000000000 +0100
++++ b/fs/proc/meminfo.c 2018-08-27 10:44:36.341467220 +0100
+@@ -105,6 +105,10 @@
global_zone_page_state(NR_KERNEL_STACK_KB));
show_val_kb(m, "PageTables: ",
global_zone_page_state(NR_PAGETABLE));
@@ -109,9 +111,9 @@ diff -Nur a/fs/proc/meminfo.c b/fs/proc/meminfo.c
show_val_kb(m, "Quicklists: ", quicklist_total_size());
#endif
diff -Nur a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
---- a/include/asm-generic/pgtable.h 2018-04-08 13:29:52.000000000 +0100
-+++ b/include/asm-generic/pgtable.h 2018-04-11 22:47:44.598845782 +0100
-@@ -781,12 +781,25 @@
+--- a/include/asm-generic/pgtable.h 2018-08-24 12:04:51.000000000 +0100
++++ b/include/asm-generic/pgtable.h 2018-08-27 10:44:36.341467220 +0100
+@@ -817,12 +817,25 @@
extern void untrack_pfn_moved(struct vm_area_struct *vma);
#endif
@@ -138,7 +140,7 @@ diff -Nur a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
}
#define my_zero_pfn(addr) page_to_pfn(ZERO_PAGE(addr))
-@@ -795,7 +808,7 @@
+@@ -831,7 +844,7 @@
static inline int is_zero_pfn(unsigned long pfn)
{
extern unsigned long zero_pfn;
@@ -148,8 +150,8 @@ diff -Nur a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
static inline unsigned long my_zero_pfn(unsigned long addr)
diff -Nur a/include/linux/ksm.h b/include/linux/ksm.h
---- a/include/linux/ksm.h 2018-04-08 13:29:52.000000000 +0100
-+++ b/include/linux/ksm.h 2018-04-11 22:47:44.598845782 +0100
+--- a/include/linux/ksm.h 2018-08-24 12:04:51.000000000 +0100
++++ b/include/linux/ksm.h 2018-08-27 10:44:36.341467220 +0100
@@ -21,21 +21,6 @@
#ifdef CONFIG_KSM
int ksm_madvise(struct vm_area_struct *vma, unsigned long start,
@@ -170,9 +172,9 @@ diff -Nur a/include/linux/ksm.h b/include/linux/ksm.h
- __ksm_exit(mm);
-}
- static inline struct stable_node *page_stable_node(struct page *page)
- {
-@@ -65,6 +50,33 @@
+ /*
+ * When do_swap_page() first faults in from swap what used to be a KSM page,
+@@ -54,6 +39,46 @@
void rmap_walk_ksm(struct page *page, struct rmap_walk_control *rwc);
void ksm_migrate_page(struct page *newpage, struct page *oldpage);
@@ -201,12 +203,25 @@ diff -Nur a/include/linux/ksm.h b/include/linux/ksm.h
+static inline void ksm_exit(struct mm_struct *mm)
+{
+}
++
++static inline void set_page_stable_node(struct page *page,
++ struct stable_node *stable_node)
++{
++ page->mapping = (void *)((unsigned long)stable_node | PAGE_MAPPING_KSM);
++}
++
++static inline struct stable_node *page_stable_node(struct page *page)
++{
++ return PageKsm(page) ? page_rmapping(page) : NULL;
++}
++
++
+#endif /* !CONFIG_UKSM */
+
#else /* !CONFIG_KSM */
static inline int ksm_fork(struct mm_struct *mm, struct mm_struct *oldmm)
-@@ -106,4 +118,6 @@
+@@ -89,4 +114,6 @@
#endif /* CONFIG_MMU */
#endif /* !CONFIG_KSM */
@@ -214,9 +229,9 @@ diff -Nur a/include/linux/ksm.h b/include/linux/ksm.h
+
#endif /* __LINUX_KSM_H */
diff -Nur a/include/linux/mm_types.h b/include/linux/mm_types.h
---- a/include/linux/mm_types.h 2018-04-08 13:29:52.000000000 +0100
-+++ b/include/linux/mm_types.h 2018-04-11 22:47:44.598845782 +0100
-@@ -333,6 +333,9 @@
+--- a/include/linux/mm_types.h 2018-08-24 12:04:51.000000000 +0100
++++ b/include/linux/mm_types.h 2018-08-27 10:44:36.342467252 +0100
+@@ -320,6 +320,9 @@
struct mempolicy *vm_policy; /* NUMA policy for the VMA */
#endif
struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
@@ -227,8 +242,8 @@ diff -Nur a/include/linux/mm_types.h b/include/linux/mm_types.h
struct core_thread {
diff -Nur a/include/linux/mmzone.h b/include/linux/mmzone.h
---- a/include/linux/mmzone.h 2018-04-08 13:29:52.000000000 +0100
-+++ b/include/linux/mmzone.h 2018-04-11 22:47:44.598845782 +0100
+--- a/include/linux/mmzone.h 2018-08-24 12:04:51.000000000 +0100
++++ b/include/linux/mmzone.h 2018-08-27 10:44:36.342467252 +0100
@@ -148,6 +148,9 @@
NR_ZSPAGES, /* allocated in zsmalloc */
#endif
@@ -239,7 +254,7 @@ diff -Nur a/include/linux/mmzone.h b/include/linux/mmzone.h
NR_VM_ZONE_STAT_ITEMS };
enum node_stat_item {
-@@ -866,7 +869,7 @@
+@@ -865,7 +868,7 @@
}
/**
@@ -250,7 +265,7 @@ diff -Nur a/include/linux/mmzone.h b/include/linux/mmzone.h
* @zone - pointer to struct zone variable
diff -Nur a/include/linux/sradix-tree.h b/include/linux/sradix-tree.h
--- a/include/linux/sradix-tree.h 1970-01-01 01:00:00.000000000 +0100
-+++ b/include/linux/sradix-tree.h 2018-04-11 22:47:44.599845814 +0100
++++ b/include/linux/sradix-tree.h 2018-08-27 10:44:36.343467284 +0100
@@ -0,0 +1,77 @@
+#ifndef _LINUX_SRADIX_TREE_H
+#define _LINUX_SRADIX_TREE_H
@@ -331,7 +346,7 @@ diff -Nur a/include/linux/sradix-tree.h b/include/linux/sradix-tree.h
+#endif /* _LINUX_SRADIX_TREE_H */
diff -Nur a/include/linux/uksm.h b/include/linux/uksm.h
--- a/include/linux/uksm.h 1970-01-01 01:00:00.000000000 +0100
-+++ b/include/linux/uksm.h 2018-04-11 22:47:44.599845814 +0100
++++ b/include/linux/uksm.h 2018-08-27 10:44:36.343467284 +0100
@@ -0,0 +1,149 @@
+#ifndef __LINUX_UKSM_H
+#define __LINUX_UKSM_H
@@ -483,18 +498,9 @@ diff -Nur a/include/linux/uksm.h b/include/linux/uksm.h
+#endif /* !CONFIG_UKSM */
+#endif /* __LINUX_UKSM_H */
diff -Nur a/kernel/fork.c b/kernel/fork.c
---- a/kernel/fork.c 2018-04-11 22:44:55.753400167 +0100
-+++ b/kernel/fork.c 2018-04-11 22:47:44.599845814 +0100
-@@ -453,7 +453,7 @@
- goto fail_nomem;
- charge = len;
- }
-- tmp = kmem_cache_alloc(vm_area_cachep, GFP_KERNEL);
-+ tmp = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
- if (!tmp)
- goto fail_nomem;
- *tmp = *mpnt;
-@@ -512,7 +512,7 @@
+--- a/kernel/fork.c 2018-08-27 10:42:48.208977282 +0100
++++ b/kernel/fork.c 2018-08-27 10:44:36.344467317 +0100
+@@ -542,7 +542,7 @@
__vma_link_rb(mm, tmp, rb_link, rb_parent);
rb_link = &tmp->vm_rb.rb_right;
rb_parent = &tmp->vm_rb;
@@ -504,20 +510,20 @@ diff -Nur a/kernel/fork.c b/kernel/fork.c
if (!(tmp->vm_flags & VM_WIPEONFORK))
retval = copy_page_range(mm, oldmm, mpnt);
diff -Nur a/lib/Makefile b/lib/Makefile
---- a/lib/Makefile 2018-04-08 13:29:52.000000000 +0100
-+++ b/lib/Makefile 2018-04-11 22:47:44.599845814 +0100
+--- a/lib/Makefile 2018-08-24 12:04:51.000000000 +0100
++++ b/lib/Makefile 2018-08-27 10:44:36.344467317 +0100
@@ -18,7 +18,7 @@
KCOV_INSTRUMENT_dynamic_debug.o := n
lib-y := ctype.o string.o vsprintf.o cmdline.o \
-- rbtree.o radix-tree.o dump_stack.o timerqueue.o\
-+ rbtree.o radix-tree.o sradix-tree.o dump_stack.o timerqueue.o\
+- rbtree.o radix-tree.o timerqueue.o\
++ rbtree.o radix-tree.o sradix-tree.o timerqueue.o\
idr.o int_sqrt.o extable.o \
sha1.o chacha20.o irq_regs.o argv_split.o \
flex_proportions.o ratelimit.o show_mem.o \
diff -Nur a/lib/sradix-tree.c b/lib/sradix-tree.c
--- a/lib/sradix-tree.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/lib/sradix-tree.c 2018-04-11 22:47:44.600845846 +0100
++++ b/lib/sradix-tree.c 2018-08-27 10:44:36.344467317 +0100
@@ -0,0 +1,476 @@
+#include <linux/errno.h>
+#include <linux/mm.h>
@@ -996,10 +1002,10 @@ diff -Nur a/lib/sradix-tree.c b/lib/sradix-tree.c
+ return 0;
+}
diff -Nur a/mm/Kconfig b/mm/Kconfig
---- a/mm/Kconfig 2018-04-11 22:44:55.761400426 +0100
-+++ b/mm/Kconfig 2018-04-11 22:47:44.600845846 +0100
-@@ -315,6 +315,32 @@
- See Documentation/vm/ksm.txt for more information: KSM is inactive
+--- a/mm/Kconfig 2018-08-27 10:42:48.219977637 +0100
++++ b/mm/Kconfig 2018-08-27 10:44:36.345467349 +0100
+@@ -308,6 +308,32 @@
+ See Documentation/vm/ksm.rst for more information: KSM is inactive
until a program has madvised that an area is MADV_MERGEABLE, and
root has set /sys/kernel/mm/ksm/run to 1 (if CONFIG_SYSFS is set).
+choice
@@ -1032,8 +1038,8 @@ diff -Nur a/mm/Kconfig b/mm/Kconfig
config DEFAULT_MMAP_MIN_ADDR
int "Low address space to protect from user allocation"
diff -Nur a/mm/Makefile b/mm/Makefile
---- a/mm/Makefile 2018-04-08 13:29:52.000000000 +0100
-+++ b/mm/Makefile 2018-04-11 22:47:44.600845846 +0100
+--- a/mm/Makefile 2018-08-24 12:04:51.000000000 +0100
++++ b/mm/Makefile 2018-08-27 10:44:36.345467349 +0100
@@ -65,7 +65,8 @@
obj-$(CONFIG_SPARSEMEM_VMEMMAP) += sparse-vmemmap.o
obj-$(CONFIG_SLOB) += slob.o
@@ -1045,8 +1051,8 @@ diff -Nur a/mm/Makefile b/mm/Makefile
obj-$(CONFIG_SLAB) += slab.o
obj-$(CONFIG_SLUB) += slub.o
diff -Nur a/mm/memory.c b/mm/memory.c
---- a/mm/memory.c 2018-04-08 13:29:52.000000000 +0100
-+++ b/mm/memory.c 2018-04-11 22:47:44.601845879 +0100
+--- a/mm/memory.c 2018-08-24 12:04:51.000000000 +0100
++++ b/mm/memory.c 2018-08-27 10:44:36.346467381 +0100
@@ -128,6 +128,25 @@
unsigned long highest_memmap_pfn __read_mostly;
@@ -1081,7 +1087,7 @@ diff -Nur a/mm/memory.c b/mm/memory.c
#if defined(SPLIT_RSS_COUNTING)
void sync_mm_rss(struct mm_struct *mm)
-@@ -1039,6 +1059,9 @@
+@@ -1035,6 +1055,9 @@
get_page(page);
page_dup_rmap(page, false);
rss[mm_counter(page)]++;
@@ -1091,7 +1097,7 @@ diff -Nur a/mm/memory.c b/mm/memory.c
} else if (pte_devmap(pte)) {
page = pte_page(pte);
-@@ -1052,6 +1075,8 @@
+@@ -1048,6 +1071,8 @@
page_dup_rmap(page, false);
rss[mm_counter(page)]++;
}
@@ -1100,7 +1106,7 @@ diff -Nur a/mm/memory.c b/mm/memory.c
}
out_set_pte:
-@@ -1321,8 +1346,10 @@
+@@ -1317,8 +1342,10 @@
ptent = ptep_get_and_clear_full(mm, addr, pte,
tlb->fullmm);
tlb_remove_tlb_entry(tlb, pte, addr);
@@ -1112,7 +1118,7 @@ diff -Nur a/mm/memory.c b/mm/memory.c
if (!PageAnon(page)) {
if (pte_dirty(ptent)) {
-@@ -2336,8 +2363,10 @@
+@@ -2360,8 +2387,10 @@
clear_page(kaddr);
kunmap_atomic(kaddr);
flush_dcache_page(dst);
@@ -1124,7 +1130,7 @@ diff -Nur a/mm/memory.c b/mm/memory.c
}
static gfp_t __get_fault_gfp_mask(struct vm_area_struct *vma)
-@@ -2486,6 +2515,7 @@
+@@ -2510,6 +2539,7 @@
vmf->address);
if (!new_page)
goto oom;
@@ -1132,7 +1138,7 @@ diff -Nur a/mm/memory.c b/mm/memory.c
} else {
new_page = alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma,
vmf->address);
-@@ -2512,7 +2542,9 @@
+@@ -2536,7 +2566,9 @@
mm_counter_file(old_page));
inc_mm_counter_fast(mm, MM_ANONPAGES);
}
@@ -1143,8 +1149,8 @@ diff -Nur a/mm/memory.c b/mm/memory.c
}
flush_cache_page(vma, vmf->address, pte_pfn(vmf->orig_pte));
diff -Nur a/mm/mmap.c b/mm/mmap.c
---- a/mm/mmap.c 2018-04-11 22:44:55.762400458 +0100
-+++ b/mm/mmap.c 2018-04-11 22:47:44.602845911 +0100
+--- a/mm/mmap.c 2018-08-27 10:42:48.220977669 +0100
++++ b/mm/mmap.c 2018-08-27 10:44:36.348467446 +0100
@@ -45,6 +45,7 @@
#include <linux/moduleparam.h>
#include <linux/pkeys.h>
@@ -1153,15 +1159,15 @@ diff -Nur a/mm/mmap.c b/mm/mmap.c
#include <linux/uaccess.h>
#include <asm/cacheflush.h>
-@@ -173,6 +174,7 @@
+@@ -182,6 +183,7 @@
if (vma->vm_file)
fput(vma->vm_file);
mpol_put(vma_policy(vma));
+ uksm_remove_vma(vma);
- kmem_cache_free(vm_area_cachep, vma);
+ vm_area_free(vma);
return next;
}
-@@ -699,9 +701,16 @@
+@@ -708,9 +710,16 @@
long adjust_next = 0;
int remove_next = 0;
@@ -1178,7 +1184,7 @@ diff -Nur a/mm/mmap.c b/mm/mmap.c
if (end >= next->vm_end) {
/*
* vma expands, overlapping all the next, and
-@@ -834,6 +843,7 @@
+@@ -843,6 +852,7 @@
end_changed = true;
}
vma->vm_pgoff = pgoff;
@@ -1186,7 +1192,7 @@ diff -Nur a/mm/mmap.c b/mm/mmap.c
if (adjust_next) {
next->vm_start += adjust_next << PAGE_SHIFT;
next->vm_pgoff += adjust_next;
-@@ -939,6 +949,7 @@
+@@ -948,6 +958,7 @@
if (remove_next == 2) {
remove_next = 1;
end = next->vm_end;
@@ -1194,7 +1200,7 @@ diff -Nur a/mm/mmap.c b/mm/mmap.c
goto again;
}
else if (next)
-@@ -965,10 +976,14 @@
+@@ -974,10 +985,14 @@
*/
VM_WARN_ON(mm->highest_vm_end != vm_end_gap(vma));
}
@@ -1209,7 +1215,7 @@ diff -Nur a/mm/mmap.c b/mm/mmap.c
validate_mm(mm);
return 0;
-@@ -1385,6 +1400,9 @@
+@@ -1434,6 +1449,9 @@
vm_flags |= calc_vm_prot_bits(prot, pkey) | calc_vm_flag_bits(flags) |
mm->def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC;
@@ -1219,7 +1225,7 @@ diff -Nur a/mm/mmap.c b/mm/mmap.c
if (flags & MAP_LOCKED)
if (!can_do_mlock())
return -EPERM;
-@@ -1739,6 +1757,7 @@
+@@ -1798,6 +1816,7 @@
allow_write_access(file);
}
file = vma->vm_file;
@@ -1227,15 +1233,15 @@ diff -Nur a/mm/mmap.c b/mm/mmap.c
out:
perf_event_mmap(vma);
-@@ -1780,6 +1799,7 @@
+@@ -1839,6 +1858,7 @@
if (vm_flags & VM_DENYWRITE)
allow_write_access(file);
free_vma:
+ uksm_remove_vma(vma);
- kmem_cache_free(vm_area_cachep, vma);
+ vm_area_free(vma);
unacct_error:
if (charged)
-@@ -2604,6 +2624,8 @@
+@@ -2658,6 +2678,8 @@
else
err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
@@ -1244,7 +1250,7 @@ diff -Nur a/mm/mmap.c b/mm/mmap.c
/* Success. */
if (!err)
return 0;
-@@ -2896,6 +2918,7 @@
+@@ -2943,6 +2965,7 @@
if ((flags & (~VM_EXEC)) != 0)
return -EINVAL;
flags |= VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags;
@@ -1252,7 +1258,7 @@ diff -Nur a/mm/mmap.c b/mm/mmap.c
error = get_unmapped_area(NULL, addr, len, 0, MAP_FIXED);
if (offset_in_page(error))
-@@ -2953,6 +2976,7 @@
+@@ -2999,6 +3022,7 @@
vma->vm_flags = flags;
vma->vm_page_prot = vm_get_page_prot(flags);
vma_link(mm, vma, prev, rb_link, rb_parent);
@@ -1260,9 +1266,9 @@ diff -Nur a/mm/mmap.c b/mm/mmap.c
out:
perf_event_mmap(vma);
mm->total_vm += len >> PAGE_SHIFT;
-@@ -3004,6 +3028,12 @@
- /* mm's last user has gone, and its about to be pulled down */
- mmu_notifier_release(mm);
+@@ -3078,6 +3102,12 @@
+ up_write(&mm->mmap_sem);
+ }
+ /*
+ * Taking write lock on mmap_sem does not harm others,
@@ -1273,7 +1279,7 @@ diff -Nur a/mm/mmap.c b/mm/mmap.c
if (mm->locked_vm) {
vma = mm->mmap;
while (vma) {
-@@ -3056,6 +3086,11 @@
+@@ -3112,6 +3142,11 @@
vma = remove_vma(vma);
}
vm_unacct_memory(nr_accounted);
@@ -1285,7 +1291,7 @@ diff -Nur a/mm/mmap.c b/mm/mmap.c
}
/* Insert vm structure into process list sorted by address
-@@ -3165,6 +3200,7 @@
+@@ -3219,6 +3254,7 @@
new_vma->vm_ops->open(new_vma);
vma_link(mm, new_vma, prev, rb_link, rb_parent);
*need_rmap_locks = false;
@@ -1293,7 +1299,7 @@ diff -Nur a/mm/mmap.c b/mm/mmap.c
}
return new_vma;
-@@ -3315,6 +3351,7 @@
+@@ -3369,6 +3405,7 @@
vm_stat_account(mm, vma->vm_flags, len >> PAGE_SHIFT);
perf_event_mmap(vma);
@@ -1302,9 +1308,9 @@ diff -Nur a/mm/mmap.c b/mm/mmap.c
return vma;
diff -Nur a/mm/rmap.c b/mm/rmap.c
---- a/mm/rmap.c 2018-04-08 13:29:52.000000000 +0100
-+++ b/mm/rmap.c 2018-04-11 22:47:44.602845911 +0100
-@@ -1016,9 +1016,9 @@
+--- a/mm/rmap.c 2018-08-24 12:04:51.000000000 +0100
++++ b/mm/rmap.c 2018-08-27 10:44:36.348467446 +0100
+@@ -1017,9 +1017,9 @@
/**
* __page_set_anon_rmap - set up new anonymous rmap
@@ -1318,7 +1324,7 @@ diff -Nur a/mm/rmap.c b/mm/rmap.c
static void __page_set_anon_rmap(struct page *page,
diff -Nur a/mm/uksm.c b/mm/uksm.c
--- a/mm/uksm.c 1970-01-01 01:00:00.000000000 +0100
-+++ b/mm/uksm.c 2018-04-11 22:47:44.605846008 +0100
++++ b/mm/uksm.c 2018-08-27 10:44:36.351467543 +0100
@@ -0,0 +1,5584 @@
+/*
+ * Ultra KSM. Copyright (C) 2011-2012 Nai Xia
@@ -6905,11 +6911,11 @@ diff -Nur a/mm/uksm.c b/mm/uksm.c
+#endif
+
diff -Nur a/mm/vmstat.c b/mm/vmstat.c
---- a/mm/vmstat.c 2018-04-08 13:29:52.000000000 +0100
-+++ b/mm/vmstat.c 2018-04-11 22:47:44.606846040 +0100
-@@ -1162,6 +1162,9 @@
- "nr_dirtied",
+--- a/mm/vmstat.c 2018-08-24 12:04:51.000000000 +0100
++++ b/mm/vmstat.c 2018-08-27 10:44:36.352467575 +0100
+@@ -1163,6 +1163,9 @@
"nr_written",
+ "", /* nr_indirectly_reclaimable */
+#ifdef CONFIG_UKSM
+ "nr_uksm_zero_pages",