Files
linux/arch/x86/include/asm
Arnd Bergmann 12700c17fc 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 overflow, however this simpler version uses
fewer registers, which means it can produce better object code in the
end despite needing a second (statically predicted) branch.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Acked-by: Mark Rutland <mark.rutland@arm.com> [arm64, asm-generic]
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
Acked-by: Stafford Horne <shorne@gmail.com>
Acked-by: Dinh Nguyen <dinguyen@kernel.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2022-02-25 09:36:05 +01:00
..
2021-10-20 22:35:04 +02:00
2021-03-18 15:31:53 +01:00
2021-05-05 21:50:13 +02:00
2020-01-23 10:41:20 -08:00
2021-03-18 15:31:53 +01:00
2021-09-08 15:32:35 -07:00
2020-05-07 16:06:20 +02:00
2021-12-11 09:09:47 +01:00
2021-10-28 23:25:26 +02:00
2020-10-28 20:26:25 +01:00
2021-10-05 21:48:30 +02:00
2021-03-31 16:20:22 +02:00
2020-11-26 12:58:56 +01:00
2019-04-16 12:26:18 +02:00
2020-11-06 23:14:58 +01:00
2021-05-12 14:54:56 +02:00
2021-12-11 09:09:45 +01:00
2020-09-16 16:52:28 +02:00
2021-12-11 09:09:47 +01:00
2021-12-11 09:09:45 +01:00
2021-07-01 11:06:03 -07:00
2021-12-11 09:09:48 +01:00
2021-12-11 09:09:49 +01:00
2021-12-11 09:09:45 +01:00
2019-04-10 09:53:31 +02:00
2020-03-21 16:03:25 +01:00
2020-11-17 14:36:13 +01:00
2022-02-25 09:36:05 +01:00
2020-03-23 18:45:14 +01:00
2020-01-14 12:20:58 +01:00