[RFC PATCH 0/6] arm64: untag user pointers passed to the kernel
Robin Murphy
robin.murphy at arm.com
Fri Mar 9 06:15:00 PST 2018
Hi Andrey,
On 09/03/18 14:01, Andrey Konovalov wrote:
> arm64 has a feature called Top Byte Ignore, which allows to embed pointer
> tags into the top byte of each pointer. Userspace programs (such as
> HWASan, a memory debugging tool [1]) might use this feature and pass
> tagged user pointers to the kernel through syscalls or other interfaces.
If you propose changing the ABI, then
Documentation/arm64/tagged-pointers.txt needs to reflect the new one,
since passing nonzero tags via syscalls is currently explicitly forbidden.
Robin.
> This patch makes a few of the kernel interfaces accept tagged user
> pointers. The kernel is already able to handle user faults with tagged
> pointers and has the untagged_addr macro, which this patchset reuses.
>
> We're not trying to cover all possible ways the kernel accepts user
> pointers in one patchset, so this one should be considered as a start.
> It would be nice to learn about the interfaces that I missed though.
>
> Sending this as an RFC, as I'm not sure if this should be committed as is,
> and would like to receive some feedback.
>
> Thanks!
>
> [1] http://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
>
> Andrey Konovalov (6):
> arm64: add type casts to untagged_addr macro
> arm64: untag user addresses in copy_from_user and others
> mm, arm64: untag user addresses in memory syscalls
> mm, arm64: untag user addresses in mm/gup.c
> lib, arm64: untag addrs passed to strncpy_from_user and strnlen_user
> arch: add untagged_addr definition for other arches
>
> arch/alpha/include/asm/uaccess.h | 2 ++
> arch/arc/include/asm/uaccess.h | 1 +
> arch/arm/include/asm/uaccess.h | 2 ++
> arch/arm64/include/asm/uaccess.h | 9 +++++++--
> arch/blackfin/include/asm/uaccess.h | 2 ++
> arch/c6x/include/asm/uaccess.h | 2 ++
> arch/cris/include/asm/uaccess.h | 2 ++
> arch/frv/include/asm/uaccess.h | 2 ++
> arch/ia64/include/asm/uaccess.h | 2 ++
> arch/m32r/include/asm/uaccess.h | 2 ++
> arch/m68k/include/asm/uaccess.h | 2 ++
> arch/metag/include/asm/uaccess.h | 2 ++
> arch/microblaze/include/asm/uaccess.h | 2 ++
> arch/mips/include/asm/uaccess.h | 2 ++
> arch/mn10300/include/asm/uaccess.h | 2 ++
> arch/nios2/include/asm/uaccess.h | 2 ++
> arch/openrisc/include/asm/uaccess.h | 2 ++
> arch/parisc/include/asm/uaccess.h | 2 ++
> arch/powerpc/include/asm/uaccess.h | 2 ++
> arch/riscv/include/asm/uaccess.h | 2 ++
> arch/score/include/asm/uaccess.h | 2 ++
> arch/sh/include/asm/uaccess.h | 2 ++
> arch/sparc/include/asm/uaccess.h | 2 ++
> arch/tile/include/asm/uaccess.h | 2 ++
> arch/x86/include/asm/uaccess.h | 2 ++
> arch/xtensa/include/asm/uaccess.h | 2 ++
> include/asm-generic/uaccess.h | 2 ++
> lib/strncpy_from_user.c | 2 ++
> lib/strnlen_user.c | 2 ++
> mm/gup.c | 12 ++++++++++++
> mm/madvise.c | 2 ++
> mm/mempolicy.c | 6 ++++++
> mm/mincore.c | 2 ++
> mm/mlock.c | 5 +++++
> mm/mmap.c | 9 +++++++++
> mm/mprotect.c | 2 ++
> mm/mremap.c | 2 ++
> mm/msync.c | 3 +++
> 38 files changed, 105 insertions(+), 2 deletions(-)
>
More information about the linux-riscv
mailing list