aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/lib
diff options
context:
space:
mode:
authorAndy Lutomirski <luto@kernel.org>2016-07-14 16:22:57 -0400
committerIngo Molnar <mingo@kernel.org>2016-07-15 04:26:30 -0400
commit13d4ea097d18b419ad2a2b696063d44bf59acec0 (patch)
tree099cb3a4ee73be56742d6abcd3d5e2bdd541f65b /arch/x86/lib
parent2a53ccbc0de1b1950aeedd24680f7eca65c86ff5 (diff)
x86/uaccess: Move thread_info::addr_limit to thread_struct
struct thread_info is a legacy mess. To prepare for its partial removal, move thread_info::addr_limit out. As an added benefit, this way is simpler. Signed-off-by: Andy Lutomirski <luto@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/15bee834d09402b47ac86f2feccdf6529f9bc5b0.1468527351.git.luto@kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/lib')
-rw-r--r--arch/x86/lib/copy_user_64.S8
-rw-r--r--arch/x86/lib/csum-wrappers_64.c1
-rw-r--r--arch/x86/lib/getuser.S20
-rw-r--r--arch/x86/lib/putuser.S10
-rw-r--r--arch/x86/lib/usercopy_64.c2
5 files changed, 21 insertions, 20 deletions
diff --git a/arch/x86/lib/copy_user_64.S b/arch/x86/lib/copy_user_64.S
index 2b0ef26da0bd..bf603ebbfd8e 100644
--- a/arch/x86/lib/copy_user_64.S
+++ b/arch/x86/lib/copy_user_64.S
@@ -17,11 +17,11 @@
17 17
18/* Standard copy_to_user with segment limit checking */ 18/* Standard copy_to_user with segment limit checking */
19ENTRY(_copy_to_user) 19ENTRY(_copy_to_user)
20 GET_THREAD_INFO(%rax) 20 mov PER_CPU_VAR(current_task), %rax
21 movq %rdi,%rcx 21 movq %rdi,%rcx
22 addq %rdx,%rcx 22 addq %rdx,%rcx
23 jc bad_to_user 23 jc bad_to_user
24 cmpq TI_addr_limit(%rax),%rcx 24 cmpq TASK_addr_limit(%rax),%rcx
25 ja bad_to_user 25 ja bad_to_user
26 ALTERNATIVE_2 "jmp copy_user_generic_unrolled", \ 26 ALTERNATIVE_2 "jmp copy_user_generic_unrolled", \
27 "jmp copy_user_generic_string", \ 27 "jmp copy_user_generic_string", \
@@ -32,11 +32,11 @@ ENDPROC(_copy_to_user)
32 32
33/* Standard copy_from_user with segment limit checking */ 33/* Standard copy_from_user with segment limit checking */
34ENTRY(_copy_from_user) 34ENTRY(_copy_from_user)
35 GET_THREAD_INFO(%rax) 35 mov PER_CPU_VAR(current_task), %rax
36 movq %rsi,%rcx 36 movq %rsi,%rcx
37 addq %rdx,%rcx 37 addq %rdx,%rcx
38 jc bad_from_user 38 jc bad_from_user
39 cmpq TI_addr_limit(%rax),%rcx 39 cmpq TASK_addr_limit(%rax),%rcx
40 ja bad_from_user 40 ja bad_from_user
41 ALTERNATIVE_2 "jmp copy_user_generic_unrolled", \ 41 ALTERNATIVE_2 "jmp copy_user_generic_unrolled", \
42 "jmp copy_user_generic_string", \ 42 "jmp copy_user_generic_string", \
diff --git a/arch/x86/lib/csum-wrappers_64.c b/arch/x86/lib/csum-wrappers_64.c
index 28a6654f0d08..b6fcb9a9ddbc 100644
--- a/arch/x86/lib/csum-wrappers_64.c
+++ b/arch/x86/lib/csum-wrappers_64.c
@@ -6,6 +6,7 @@
6 */ 6 */
7#include <asm/checksum.h> 7#include <asm/checksum.h>
8#include <linux/module.h> 8#include <linux/module.h>
9#include <linux/uaccess.h>
9#include <asm/smap.h> 10#include <asm/smap.h>
10 11
11/** 12/**
diff --git a/arch/x86/lib/getuser.S b/arch/x86/lib/getuser.S
index 46668cda4ffd..0ef5128c2de8 100644
--- a/arch/x86/lib/getuser.S
+++ b/arch/x86/lib/getuser.S
@@ -35,8 +35,8 @@
35 35
36 .text 36 .text
37ENTRY(__get_user_1) 37ENTRY(__get_user_1)
38 GET_THREAD_INFO(%_ASM_DX) 38 mov PER_CPU_VAR(current_task), %_ASM_DX
39 cmp TI_addr_limit(%_ASM_DX),%_ASM_AX 39 cmp TASK_addr_limit(%_ASM_DX),%_ASM_AX
40 jae bad_get_user 40 jae bad_get_user
41 ASM_STAC 41 ASM_STAC
421: movzbl (%_ASM_AX),%edx 421: movzbl (%_ASM_AX),%edx
@@ -48,8 +48,8 @@ ENDPROC(__get_user_1)
48ENTRY(__get_user_2) 48ENTRY(__get_user_2)
49 add $1,%_ASM_AX 49 add $1,%_ASM_AX
50 jc bad_get_user 50 jc bad_get_user
51 GET_THREAD_INFO(%_ASM_DX) 51 mov PER_CPU_VAR(current_task), %_ASM_DX
52 cmp TI_addr_limit(%_ASM_DX),%_ASM_AX 52 cmp TASK_addr_limit(%_ASM_DX),%_ASM_AX
53 jae bad_get_user 53 jae bad_get_user
54 ASM_STAC 54 ASM_STAC
552: movzwl -1(%_ASM_AX),%edx 552: movzwl -1(%_ASM_AX),%edx
@@ -61,8 +61,8 @@ ENDPROC(__get_user_2)
61ENTRY(__get_user_4) 61ENTRY(__get_user_4)
62 add $3,%_ASM_AX 62 add $3,%_ASM_AX
63 jc bad_get_user 63 jc bad_get_user
64 GET_THREAD_INFO(%_ASM_DX) 64 mov PER_CPU_VAR(current_task), %_ASM_DX
65 cmp TI_addr_limit(%_ASM_DX),%_ASM_AX 65 cmp TASK_addr_limit(%_ASM_DX),%_ASM_AX
66 jae bad_get_user 66 jae bad_get_user
67 ASM_STAC 67 ASM_STAC
683: movl -3(%_ASM_AX),%edx 683: movl -3(%_ASM_AX),%edx
@@ -75,8 +75,8 @@ ENTRY(__get_user_8)
75#ifdef CONFIG_X86_64 75#ifdef CONFIG_X86_64
76 add $7,%_ASM_AX 76 add $7,%_ASM_AX
77 jc bad_get_user 77 jc bad_get_user
78 GET_THREAD_INFO(%_ASM_DX) 78 mov PER_CPU_VAR(current_task), %_ASM_DX
79 cmp TI_addr_limit(%_ASM_DX),%_ASM_AX 79 cmp TASK_addr_limit(%_ASM_DX),%_ASM_AX
80 jae bad_get_user 80 jae bad_get_user
81 ASM_STAC 81 ASM_STAC
824: movq -7(%_ASM_AX),%rdx 824: movq -7(%_ASM_AX),%rdx
@@ -86,8 +86,8 @@ ENTRY(__get_user_8)
86#else 86#else
87 add $7,%_ASM_AX 87 add $7,%_ASM_AX
88 jc bad_get_user_8 88 jc bad_get_user_8
89 GET_THREAD_INFO(%_ASM_DX) 89 mov PER_CPU_VAR(current_task), %_ASM_DX
90 cmp TI_addr_limit(%_ASM_DX),%_ASM_AX 90 cmp TASK_addr_limit(%_ASM_DX),%_ASM_AX
91 jae bad_get_user_8 91 jae bad_get_user_8
92 ASM_STAC 92 ASM_STAC
934: movl -7(%_ASM_AX),%edx 934: movl -7(%_ASM_AX),%edx
diff --git a/arch/x86/lib/putuser.S b/arch/x86/lib/putuser.S
index e0817a12d323..c891ece81e5b 100644
--- a/arch/x86/lib/putuser.S
+++ b/arch/x86/lib/putuser.S
@@ -29,14 +29,14 @@
29 * as they get called from within inline assembly. 29 * as they get called from within inline assembly.
30 */ 30 */
31 31
32#define ENTER GET_THREAD_INFO(%_ASM_BX) 32#define ENTER mov PER_CPU_VAR(current_task), %_ASM_BX
33#define EXIT ASM_CLAC ; \ 33#define EXIT ASM_CLAC ; \
34 ret 34 ret
35 35
36.text 36.text
37ENTRY(__put_user_1) 37ENTRY(__put_user_1)
38 ENTER 38 ENTER
39 cmp TI_addr_limit(%_ASM_BX),%_ASM_CX 39 cmp TASK_addr_limit(%_ASM_BX),%_ASM_CX
40 jae bad_put_user 40 jae bad_put_user
41 ASM_STAC 41 ASM_STAC
421: movb %al,(%_ASM_CX) 421: movb %al,(%_ASM_CX)
@@ -46,7 +46,7 @@ ENDPROC(__put_user_1)
46 46
47ENTRY(__put_user_2) 47ENTRY(__put_user_2)
48 ENTER 48 ENTER
49 mov TI_addr_limit(%_ASM_BX),%_ASM_BX 49 mov TASK_addr_limit(%_ASM_BX),%_ASM_BX
50 sub $1,%_ASM_BX 50 sub $1,%_ASM_BX
51 cmp %_ASM_BX,%_ASM_CX 51 cmp %_ASM_BX,%_ASM_CX
52 jae bad_put_user 52 jae bad_put_user
@@ -58,7 +58,7 @@ ENDPROC(__put_user_2)
58 58
59ENTRY(__put_user_4) 59ENTRY(__put_user_4)
60 ENTER 60 ENTER
61 mov TI_addr_limit(%_ASM_BX),%_ASM_BX 61 mov TASK_addr_limit(%_ASM_BX),%_ASM_BX
62 sub $3,%_ASM_BX 62 sub $3,%_ASM_BX
63 cmp %_ASM_BX,%_ASM_CX 63 cmp %_ASM_BX,%_ASM_CX
64 jae bad_put_user 64 jae bad_put_user
@@ -70,7 +70,7 @@ ENDPROC(__put_user_4)
70 70
71ENTRY(__put_user_8) 71ENTRY(__put_user_8)
72 ENTER 72 ENTER
73 mov TI_addr_limit(%_ASM_BX),%_ASM_BX 73 mov TASK_addr_limit(%_ASM_BX),%_ASM_BX
74 sub $7,%_ASM_BX 74 sub $7,%_ASM_BX
75 cmp %_ASM_BX,%_ASM_CX 75 cmp %_ASM_BX,%_ASM_CX
76 jae bad_put_user 76 jae bad_put_user
diff --git a/arch/x86/lib/usercopy_64.c b/arch/x86/lib/usercopy_64.c
index 0a42327a59d7..9f760cdcaf40 100644
--- a/arch/x86/lib/usercopy_64.c
+++ b/arch/x86/lib/usercopy_64.c
@@ -6,7 +6,7 @@
6 * Copyright 2002 Andi Kleen <ak@suse.de> 6 * Copyright 2002 Andi Kleen <ak@suse.de>
7 */ 7 */
8#include <linux/module.h> 8#include <linux/module.h>
9#include <asm/uaccess.h> 9#include <linux/uaccess.h>
10 10
11/* 11/*
12 * Zero Userspace 12 * Zero Userspace