Commit cabca8c0 authored by Paul Burton's avatar Paul Burton Committed by Ralf Baechle
Browse files

MIPS: Enable hardened usercopy



Enable CONFIG_HARDENED_USERCOPY checks for MIPS, calling check_object
size in all of copy_{to,from}_user(), __copy_{to,from}_user() &
__copy_{to,from}_user_inatomic().

Signed-off-by: default avatarPaul Burton <paul.burton@imgtec.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/14371/


Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 3f5f0a44
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -66,6 +66,7 @@ config MIPS
	select HANDLE_DOMAIN_IRQ
	select HAVE_EXIT_THREAD
	select HAVE_REGS_AND_STACK_ACCESS_API
	select HAVE_ARCH_HARDENED_USERCOPY

menu "Machine selection"

+18 −0
Original line number Diff line number Diff line
@@ -858,7 +858,10 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n);
	__cu_to = (to);							\
	__cu_from = (from);						\
	__cu_len = (n);							\
									\
	check_object_size(__cu_from, __cu_len, true);			\
	might_fault();							\
									\
	if (eva_kernel_access())					\
		__cu_len = __invoke_copy_to_kernel(__cu_to, __cu_from,	\
						   __cu_len);		\
@@ -879,6 +882,9 @@ extern size_t __copy_user_inatomic(void *__to, const void *__from, size_t __n);
	__cu_to = (to);							\
	__cu_from = (from);						\
	__cu_len = (n);							\
									\
	check_object_size(__cu_from, __cu_len, true);			\
									\
	if (eva_kernel_access())					\
		__cu_len = __invoke_copy_to_kernel(__cu_to, __cu_from,	\
						   __cu_len);		\
@@ -897,6 +903,9 @@ extern size_t __copy_user_inatomic(void *__to, const void *__from, size_t __n);
	__cu_to = (to);							\
	__cu_from = (from);						\
	__cu_len = (n);							\
									\
	check_object_size(__cu_to, __cu_len, false);			\
									\
	if (eva_kernel_access())					\
		__cu_len = __invoke_copy_from_kernel_inatomic(__cu_to,	\
							      __cu_from,\
@@ -931,6 +940,9 @@ extern size_t __copy_user_inatomic(void *__to, const void *__from, size_t __n);
	__cu_to = (to);							\
	__cu_from = (from);						\
	__cu_len = (n);							\
									\
	check_object_size(__cu_from, __cu_len, true);			\
									\
	if (eva_kernel_access()) {					\
		__cu_len = __invoke_copy_to_kernel(__cu_to,		\
						   __cu_from,		\
@@ -1123,6 +1135,9 @@ extern size_t __copy_in_user_eva(void *__to, const void *__from, size_t __n);
	__cu_to = (to);							\
	__cu_from = (from);						\
	__cu_len = (n);							\
									\
	check_object_size(__cu_to, __cu_len, false);			\
									\
	if (eva_kernel_access()) {					\
		__cu_len = __invoke_copy_from_kernel(__cu_to,		\
						     __cu_from,		\
@@ -1161,6 +1176,9 @@ extern size_t __copy_in_user_eva(void *__to, const void *__from, size_t __n);
	__cu_to = (to);							\
	__cu_from = (from);						\
	__cu_len = (n);							\
									\
	check_object_size(__cu_to, __cu_len, false);			\
									\
	if (eva_kernel_access()) {					\
		__cu_len = __invoke_copy_from_kernel(__cu_to,		\
						     __cu_from,		\