uaccess: generalize access_ok()
There are many different ways that access_ok() is defined across architectures, but in the end, they all just compare against the user_addr_max() value or they accept anything. Provide one definition that works for most architectures, checking against TASK_SIZE_MAX for user processes or skipping the check inside of uaccess_kernel() sections. For architectures without CONFIG_SET_FS(), this should be the fastest check, as it comes down to a single comparison of a pointer against a compile-time constant, while the architecture specific versions tend to do something more complex for historic reasons or get something wrong. Type checking for __user annotations is handled inconsistently across architectures, but this is easily simplified as well by using an inline function that takes a 'const void __user *' argument. A handful of callers need an extra __user annotation for this. Some architectures had trick to use 33-bit or 65-bit arithmetic on the addresses to calculate the ...
Showing
- arch/Kconfig 7 additions, 0 deletionsarch/Kconfig
- arch/alpha/include/asm/uaccess.h 5 additions, 29 deletionsarch/alpha/include/asm/uaccess.h
- arch/arc/include/asm/uaccess.h 0 additions, 29 deletionsarch/arc/include/asm/uaccess.h
- arch/arm/include/asm/uaccess.h 1 addition, 19 deletionsarch/arm/include/asm/uaccess.h
- arch/arm64/include/asm/uaccess.h 4 additions, 7 deletionsarch/arm64/include/asm/uaccess.h
- arch/csky/include/asm/uaccess.h 0 additions, 8 deletionsarch/csky/include/asm/uaccess.h
- arch/hexagon/include/asm/uaccess.h 0 additions, 25 deletionsarch/hexagon/include/asm/uaccess.h
- arch/ia64/include/asm/uaccess.h 2 additions, 3 deletionsarch/ia64/include/asm/uaccess.h
- arch/m68k/Kconfig.cpu 1 addition, 0 deletionsarch/m68k/Kconfig.cpu
- arch/m68k/include/asm/uaccess.h 1 addition, 14 deletionsarch/m68k/include/asm/uaccess.h
- arch/microblaze/include/asm/uaccess.h 1 addition, 7 deletionsarch/microblaze/include/asm/uaccess.h
- arch/mips/include/asm/uaccess.h 1 addition, 28 deletionsarch/mips/include/asm/uaccess.h
- arch/nds32/include/asm/uaccess.h 2 additions, 5 deletionsarch/nds32/include/asm/uaccess.h
- arch/nios2/include/asm/uaccess.h 1 addition, 10 deletionsarch/nios2/include/asm/uaccess.h
- arch/openrisc/include/asm/uaccess.h 1 addition, 18 deletionsarch/openrisc/include/asm/uaccess.h
- arch/parisc/Kconfig 1 addition, 0 deletionsarch/parisc/Kconfig
- arch/parisc/include/asm/uaccess.h 3 additions, 9 deletionsarch/parisc/include/asm/uaccess.h
- arch/powerpc/include/asm/uaccess.h 1 addition, 10 deletionsarch/powerpc/include/asm/uaccess.h
- arch/riscv/include/asm/uaccess.h 1 addition, 30 deletionsarch/riscv/include/asm/uaccess.h
- arch/s390/Kconfig 1 addition, 0 deletionsarch/s390/Kconfig
Please register or sign in to comment