From: Greg Kroah-Hartman Date: Sun, 7 Oct 2018 05:22:04 +0000 (+0200) Subject: 4.4-stable patches X-Git-Tag: v4.4.160~25 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=60e70df33dfeb01a5562d76fc031728a6b369030;p=thirdparty%2Fkernel%2Fstable-queue.git 4.4-stable patches added patches: mm-madvise-madv_dodump-allow-hugetlbfs-pages.patch --- diff --git a/queue-4.4/mm-madvise-madv_dodump-allow-hugetlbfs-pages.patch b/queue-4.4/mm-madvise-madv_dodump-allow-hugetlbfs-pages.patch new file mode 100644 index 00000000000..e58404b364a --- /dev/null +++ b/queue-4.4/mm-madvise-madv_dodump-allow-hugetlbfs-pages.patch @@ -0,0 +1,89 @@ +From d41aa5252394c065d1f04d1ceea885b70d00c9c6 Mon Sep 17 00:00:00 2001 +From: Daniel Black +Date: Fri, 5 Oct 2018 15:52:19 -0700 +Subject: mm: madvise(MADV_DODUMP): allow hugetlbfs pages + +From: Daniel Black + +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 + #include + #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 +Signed-off-by: Daniel Black +Reviewed-by: Mike Kravetz +Cc: Konstantin Khlebnikov +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Greg Kroah-Hartman + +--- + mm/madvise.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/mm/madvise.c ++++ b/mm/madvise.c +@@ -76,7 +76,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; + } diff --git a/queue-4.4/series b/queue-4.4/series index c021356bfc0..4a1620a7507 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -88,3 +88,4 @@ mac80211-fix-station-bandwidth-setting-after-channel-switch.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