• Mark Rutland's avatar
    arm64: uaccess: remove set_fs() · 3d2403fd
    Mark Rutland authored
    Now that the uaccess primitives dont take addr_limit into account, we
    have no need to manipulate this via set_fs() and get_fs(). Remove
    support for these, along with some infrastructure this renders
    redundant.
    
    We no longer need to flip UAO to access kernel memory under KERNEL_DS,
    and head.S unconditionally clears UAO for all kernel configurations via
    an ERET in init_kernel_el. Thus, we don't need to dynamically flip UAO,
    nor do we need to context-switch it. However, we still need to adjust
    PAN during SDEI entry.
    
    Masking of __user pointers no longer needs to use the dynamic value of
    addr_limit, and can use a constant derived from the maximum possible
    userspace task size. A new TASK_SIZE_MAX constant is introduced for
    this, which is also used by core code. In configurations supporting
    52-bit VAs, this may include a region of unusable VA space above a
    48-bit TTBR0 limit, but never includes any portion of TTBR1.
    
    Note that TASK_SIZE_MAX is an exclusive limit, while USER_DS and
    KERNEL_DS were inclusive limits, and is converted to a mask by
    subtracting one.
    
    As the SDEI entry code repurposes the otherwise unnecessary
    pt_regs::orig_addr_limit field to store the TTBR1 of the interrupted
    context, for now we rename that to pt_regs::sdei_ttbr1. In future we can
    consider factoring that out.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Acked-by: default avatarJames Morse <james.morse@arm.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Will Deacon <will@kernel.org>
    Link: https://lore.kernel.org/r/20201202131558.39270-10-mark.rutland@arm.comSigned-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    3d2403fd
entry.S 27.1 KB