Dan Williams 9702cffdbf device-dax: implement ->split() to catch invalid munmap attempts
Similar to how device-dax enforces that the 'address', 'offset', and
'len' parameters to mmap() be aligned to the device's fundamental
alignment, the same constraints apply to munmap().  Implement ->split()
to fail munmap calls that violate the alignment constraint.

Otherwise, we later fail VM_BUG_ON checks in the unmap_page_range() path
with crash signatures of the form:

    vma ffff8800b60c8a88 start 00007f88c0000000 end 00007f88c0e00000
    next           (null) prev           (null) mm ffff8800b61150c0
    prot 8000000000000027 anon_vma           (null) vm_ops ffffffffa0091240
    pgoff 0 file ffff8800b638ef80 private_data           (null)
    flags: 0x380000fb(read|write|shared|mayread|maywrite|mayexec|mayshare|softdirty|mixedmap|hugepage)
    ------------[ cut here ]------------
    kernel BUG at mm/huge_memory.c:2014!
    [..]
    RIP: 0010:__split_huge_pud+0x12a/0x180
    [..]
    Call Trace:
     unmap_page_range+0x245/0xa40
     ? __vma_adjust+0x301/0x990
     unmap_vmas+0x4c/0xa0
     unmap_region+0xae/0x120
     ? __vma_rb_erase+0x11a/0x230
     do_munmap+0x276/0x410
     vm_munmap+0x6a/0xa0
     SyS_munmap+0x1d/0x30

Link: http://lkml.kernel.org/r/151130418681.4029.7118245855057952010.stgit@dwillia2-desk3.amr.corp.intel.com
Fixes: dee410792419 ("/dev/dax, core: file operations and dax-mmap")
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Reported-by: Jeff Moyer <jmoyer@redhat.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2017-11-29 18:40:42 -08:00
..
2017-11-17 14:51:24 -08:00
2017-11-14 16:54:12 -08:00
2017-11-16 09:10:59 -08:00
2017-11-16 16:05:01 -08:00
2017-11-16 12:47:46 -08:00
2017-11-16 12:47:46 -08:00
2017-11-14 16:49:31 -08:00
2017-11-17 14:58:01 -08:00
2017-11-15 13:46:33 -08:00
2017-11-13 21:14:07 -08:00
2017-11-16 09:10:59 -08:00
2017-11-15 13:35:43 -08:00
2017-11-16 09:10:59 -08:00
2017-11-17 20:16:20 -08:00
2017-11-16 09:10:59 -08:00
2017-11-13 01:34:14 +01:00
2017-11-14 18:09:31 -08:00
2017-11-16 16:05:01 -08:00
2017-11-15 13:46:33 -08:00
2017-11-17 16:10:01 -08:00
2017-11-13 12:10:24 -08:00
2017-11-17 09:51:57 -08:00
2017-11-16 11:27:04 -07:00
2017-11-16 09:10:59 -08:00
2017-11-20 21:38:41 -10:00
2017-11-16 09:10:59 -08:00
2017-11-15 10:56:56 -08:00
2017-11-13 21:14:07 -08:00
2017-11-16 13:06:27 -08:00
2017-11-22 21:09:18 -10:00
2017-11-16 09:15:57 -08:00
2017-11-17 20:14:10 -08:00
2017-11-16 16:05:01 -08:00
2017-11-17 20:12:08 -08:00
2017-11-14 16:54:12 -08:00
2017-11-16 16:05:01 -08:00
2017-11-14 16:47:47 -08:00
2017-11-20 21:50:24 -10:00
2017-11-16 09:10:59 -08:00
2017-11-16 09:10:59 -08:00