• Christophe Leroy's avatar
    mm, hugetlb: allow for "high" userspace addresses · 5f24d5a5
    Christophe Leroy authored
    This is a fix for commit f6795053 ("mm: mmap: Allow for "high"
    userspace addresses") for hugetlb.
    
    This patch adds support for "high" userspace addresses that are
    optionally supported on the system and have to be requested via a hint
    mechanism ("high" addr parameter to mmap).
    
    Architectures such as powerpc and x86 achieve this by making changes to
    their architectural versions of hugetlb_get_unmapped_area() function.
    However, arm64 uses the generic version of that function.
    
    So take into account arch_get_mmap_base() and arch_get_mmap_end() in
    hugetlb_get_unmapped_area().  To allow that, move those two macros out
    of mm/mmap.c into include/linux/sched/mm.h
    
    If these macros are not defined in architectural code then they default
    to (TASK_SIZE) and (base) so should not introduce any behavioural
    changes to architectures that do not define them.
    
    For the time being, only ARM64 is affected by this change.
    
    Catalin (ARM64) said
     "We should have fixed hugetlb_get_unmapped_area() as well when we added
      support for 52-bit VA. The reason for commit f6795053 was to
      prevent normal mmap() from returning addresses above 48-bit by default
      as some user-space had hard assumptions about this.
    
      It's a slight ABI change if you do this for hugetlb_get_unmapped_area()
      but I doubt anyone would notice. It's more likely that the current
      behaviour would cause issues, so I'd rather have them consistent.
    
      Basically when arm64 gained support for 52-bit addresses we did not
      want user-space calling mmap() to suddenly get such high addresses,
      otherwise we could have inadvertently broken some programs (similar
      behaviour to x86 here). Hence we added commit f6795053. But we
      missed hugetlbfs which could still get such high mmap() addresses. So
      in theory that's a potential regression that should have bee addressed
      at the same time as commit f6795053 (and before arm64 enabled
      52-bit addresses)"
    
    Link: https://lkml.kernel.org/r/ab847b6edb197bffdfe189e70fb4ac76bfe79e0d.1650033747.git.christophe.leroy@csgroup.eu
    Fixes: f6795053 ("mm: mmap: Allow for "high" userspace addresses")
    Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
    Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Cc: Steve Capper <steve.capper@arm.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: <stable@vger.kernel.org>	[5.0.x]
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    5f24d5a5
inode.c 41 KB