Commit dfd45b61 authored by Kees Cook's avatar Kees Cook
Browse files

ARM: uaccess: Enable hardened usercopy



Enables CONFIG_HARDENED_USERCOPY checks on arm.

Based on code from PaX and grsecurity.

Signed-off-by: default avatarKees Cook <keescook@chromium.org>
parent 5b710f34
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ config ARM
	select HARDIRQS_SW_RESEND
	select HAVE_ARCH_AUDITSYSCALL if (AEABI && !OABI_COMPAT)
	select HAVE_ARCH_BITREVERSE if (CPU_32v7M || CPU_32v7) && !CPU_32v6
	select HAVE_ARCH_HARDENED_USERCOPY
	select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL && !CPU_ENDIAN_BE32 && MMU
	select HAVE_ARCH_KGDB if !CPU_ENDIAN_BE32 && MMU
	select HAVE_ARCH_MMAP_RND_BITS if MMU
+9 −2
Original line number Diff line number Diff line
@@ -496,7 +496,10 @@ arm_copy_from_user(void *to, const void __user *from, unsigned long n);
static inline unsigned long __must_check
__copy_from_user(void *to, const void __user *from, unsigned long n)
{
	unsigned int __ua_flags = uaccess_save_and_enable();
	unsigned int __ua_flags;

	check_object_size(to, n, false);
	__ua_flags = uaccess_save_and_enable();
	n = arm_copy_from_user(to, from, n);
	uaccess_restore(__ua_flags);
	return n;
@@ -511,11 +514,15 @@ static inline unsigned long __must_check
__copy_to_user(void __user *to, const void *from, unsigned long n)
{
#ifndef CONFIG_UACCESS_WITH_MEMCPY
	unsigned int __ua_flags = uaccess_save_and_enable();
	unsigned int __ua_flags;

	check_object_size(from, n, true);
	__ua_flags = uaccess_save_and_enable();
	n = arm_copy_to_user(to, from, n);
	uaccess_restore(__ua_flags);
	return n;
#else
	check_object_size(from, n, true);
	return arm_copy_to_user(to, from, n);
#endif
}