diff options
author | Andy Lutomirski <luto@kernel.org> | 2016-07-14 16:22:57 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-07-15 04:26:30 -0400 |
commit | 13d4ea097d18b419ad2a2b696063d44bf59acec0 (patch) | |
tree | 099cb3a4ee73be56742d6abcd3d5e2bdd541f65b /arch/x86/lib | |
parent | 2a53ccbc0de1b1950aeedd24680f7eca65c86ff5 (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.S | 8 | ||||
-rw-r--r-- | arch/x86/lib/csum-wrappers_64.c | 1 | ||||
-rw-r--r-- | arch/x86/lib/getuser.S | 20 | ||||
-rw-r--r-- | arch/x86/lib/putuser.S | 10 | ||||
-rw-r--r-- | arch/x86/lib/usercopy_64.c | 2 |
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 */ |
19 | ENTRY(_copy_to_user) | 19 | ENTRY(_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 */ |
34 | ENTRY(_copy_from_user) | 34 | ENTRY(_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 |
37 | ENTRY(__get_user_1) | 37 | ENTRY(__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 |
42 | 1: movzbl (%_ASM_AX),%edx | 42 | 1: movzbl (%_ASM_AX),%edx |
@@ -48,8 +48,8 @@ ENDPROC(__get_user_1) | |||
48 | ENTRY(__get_user_2) | 48 | ENTRY(__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 |
55 | 2: movzwl -1(%_ASM_AX),%edx | 55 | 2: movzwl -1(%_ASM_AX),%edx |
@@ -61,8 +61,8 @@ ENDPROC(__get_user_2) | |||
61 | ENTRY(__get_user_4) | 61 | ENTRY(__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 |
68 | 3: movl -3(%_ASM_AX),%edx | 68 | 3: 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 |
82 | 4: movq -7(%_ASM_AX),%rdx | 82 | 4: 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 |
93 | 4: movl -7(%_ASM_AX),%edx | 93 | 4: 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 |
37 | ENTRY(__put_user_1) | 37 | ENTRY(__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 |
42 | 1: movb %al,(%_ASM_CX) | 42 | 1: movb %al,(%_ASM_CX) |
@@ -46,7 +46,7 @@ ENDPROC(__put_user_1) | |||
46 | 46 | ||
47 | ENTRY(__put_user_2) | 47 | ENTRY(__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 | ||
59 | ENTRY(__put_user_4) | 59 | ENTRY(__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 | ||
71 | ENTRY(__put_user_8) | 71 | ENTRY(__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 |