[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210326000235.370514-2-tony.luck@intel.com>
Date: Thu, 25 Mar 2021 17:02:32 -0700
From: Tony Luck <tony.luck@...el.com>
To: Borislav Petkov <bp@...en8.de>
Cc: Tony Luck <tony.luck@...el.com>, x86@...nel.org,
linux-kernel@...r.kernel.org, linux-mm@...ck.org,
Andy Lutomirski <luto@...nel.org>,
Aili Yao <yaoaili@...gsoft.com>,
HORIGUCHI NAOYA( 堀口 直也)
<naoya.horiguchi@....com>
Subject: [PATCH 1/4] x86/mce: Fix copyin code to return -EFAULT on machine check.
When copy from user fails due to a machine check on poison reading
user data it should return an error code.
---
Separate patch just now, but likely needs to be combined with patches
to iteration code for bisection safety.
---
arch/x86/lib/copy_user_64.S | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/arch/x86/lib/copy_user_64.S b/arch/x86/lib/copy_user_64.S
index 77b9b2a3b5c8..2987118c541a 100644
--- a/arch/x86/lib/copy_user_64.S
+++ b/arch/x86/lib/copy_user_64.S
@@ -14,6 +14,7 @@
#include <asm/alternative-asm.h>
#include <asm/asm.h>
#include <asm/smap.h>
+#include <asm/errno.h>
#include <asm/export.h>
#include <asm/trapnr.h>
@@ -237,18 +238,21 @@ SYM_CODE_START_LOCAL(.Lcopy_user_handle_tail)
cmp $X86_TRAP_MC,%eax /* check if X86_TRAP_MC */
je 3f
1: rep movsb
-2: mov %ecx,%eax
+ mov %ecx,%eax
+ ASM_CLAC
+ ret
+
+2:
+ cmp $X86_TRAP_MC,%eax
+ je 3f
+ mov %ecx,%eax
ASM_CLAC
ret
/*
- * Return zero to pretend that this copy succeeded. This
- * is counter-intuitive, but needed to prevent the code
- * in lib/iov_iter.c from retrying and running back into
- * the poison cache line again. The machine check handler
- * will ensure that a SIGBUS is sent to the task.
+ * Return -EFAULT for the machine check cases
*/
-3: xorl %eax,%eax
+3: movl $-EFAULT,%eax
ASM_CLAC
ret
--
2.29.2
Powered by blists - more mailing lists