The patch titled Subject: coredump: fix spam with zero VMA process has been added to the -mm tree. Its filename is coredump-fix-spam-with-zero-vma-process.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/coredump-fix-spam-with-zero-vma-process.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/coredump-fix-spam-with-zero-vma-process.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Alexey Dobriyan <adobriyan@xxxxxxxxx> Subject: coredump: fix spam with zero VMA process Nobody ever tried to self destruct by unmapping whole address space at once: munmap((void *)0, (1ULL << 47) - 4096); Doing this produces 2 warnings for zero-length vmalloc allocations: a.out[1353]: segfault at 7f80bcc4b757 ip 00007f80bcc4b757 sp 00007fff683939b8 error 14 a.out: vmalloc: allocation failure: 0 bytes, mode:0xcc0(GFP_KERNEL), nodemask=(null) ... a.out: vmalloc: allocation failure: 0 bytes, mode:0xcc0(GFP_KERNEL), nodemask=(null) ... Fix is to switch to kvmalloc(). Steps to reproduce: // vsyscall=none #include <sys/mman.h> #include <sys/resource.h> int main(void) { setrlimit(RLIMIT_CORE, &(struct rlimit){RLIM_INFINITY, RLIM_INFINITY}); munmap((void *)0, (1ULL << 47) - 4096); return 0; } Link: http://lkml.kernel.org/r/20180410180353.GA2515@avx2 Signed-off-by: Alexey Dobriyan <adobriyan@xxxxxxxxx> Reviewed-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- fs/binfmt_elf.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff -puN fs/binfmt_elf.c~coredump-fix-spam-with-zero-vma-process fs/binfmt_elf.c --- a/fs/binfmt_elf.c~coredump-fix-spam-with-zero-vma-process +++ a/fs/binfmt_elf.c @@ -1608,8 +1608,8 @@ static int fill_files_note(struct memelf if (size >= MAX_FILE_NOTE_SIZE) /* paranoia check */ return -EINVAL; size = round_up(size, PAGE_SIZE); - data = vmalloc(size); - if (!data) + data = kvmalloc(size, GFP_KERNEL); + if (ZERO_OR_NULL_PTR(data)) return -ENOMEM; start_end_ofs = data + 2; @@ -1626,7 +1626,7 @@ static int fill_files_note(struct memelf filename = file_path(file, name_curpos, remaining); if (IS_ERR(filename)) { if (PTR_ERR(filename) == -ENAMETOOLONG) { - vfree(data); + kvfree(data); size = size * 5 / 4; goto alloc; } @@ -1919,7 +1919,7 @@ static void free_note_info(struct elf_no kfree(t); } kfree(info->psinfo.data); - vfree(info->files.data); + kvfree(info->files.data); } #else @@ -2135,7 +2135,7 @@ static void free_note_info(struct elf_no /* Free data possibly allocated by fill_files_note(): */ if (info->notes_files) - vfree(info->notes_files->data); + kvfree(info->notes_files->data); kfree(info->prstatus); kfree(info->psinfo); @@ -2281,8 +2281,8 @@ static int elf_core_dump(struct coredump if (segs - 1 > ULONG_MAX / sizeof(*vma_filesz)) goto end_coredump; - vma_filesz = vmalloc((segs - 1) * sizeof(*vma_filesz)); - if (!vma_filesz) + vma_filesz = kvmalloc((segs - 1) * sizeof(*vma_filesz), GFP_KERNEL); + if (ZERO_OR_NULL_PTR(vma_filesz)) goto end_coredump; for (i = 0, vma = first_vma(current, gate_vma); vma != NULL; @@ -2389,7 +2389,7 @@ end_coredump: cleanup: free_note_info(&info); kfree(shdr4extnum); - vfree(vma_filesz); + kvfree(vma_filesz); kfree(phdr4note); kfree(elf); out: _ Patches currently in -mm which might be from adobriyan@xxxxxxxxx are proc-do-less-stuff-under-pde_unload_lock.patch proc-move-proc-sysvipc-creation-to-where-it-belongs.patch proc-faster-open-close-of-files-without-release-hook.patch proc-randomize-struct-pde_opener.patch proc-move-struct-pde_opener-to-kmem-cache.patch proc-account-struct-pde_opener.patch proc-check-permissions-earlier-for-proc-wchan.patch proc-use-set_puts-at-proc-wchan.patch proc-test-proc-self-wchan.patch proc-test-proc-self-syscall.patch proc-move-struct-proc_dir_entry-into-kmem-cache.patch proc-fix-proc-map_files-lookup-some-more.patch proc-register-filesystem-last.patch proc-faster-proc-cmdline.patch proc-do-mmput-asap-for-proc-map_files.patch proc-revalidate-misc-dentries.patch proc-test-last-field-of-proc-loadavg.patch proc-reject-and-as-filenames.patch proc-switch-struct-proc_dir_entry-count-to-refcount.patch proc-shotgun-test-read-readdir-readlink-a-little-write.patch proc-shotgun-test-read-readdir-readlink-a-little-write-fix.patch proc-shotgun-test-read-readdir-readlink-a-little-write-fix-2.patch proc-use-slower-rb_first.patch proc-test-proc-uptime.patch uts-create-struct-uts_namespace-from-kmem_cache.patch coredump-fix-spam-with-zero-vma-process.patch seq_file-allocate-seq_file-from-kmem_cache.patch seq_file-account-everything.patch seq_file-delete-small-value-optimization.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html