]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 7 Oct 2018 05:21:32 +0000 (07:21 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 7 Oct 2018 05:21:32 +0000 (07:21 +0200)
added patches:
mm-madvise-madv_dodump-allow-hugetlbfs-pages.patch

queue-4.14/mm-madvise-madv_dodump-allow-hugetlbfs-pages.patch [new file with mode: 0644]
queue-4.14/series

diff --git a/queue-4.14/mm-madvise-madv_dodump-allow-hugetlbfs-pages.patch b/queue-4.14/mm-madvise-madv_dodump-allow-hugetlbfs-pages.patch
new file mode 100644 (file)
index 0000000..b847696
--- /dev/null
@@ -0,0 +1,89 @@
+From d41aa5252394c065d1f04d1ceea885b70d00c9c6 Mon Sep 17 00:00:00 2001
+From: Daniel Black <daniel@linux.ibm.com>
+Date: Fri, 5 Oct 2018 15:52:19 -0700
+Subject: mm: madvise(MADV_DODUMP): allow hugetlbfs pages
+
+From: Daniel Black <daniel@linux.ibm.com>
+
+commit d41aa5252394c065d1f04d1ceea885b70d00c9c6 upstream.
+
+Reproducer, assuming 2M of hugetlbfs available:
+
+Hugetlbfs mounted, size=2M and option user=testuser
+
+  # mount | grep ^hugetlbfs
+  hugetlbfs on /dev/hugepages type hugetlbfs (rw,pagesize=2M,user=dan)
+  # sysctl vm.nr_hugepages=1
+  vm.nr_hugepages = 1
+  # grep Huge /proc/meminfo
+  AnonHugePages:         0 kB
+  ShmemHugePages:        0 kB
+  HugePages_Total:       1
+  HugePages_Free:        1
+  HugePages_Rsvd:        0
+  HugePages_Surp:        0
+  Hugepagesize:       2048 kB
+  Hugetlb:            2048 kB
+
+Code:
+
+  #include <sys/mman.h>
+  #include <stddef.h>
+  #define SIZE 2*1024*1024
+  int main()
+  {
+    void *ptr;
+    ptr = mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_HUGETLB | MAP_ANONYMOUS, -1, 0);
+    madvise(ptr, SIZE, MADV_DONTDUMP);
+    madvise(ptr, SIZE, MADV_DODUMP);
+  }
+
+Compile and strace:
+
+  mmap(NULL, 2097152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_HUGETLB, -1, 0) = 0x7ff7c9200000
+  madvise(0x7ff7c9200000, 2097152, MADV_DONTDUMP) = 0
+  madvise(0x7ff7c9200000, 2097152, MADV_DODUMP) = -1 EINVAL (Invalid argument)
+
+hugetlbfs pages have VM_DONTEXPAND in the VmFlags driver pages based on
+author testing with analysis from Florian Weimer[1].
+
+The inclusion of VM_DONTEXPAND into the VM_SPECIAL defination was a
+consequence of the large useage of VM_DONTEXPAND in device drivers.
+
+A consequence of [2] is that VM_DONTEXPAND marked pages are unable to be
+marked DODUMP.
+
+A user could quite legitimately madvise(MADV_DONTDUMP) their hugetlbfs
+memory for a while and later request that madvise(MADV_DODUMP) on the same
+memory.  We correct this omission by allowing madvice(MADV_DODUMP) on
+hugetlbfs pages.
+
+[1] https://stackoverflow.com/questions/52548260/madvisedodump-on-the-same-ptr-size-as-a-successful-madvisedontdump-fails-wit
+[2] commit 0103bd16fb90 ("mm: prepare VM_DONTDUMP for using in drivers")
+
+Link: http://lkml.kernel.org/r/20180930054629.29150-1-daniel@linux.ibm.com
+Link: https://lists.launchpad.net/maria-discuss/msg05245.html
+Fixes: 0103bd16fb90 ("mm: prepare VM_DONTDUMP for using in drivers")
+Reported-by: Kenneth Penza <kpenza@gmail.com>
+Signed-off-by: Daniel Black <daniel@linux.ibm.com>
+Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
+Cc: Konstantin Khlebnikov <khlebnikov@openvz.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ mm/madvise.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/mm/madvise.c
++++ b/mm/madvise.c
+@@ -96,7 +96,7 @@ static long madvise_behavior(struct vm_a
+               new_flags |= VM_DONTDUMP;
+               break;
+       case MADV_DODUMP:
+-              if (new_flags & VM_SPECIAL) {
++              if (!is_vm_hugetlb_page(vma) && new_flags & VM_SPECIAL) {
+                       error = -EINVAL;
+                       goto out;
+               }
index 717fb91c6416abe41c1d54ecd4b7f781aedfdf59..7b89d3ae01eff7d9200def6a0b30a54ff61e1492 100644 (file)
@@ -37,3 +37,4 @@ mac80211-don-t-tx-a-deauth-frame-if-the-ap-forbade-tx.patch
 mac80211-shorten-the-ibss-debug-messages.patch
 tools-vm-slabinfo.c-fix-sign-compare-warning.patch
 tools-vm-page-types.c-fix-defined-but-not-used-warning.patch
+mm-madvise-madv_dodump-allow-hugetlbfs-pages.patch