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
..
2020-09-07 22:25:27 +02:00
2020-09-07 22:25:27 +02:00
2020-09-07 22:25:27 +02:00
2021-01-22 11:40:00 +01:00
2020-09-07 22:25:27 +02:00
2020-09-07 22:25:27 +02:00
2021-12-14 10:03:45 +01:00
2022-01-05 11:16:35 +01:00
2022-01-23 06:20:44 +02:00
2021-11-17 10:36:15 -05:00
2022-01-05 11:16:35 +01:00
2021-09-08 15:32:35 -07:00
2020-11-11 23:49:22 +01:00
2021-10-24 17:24:47 +02:00
2021-10-24 17:24:47 +02:00
2021-10-24 17:24:47 +02:00
2021-07-13 15:08:15 -05:00
2021-12-11 23:31:51 +01:00
2021-09-23 11:23:35 +02:00
2021-10-24 17:24:47 +02:00
2021-05-07 00:26:34 -07:00
2021-01-04 11:37:27 +01:00
2022-01-16 16:15:14 +02:00
2020-05-19 17:39:32 +02:00
2021-11-29 12:43:06 +01:00
2021-09-23 11:23:35 +02:00
2019-02-04 10:56:41 -08:00
2020-05-22 09:10:53 +02:00
2021-09-23 11:23:35 +02:00
2018-08-01 13:20:15 -07:00
2021-04-06 15:12:58 +02:00
2019-04-03 10:32:54 +02:00
2022-02-25 09:36:05 +01:00
2019-07-25 21:45:05 -07:00
2021-10-24 17:24:47 +02:00
2021-01-27 21:49:16 +01:00
2020-09-07 22:25:27 +02:00