• A
    mm: simplify compat numa syscalls · e130242d
    Arnd Bergmann 提交于
    The compat implementations for mbind, get_mempolicy, set_mempolicy and
    migrate_pages are just there to handle the subtly different layout of
    bitmaps on 32-bit hosts.
    
    The compat implementation however lacks some of the checks that are
    present in the native one, in particular for checking that the extra bits
    are all zero when user space has a larger mask size than the kernel.
    Worse, those extra bits do not get cleared when copying in or out of the
    kernel, which can lead to incorrect data as well.
    
    Unify the implementation to handle the compat bitmap layout directly in
    the get_nodes() and copy_nodes_to_user() helpers.  Splitting out the
    get_bitmap() helper from get_nodes() also helps readability of the native
    case.
    
    On x86, two additional problems are addressed by this: compat tasks can
    pass a bitmap at the end of a mapping, causing a fault when reading across
    the page boundary for a 64-bit word.  x32 tasks might also run into
    problems with get_mempolicy corrupting data when an odd number of 32-bit
    words gets passed.
    
    On parisc the migrate_pages() system call apparently had the wrong calling
    convention, as big-endian architectures expect the words inside of a
    bitmap to be swapped.  This is not a problem though since parisc has no
    NUMA support.
    
    [arnd@arndb.de: fix mempolicy crash]
      Link: https://lkml.kernel.org/r/20210730143417.3700653-1-arnd@kernel.org
      Link: https://lore.kernel.org/lkml/YQPLG20V3dmOfq3a@osiris/
    
    Link: https://lkml.kernel.org/r/20210727144859.4150043-5-arnd@kernel.orgSigned-off-by: NArnd Bergmann <arnd@arndb.de>
    Reviewed-by: NChristoph Hellwig <hch@lst.de>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Christian Borntraeger <borntraeger@de.ibm.com>
    Cc: Christoph Hellwig <hch@infradead.org>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Eric Biederman <ebiederm@xmission.com>
    Cc: Feng Tang <feng.tang@intel.com>
    Cc: Heiko Carstens <hca@linux.ibm.com>
    Cc: Helge Deller <deller@gmx.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    e130242d
mempolicy.c 75.7 KB