* [PATCH 2/4] x86, putuser: copy pasta into 32 and 64-bit versions
@ 2019-03-16 21:02 Alexey Dobriyan
2019-03-24 21:51 ` Borislav Petkov
0 siblings, 1 reply; 2+ messages in thread
From: Alexey Dobriyan @ 2019-03-16 21:02 UTC (permalink / raw)
To: tglx, mingo, bp, hpa; +Cc: x86, linux-kernel
I'm going to rewrite 64-bit version to use normal x86_64 calling convention.
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
---
arch/x86/lib/Makefile | 3 -
arch/x86/lib/putuser_64.S | 103 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 105 insertions(+), 1 deletion(-)
--- a/arch/x86/lib/Makefile
+++ b/arch/x86/lib/Makefile
@@ -21,7 +21,8 @@ clean-files := inat-tables.c
obj-$(CONFIG_SMP) += msr-smp.o cache-smp.o
lib-y := delay.o misc.o cmdline.o cpu.o
-lib-y += usercopy_$(BITS).o usercopy.o getuser.o putuser.o
+lib-y += usercopy_$(BITS).o usercopy.o getuser.o
+lib-y += putuser_$(BITS).o
lib-y += memcpy_$(BITS).o
lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o
lib-$(CONFIG_INSTRUCTION_DECODER) += insn.o inat.o insn-eval.o
similarity index 100%
rename from arch/x86/lib/putuser.S
rename to arch/x86/lib/putuser_32.S
new file mode 100644
--- /dev/null
+++ b/arch/x86/lib/putuser_64.S
@@ -0,0 +1,103 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * __put_user functions.
+ *
+ * (C) Copyright 2005 Linus Torvalds
+ * (C) Copyright 2005 Andi Kleen
+ * (C) Copyright 2008 Glauber Costa
+ *
+ * These functions have a non-standard call interface
+ * to make them more efficient, especially as they
+ * return an error value in addition to the "real"
+ * return value.
+ */
+#include <linux/linkage.h>
+#include <asm/thread_info.h>
+#include <asm/errno.h>
+#include <asm/asm.h>
+#include <asm/smap.h>
+#include <asm/export.h>
+
+
+/*
+ * __put_user_X
+ *
+ * Inputs: %eax[:%edx] contains the data
+ * %ecx contains the address
+ *
+ * Outputs: %eax is error code (0 or -EFAULT)
+ *
+ * These functions should not modify any other registers,
+ * as they get called from within inline assembly.
+ */
+
+#define ENTER mov PER_CPU_VAR(current_task), %_ASM_BX
+#define EXIT ASM_CLAC ; \
+ ret
+
+.text
+ENTRY(__put_user_1)
+ ENTER
+ cmp TASK_addr_limit(%_ASM_BX),%_ASM_CX
+ jae bad_put_user
+ ASM_STAC
+1: movb %al,(%_ASM_CX)
+ xor %eax,%eax
+ EXIT
+ENDPROC(__put_user_1)
+EXPORT_SYMBOL(__put_user_1)
+
+ENTRY(__put_user_2)
+ ENTER
+ mov TASK_addr_limit(%_ASM_BX),%_ASM_BX
+ sub $1,%_ASM_BX
+ cmp %_ASM_BX,%_ASM_CX
+ jae bad_put_user
+ ASM_STAC
+2: movw %ax,(%_ASM_CX)
+ xor %eax,%eax
+ EXIT
+ENDPROC(__put_user_2)
+EXPORT_SYMBOL(__put_user_2)
+
+ENTRY(__put_user_4)
+ ENTER
+ mov TASK_addr_limit(%_ASM_BX),%_ASM_BX
+ sub $3,%_ASM_BX
+ cmp %_ASM_BX,%_ASM_CX
+ jae bad_put_user
+ ASM_STAC
+3: movl %eax,(%_ASM_CX)
+ xor %eax,%eax
+ EXIT
+ENDPROC(__put_user_4)
+EXPORT_SYMBOL(__put_user_4)
+
+ENTRY(__put_user_8)
+ ENTER
+ mov TASK_addr_limit(%_ASM_BX),%_ASM_BX
+ sub $7,%_ASM_BX
+ cmp %_ASM_BX,%_ASM_CX
+ jae bad_put_user
+ ASM_STAC
+4: mov %_ASM_AX,(%_ASM_CX)
+#ifdef CONFIG_X86_32
+5: movl %edx,4(%_ASM_CX)
+#endif
+ xor %eax,%eax
+ EXIT
+ENDPROC(__put_user_8)
+EXPORT_SYMBOL(__put_user_8)
+
+bad_put_user:
+ movl $-EFAULT,%eax
+ EXIT
+END(bad_put_user)
+
+ _ASM_EXTABLE_UA(1b, bad_put_user)
+ _ASM_EXTABLE_UA(2b, bad_put_user)
+ _ASM_EXTABLE_UA(3b, bad_put_user)
+ _ASM_EXTABLE_UA(4b, bad_put_user)
+#ifdef CONFIG_X86_32
+ _ASM_EXTABLE_UA(5b, bad_put_user)
+#endif
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH 2/4] x86, putuser: copy pasta into 32 and 64-bit versions
2019-03-16 21:02 [PATCH 2/4] x86, putuser: copy pasta into 32 and 64-bit versions Alexey Dobriyan
@ 2019-03-24 21:51 ` Borislav Petkov
0 siblings, 0 replies; 2+ messages in thread
From: Borislav Petkov @ 2019-03-24 21:51 UTC (permalink / raw)
To: Alexey Dobriyan; +Cc: tglx, mingo, hpa, x86, linux-kernel
On Sun, Mar 17, 2019 at 12:02:39AM +0300, Alexey Dobriyan wrote:
> I'm going to rewrite 64-bit version to use normal x86_64 calling convention.
This commit message is too laconic and it needs to be in passive voice
and impartial. Also, here or in your 4/4 I'm missing the justification
for why you're doing all this.
--
Regards/Gruss,
Boris.
Good mailing practices for 400: avoid top-posting and trim the reply.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-03-24 21:51 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-16 21:02 [PATCH 2/4] x86, putuser: copy pasta into 32 and 64-bit versions Alexey Dobriyan
2019-03-24 21:51 ` Borislav Petkov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).