Commit a47f0754 authored by Tiezhu Yang's avatar Tiezhu Yang Committed by Huacai Chen
Browse files

LoongArch: Give more information if kmem access failed



If memory access such as copy_{from, to}_kernel_nofault() failed, its
users do not know what happened, so it is very useful to print the
exception code for such cases. Furthermore, it is better to print the
caller function to know where is the entry.

Here are the low level call chains:

  copy_from_kernel_nofault()
    copy_from_kernel_nofault_loop()
      __get_kernel_nofault()

  copy_to_kernel_nofault()
    copy_to_kernel_nofault_loop()
      __put_kernel_nofault()

Cc: stable@vger.kernel.org
Signed-off-by: default avatarTiezhu Yang <yangtiezhu@loongson.cn>
Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
parent 8a69d024
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -253,8 +253,13 @@ do { \
									\
	__get_kernel_common(*((type *)(dst)), sizeof(type),		\
			    (__force type *)(src));			\
	if (unlikely(__gu_err))						\
	if (unlikely(__gu_err))	{					\
		pr_info("%s: memory access failed, ecode 0x%x\n",	\
			__func__, read_csr_excode());			\
		pr_info("%s: the caller is %pS\n",			\
			__func__, __builtin_return_address(0));		\
		goto err_label;						\
	}								\
} while (0)

#define __put_kernel_nofault(dst, src, type, err_label)			\
@@ -264,8 +269,13 @@ do { \
									\
	__pu_val = *(__force type *)(src);				\
	__put_kernel_common(((type *)(dst)), sizeof(type));		\
	if (unlikely(__pu_err))						\
	if (unlikely(__pu_err))	{					\
		pr_info("%s: memory access failed, ecode 0x%x\n",	\
			__func__, read_csr_excode());			\
		pr_info("%s: the caller is %pS\n",			\
			__func__, __builtin_return_address(0));		\
		goto err_label;						\
	}								\
} while (0)

extern unsigned long __copy_user(void *to, const void *from, __kernel_size_t n);