]> Git Repo - linux.git/commit
arm64: uaccess: remove set_fs()
authorMark Rutland <[email protected]>
Wed, 2 Dec 2020 13:15:55 +0000 (13:15 +0000)
committerCatalin Marinas <[email protected]>
Wed, 2 Dec 2020 19:49:11 +0000 (19:49 +0000)
commit3d2403fd10a1dbb359b154af41ffed9f2a7520e8
tree9b9a9ec4d627c49ebb3c1231481a6f86dd1bf1f7
parent7b90dc40e36e0beb0fdecfef80f33a2e88aced14
arm64: uaccess: remove set_fs()

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: Mark Rutland <[email protected]>
Acked-by: James Morse <[email protected]>
Cc: Christoph Hellwig <[email protected]>
Cc: Will Deacon <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Catalin Marinas <[email protected]>
13 files changed:
arch/arm64/Kconfig
arch/arm64/include/asm/exec.h
arch/arm64/include/asm/processor.h
arch/arm64/include/asm/ptrace.h
arch/arm64/include/asm/thread_info.h
arch/arm64/include/asm/uaccess.h
arch/arm64/kernel/asm-offsets.c
arch/arm64/kernel/cpufeature.c
arch/arm64/kernel/entry.S
arch/arm64/kernel/process.c
arch/arm64/kernel/sdei.c
arch/arm64/kernel/suspend.c
arch/arm64/mm/fault.c
This page took 0.053902 seconds and 4 git commands to generate.