Skip to content
  • Naoya Horiguchi's avatar
    pagemap: set pagemap walk limit to PMD boundary · ea251c1d
    Naoya Horiguchi authored
    
    
    Currently one pagemap_read() call walks in PAGEMAP_WALK_SIZE bytes (== 512
    pages.) But there is a corner case where walk_pmd_range() accidentally
    runs over a VMA associated with a hugetlbfs file.
    
    For example, when a process has mappings to VMAs as shown below:
    
      # cat /proc/<pid>/maps
      ...
      3a58f6d000-3a58f72000 rw-p 00000000 00:00 0
      7fbd51853000-7fbd51855000 rw-p 00000000 00:00 0
      7fbd5186c000-7fbd5186e000 rw-p 00000000 00:00 0
      7fbd51a00000-7fbd51c00000 rw-s 00000000 00:12 8614   /hugepages/test
    
    then pagemap_read() goes into walk_pmd_range() path and walks in the range
    0x7fbd51853000-0x7fbd51a53000, but the hugetlbfs VMA should be handled by
    walk_hugetlb_range().  Otherwise PMD for the hugepage is considered bad
    and cleared, which causes undesirable results.
    
    This patch fixes it by separating pagemap walk range into one PMD.
    
    Signed-off-by: default avatarNaoya Horiguchi <n-horiguchi@ah.jp.nec.com>
    Cc: Jun'ichi Nomura <j-nomura@ce.jp.nec.com>
    Acked-by: default avatarKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Matt Mackall <mpm@selenic.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    ea251c1d