Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 73d35887 authored by Kees Cook's avatar Kees Cook
Browse files

ia64/uaccess: Enable hardened usercopy



Enables CONFIG_HARDENED_USERCOPY checks on ia64.

Based on code from PaX and grsecurity.

Signed-off-by: default avatarKees Cook <keescook@chromium.org>
parent faf5b63e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ config IA64
	select MODULES_USE_ELF_RELA
	select ARCH_USE_CMPXCHG_LOCKREF
	select HAVE_ARCH_AUDITSYSCALL
	select HAVE_ARCH_HARDENED_USERCOPY
	default y
	help
	  The Itanium Processor Family is Intel's 64-bit successor to
+15 −3
Original line number Diff line number Diff line
@@ -241,12 +241,18 @@ extern unsigned long __must_check __copy_user (void __user *to, const void __use
static inline unsigned long
__copy_to_user (void __user *to, const void *from, unsigned long count)
{
	if (!__builtin_constant_p(count))
		check_object_size(from, count, true);

	return __copy_user(to, (__force void __user *) from, count);
}

static inline unsigned long
__copy_from_user (void *to, const void __user *from, unsigned long count)
{
	if (!__builtin_constant_p(count))
		check_object_size(to, count, false);

	return __copy_user((__force void __user *) to, from, count);
}

@@ -258,8 +264,11 @@ __copy_from_user (void *to, const void __user *from, unsigned long count)
	const void *__cu_from = (from);							\
	long __cu_len = (n);								\
											\
	if (__access_ok(__cu_to, __cu_len, get_fs()))					\
	if (__access_ok(__cu_to, __cu_len, get_fs())) {					\
		if (!__builtin_constant_p(n))						\
			check_object_size(__cu_from, __cu_len, true);			\
		__cu_len = __copy_user(__cu_to, (__force void __user *)  __cu_from, __cu_len);	\
	}										\
	__cu_len;									\
})

@@ -270,8 +279,11 @@ __copy_from_user (void *to, const void __user *from, unsigned long count)
	long __cu_len = (n);								\
											\
	__chk_user_ptr(__cu_from);							\
	if (__access_ok(__cu_from, __cu_len, get_fs()))					\
	if (__access_ok(__cu_from, __cu_len, get_fs())) {				\
		if (!__builtin_constant_p(n))						\
			check_object_size(__cu_to, __cu_len, false);			\
		__cu_len = __copy_user((__force void __user *) __cu_to, __cu_from, __cu_len);	\
	}										\
	__cu_len;									\
})